Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    27

    [c]Programma per il risolvere equazioni con il metodo ti aiteken, problema di compila

    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;
    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    posta l'errore almeno no??

    edit: ci sono mooooolti errori..

    1) i define non vanno con lo spazio dopo il cancelletto
    2) i define non vanno con l'uguale
    3) c'è uno switch senza i case!!!!
    4) "sqt".. penso ti riferissi a sqrt
    5) molte variabili cambiano nome dentro le funzioni.. sta attenta!

    e molti altri..

    ps: l'errore che dici tu è che manca una parentesi..
    pps: CAMBIA COMPILATORE PER CARITA', che il vc++ 2005 mi ha dato una ventina di errori e 2 warning

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [c]Programma per il risolvere equazioni con il metodo ti aiteken, problema di compila

    qui:

    # define assumzero=1E-20

    rimuovi l'operatore =

    Comunque ci sono anche altre cose da correggere... l'header file si chiama limits.h e non limit.h, hai mancato le parole chiave "case" nello switch e qualche altra cosa ancora... ad esempio fai attenzione alle parentesi graffe.
    every day above ground is a good one

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    27
    Ok proverò a moficare ciò che mi avete detto...grazie.
    non posso cambiare compilatore li vuole con questo perchè poi li prova con questo...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.