View Full Version : [C] Problema Debug con programma per integrazione
Matte_487
20-04-2008, 18:54
Ciao a tutti...sono due giorni che mi picchio con questo programma e non riesco a capire come mai quando genero le soluzioni con visual studio mi dia degli errori. Qualcuno gentilmente puņ darci un'occhiata?? Grazie mille...
sottovento
21-04-2008, 10:22
Ciao a tutti...sono due giorni che mi picchio con questo programma e non riesco a capire come mai quando genero le soluzioni con visual studio mi dia degli errori. Qualcuno gentilmente puņ darci un'occhiata?? Grazie mille...
Quali errori ti da? In compilazione? In linking? In Esecuzione?
Se gli errori sono di compilazione, puoi postarli, magari comprensivi di nome file e numero di linea?
Se gli errori sono di linking, puoi postali?
Se gli errori sono di esecuzione, puoi dire se e' un crash? Un malfunzionamento (i.e. aspetti un risultato e ne ottieni un altro)? Puoi dire se succede sempre, o succede spesso, o raramente?
sottovento
21-04-2008, 10:34
Intanto ti segnalo qualche cosuccia:
- integrazione2.c
FILE *fp;
fp = fopen(filename,"w");
fprintf(fp, "0\t%f\n", old_q);
Non controlli se il file e' stato aperto correttamente. Nel caso non lo sia, fp sara' NULL e questo codice andra' in crash. Quindi per andare in crash basta inserire un nome di file non valido.
Per inciso: se lavori su sistemi Windows, e' meglio aprire un file di testo con "wt";
if(fabs(q - old_q) < fabs(q*e)){
//printf("OK: %f < %f\n",(fabs(q - old_q)), fabs((q*e)));
return q;
fclose(fp);
}
Ovviamente la fclose(fp) non verra' mai eseguita ed il tuo file restera' sempre aperto. Immagino che vorrai prima eseguire fclose(fp) e poi ritornare.
By the way: nel caso non raggiungessi la precisione richiesta, lasceresti comunque il file aperto, ti sei dimenticato di chiuderlo anche in quel caso (i.e. quando non esegui questo return).
Lo stesso vale in integraS
res=((float)4/3)*q2n-((float)1/3)*qn;
Fai il cast della divisione intera 4/3 (cioe' vale sempre uno).
Analogamente fai il cast della divisione intera 1/3 (cioe' vale sempre zero).
Immagino che intendevi fare la divisione fra reali, vale a dire
(float)4/(float)3
O, piu' semplicemente
4.0/3.0
(attenzione che in questo caso il risultato e' double, non float).
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.