|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 6
|
[Incomprensibilie C]--primi passi
Ciao a tutti...
Ho da poco iniziato con il C, scaricando alcuni corsi per principianti presenti online... fortunatamente ho anche un amico un po' più esperto che mi sta aiutando in questo avvio... ma sono sorti alcuni problemi che non sappiamo come risolvere. Per farla breve, ho notato che alcuni programmi didattici presenti in quei corsi, mi danno dei risultati strambi, o addirittura non funzionano, così ho chiesto al mio amico di trovare gli eventuali errori e sorpresa, a lui funzionano correttamente! In pratica lo stesso codice, su 2 pc diversi produce 2 risultati diversi. Addirittura lo stesso programma compilato da lui (quindi un .exe) da lui produce un risultato e da me un altro. Ovviamente parliamo di programmini semplicissimi, calcola media, stampa valori ecc ecc. Il mio amico mi ha detto che potrebbe essere un problema relativo ai sistemi operativi, poichè lui usa linux e io xp. Il compilatore è lo stesso per entrambi, e si tratta di DevC++. Mi ha anche detto qualcosa tipo "il problema è che questi programmi cercano di accedere direttamente alla memoria, ma il Windows ci mette lo zampino e glielo impedisce, facendogli sballare tutti i valori". Se volete posso anche postare il codice incrimato poichè si tratta di poche righe... ma ora mi chiedo, da programmatore che muove i primi passi, e non volendo abbandonare windows per linux solo per far girare correttamente un programma che calcola una media matematica, come devo procedere per essere sicuro che un codice scritto correttamente, funzioni in maniera corretta anche sul mio pc? Grazie a tutti... |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
![]() Ma se lui lo compila sotto Linux, come puoi tu eseguire il binario sotto Win? Cmq posta il sorgente, che sono curioso...
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
|
![]() |
![]() |
![]() |
#3 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#4 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#5 | |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 6
|
Quote:
Grazie a tutti per le risposte... Aggiungo alcuni dettagli. La mia versione di DevC++ è: 4.9.8.0, mentre la sua è 4.9.9.2, oppure, quando usa il pc con linux, mi ha detto che "va direttamente di gcc". Il codice incriminato è il seguente: #include <stdio.h> int main(void) { int numerucci[10]; int cont; float media; for (cont=0; cont<10; cont++) { printf("\nDammi il numero %d: ",cont); scanf("%d",&numerucci[cont]); /* Scrivo nell'array */ } for (cont=0; cont<10; cont++) media=media+numerucci[cont]; media /= 10; printf("\nLa media tra i numeri introdotti e' %f.\n",media); return(0); } copiato e incollato direttamente dal corso di C scaricato. l'unica variazione che ho effettuato è stata quella di sostituire il tipo della variabile "media" che in origine era "int", ma in entrambi i casi i risultati sono sballati, mentre a lui questo codice funziona perfettamente. Come questo, anche altri miniprogrammi hanno dato risultati discordanti... |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Cmq prova a dirgli flot media = 0.0;
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2002
Città: Cagliari
Messaggi: 844
|
Quoto shynia, il problema è quello
![]() Il devc++ eiste per: Quote:
![]()
__________________
Non ho paura dei computer, ma della loro eventuale mancanza. (Asimov) Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C. (Firth) |
|
![]() |
![]() |
![]() |
#8 | |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 6
|
Quote:
Esatto.. nel primo post non avevo le idee molto chiare, ma nel secondo ho chiarito la doppia possibilità di cui lui dispone. |
|
![]() |
![]() |
![]() |
#9 | |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 6
|
Quote:
Non è un problema di inizializzazione in quanto sia inizializzata che no da esattamente lo stesso risultato. Inoltre, il problema sussiste sia se sono io a compilare il codice, sia se utilizzo direttamente l'eseguibile passatomi dal mio amico (che, ripeto, a lui funziona perfettamente). In tutti i casi a me vien fuori sempre lo stesso risultato , e precisamente, un numero di 9 cifre se utilizzo una variabile int, un numero di più o meno 15 cifre con 4 decimali se utilizzo la variabile float... |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Nov 2002
Città: Cagliari
Messaggi: 844
|
Quote:
![]()
__________________
Non ho paura dei computer, ma della loro eventuale mancanza. (Asimov) Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C. (Firth) |
|
![]() |
![]() |
![]() |
#11 | |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 6
|
Quote:
Si, l'ho fatto. Inoltre, il fatto che l'eseguibile compilato da lui, a lui funziona e a me da un risultato diverso, dovrebbe farti abbandonare definitivamente questa ipotesi. |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Nov 2002
Città: Cagliari
Messaggi: 844
|
Quote:
![]() Se fai anche media=0 allora non so ![]()
__________________
Non ho paura dei computer, ma della loro eventuale mancanza. (Asimov) Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C. (Firth) |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
![]() In pratica, il risultato che ottieni, a prescindere dal tipo di dato che utilizzi, e' corretto? Cioe', se fai la media inserendo dieci volte il valore 10, ottieni come risultato 10 (indipendentemente dalla precisione, nel caso dei float), oppure hai proprio risultati non corretti? ![]() ciao
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
Quote:
scusa ma dopo aver modificato il testo inizializzando la variabile media a 0 hai ricompilato? ![]() ![]() l'unica causa di errore è attribuibile alla mancata inizializzazione di quella variabile. al max puoi sostituire "media/=10" con "media=media/10" che è più pulito...se non riesci e ho tempo provo a compilarlo anch'io. |
|
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
l'ho compilato su dev-c++ : se media non è inizializzato da logicamente problemi,inizializzando media a 0 e ricompilando funziona.
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
![]()
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
|
![]() |
![]() |
![]() |
#17 |
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
Se inizializzo media a 0 e do in input 10 volte 1, il risultato è 1.000000.
Se non inizializzo media e do in input 10 volte 1, il risultato è 0.999997. gcc version 4.0.3 20051201 (prerelease) (Debian 4.0.2-5) |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Nov 2002
Città: Cagliari
Messaggi: 844
|
A me su linux funziona sia che faccia media = 0 sia che non lo faccia, non so se è merito di linux (ma non credo)
![]()
__________________
Non ho paura dei computer, ma della loro eventuale mancanza. (Asimov) Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C. (Firth) |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
in ogni caso è scorretto non inizializzare la variabile media. la causa non può essere che questa.può darsi che gcc(non ricordo però se lo fa)inizializza automaticamente la variabile a 0,vedendo che non è inizializzata in nessuna riga di codice.
|
![]() |
![]() |
![]() |
#20 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:33.