Ciao,
Devo consegnare una serie di esercizi assurdi al mio professore domani e non riesce a capire perchè il compilatore Dev mi segnali un errore nell'istruzione if ((abs(x))<=assumzero) della procedura di aiteken...qualcuno sa aiutarmi a risolvere il problema? sono abbastanza dipserata...
codice:#include<stdio.h> #include<stdlib.h> #include<math.h> #include<float.h> #include<limit.h> #include<string.h> #include<time.h> # define Max 100// Max numero di iterazioni # define xTol 5E-7 // Tolleranza # define assumzero=1E-20 const double tol = 5E-7 ; typedef unsigned posints; // Funzione per la restituzione della data e dell'ora di sistema char *data() { time_t t; char *data; t = time(&t); data = asctime(localtime(&t)); data[strlen(data)-1]='\0'; // Elimino l'ultimo carattere della string data (\n) return(data); } // Funzione per l'intestazione del file void FileIntestazione(FILE *fUscita, char *FileUscita) { fprintf(fUscita, "Ottava esercitazione\n"); fprintf(fUscita, "File generato %s dall'algoritmo Esercizio8.cpp\n", data()); fprintf(fUscita, "Nome file output: %s\n", FileUscita); } double f(double x) { return (4*(x*x*x)-2*x+1); } double g(double x) { return (-2*(x*x*x)/0.6); } void Aiteken ( double(* g)(double), double x0, double xtol, unsigned maxits, double *root, unsigned *noofits, int* outcomes, FILE*fUscita) { double x,oldx,x1,x2; unsigned itcount; enum{iterating,withintol,maxitsreached,toonearzero}state; x=x0; itcount=0; state=iterating; do { if ((abs(x))<=assumzero) { state=toonearzero; } else { oldx=x; itcount+=1; switch(itcount%3) { 0:{x0=x0-sqr(x1-x0)/(x2-2*x1+x0); x=x0; break; } 1:{x1=g(x0); x=x1; break;} 2:{x2=g(x1); x=x2; break;} } if(abs((x-oldx)/oldx)<=xtol) state=withintol; else if(itcount==maxits) state=maxitsreached; }while(state==iterating); *outcome=state; *root=x; *noofits=itcount; } int main() { double x,fx; posints its; int success; char nomeFile[]="Esercizio8.txt"; FILE *fUscita; //Apro il file in caso di insuccesso visualizzo un messaggio di errore if ((fUscita=fopen(nomeFile,"a+")) == NULL) { printf("errore apertura file %s!\n",nomeFile); exit(-1); } //Richiamo la funzione di intestazione del file FileIntestazione(fUscita,nomeFile); //Richiamo la funzione che risolve l'equazione con il metodo di aiteken RegulaFalsi(f, 1, M_PI/2, 50, &x, &its,&success,fUscita); fprintf(fUscita,"\n\n\n"); fprintf(fUscita,"tolleranza: %.16f\n",tol); if (success == 0) fprintf(fUscita,"Convergenza non raggiunta!\n"); fprintf(fUscita,"f(%.16f)=%.16f convergenza raggiunta in %d passi\n",x,fx,its); system ("pause"); return 0; }

Rispondi quotando