| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  08-12-2005, 14:54 | #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... | 
|   |   | 
|  08-12-2005, 14:59 | #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   | |
|   |   | 
|  08-12-2005, 22:12 | #3 | ||
| Senior Member Iscritto dal: Nov 2005 Città: TO 
					Messaggi: 5206
				 | Quote: 
   Quote: 
 
				__________________ Andrea, SCJP 5 (91%) - SCWCD 5 (94%) | ||
|   |   | 
|  08-12-2005, 22:31 | #4 | |
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | Quote: 
 | |
|   |   | 
|  09-12-2005, 00:03 | #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... | |
|   |   | 
|  09-12-2005, 10:23 | #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 | |
|   |   | 
|  09-12-2005, 11:57 | #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) | |
|   |   | 
|  09-12-2005, 12:22 | #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. | |
|   |   | 
|  09-12-2005, 12:27 | #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... | |
|   |   | 
|  09-12-2005, 12:33 | #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) | |
|   |   | 
|  09-12-2005, 12:38 | #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. | |
|   |   | 
|  09-12-2005, 13:16 | #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) | |
|   |   | 
|  10-12-2005, 11:07 | #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   | |
|   |   | 
|  10-12-2005, 13:11 | #14 | |
| Member Iscritto dal: Nov 2005 
					Messaggi: 154
				 | Quote: 
 scusa ma dopo aver modificato il testo inizializzando la variabile media a 0 hai ricompilato?  a volte capitano queste sviste   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. | |
|   |   | 
|  10-12-2005, 13:19 | #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.
		 | 
|   |   | 
|  10-12-2005, 15:38 | #16 | |
| Senior Member Iscritto dal: Mar 2005 
					Messaggi: 1653
				 | Quote: 
   
				__________________ gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto   | |
|   |   | 
|  10-12-2005, 16:00 | #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) | 
|   |   | 
|  10-12-2005, 16:25 | #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) | 
|   |   | 
|  10-12-2005, 19:14 | #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.
		 | 
|   |   | 
|  11-12-2005, 01:06 | #20 | |
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | Quote: 
   | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 23:58.









 
		 
		 
		 
		












 
  
 



 
                        
                        










