Verschiedene Errors



  • Hallo,
    ich habe ein Problem. Ich müss folgenden Code nutzen :
    http://books.google.de/books?id=RqHwM3KEI-wC&pg=PA233&lpg=PA233&dq=ebm+zu+darstellungszwecken&source=bl&ots=PGkK1sFLhZ&sig=RMrdaNPy1eh9rKqcqMapbFMBcY4&hl=de&ei=HNEfS47xBpqgngPHsMSgCw&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAoQ6AEwAA#v=onepage&q=ebm%20zu%20darstellungszwecken&f=false

    Den habe ich abgeschrieben und auch schon einige Fehler verbessert.

    Meins sieht jetzt wie folgt aus :

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
     #define NPT 40000
    
    float zufall01 (long *idum);
    float zufallgauss (long *idum);
    
    main( void)
    
    {
    double temp[NPT+1] , t_end ;
    
    double f_kw_in , f_kw_out , f_lw_out , f_netto ;
    
    double albedo, transmiss  ;
    
    double stoer [NPT+1] ;
    
    int i , i_dt_tage , n_jahre , n_zeitschritte ; 
    
    int j_albedo_feedback , j_stoer_transmiss ;
    
    long*p_stoer ;
    
    long i_stoer ;
    
    double ckl , ckd , ckt , cko ;
    
    double albedo_0 ,  transmiss_0 , f_kw_in_0 ;
    
    double sigma , stdabw_stoer ;
    double dt , ck ;
    double pi ;
    
    FILE *checkaoutputfile1;
    char szoutputfilename1[FILENAME_MAX],  *pcz_strchr_out ;
    
    j_albedo_feedback = 1 ;
    j_stoer_transmiss = 1 ;
    
    temp[0] = 288.0 ;
    
    i_dt_tage = 10 ;
    
    n_jahre = 1000 ;
    n_zeitschritte = (int)((365./(float)(i_dt_tage)) * n_jahre) ;       /* Fehler?*/
    
    stdabw_stoer = 0.03 ;
    
    ckl = 1.0E7 ;
    
    ckd = 2.0E8 ;
    
    ckt = 1.0E9 ;
    
    cko = 1.6E10 ;
    
    sigma = 5.7E-1 ;
    
    pi = 4.0 * atan(1.0) ;
    
    albedo_0 = 0.30 ;
    
    transmiss_0 = 0.64262 ;
    
    f_kw_in_0 = 342.0 ;
    
    dt = 60*60*24 * (float) i_dt_tage ;
    
    ck = ckd ;
    
    i_stoer = -14 ;
    p_stoer = &i_stoer ;
    
    checkoutputfile1 = fopen( "ebmout.dat"  , "w" )  ;
    
    {
    
    puts("Fehler: ebout.dat kann nicht geschrieben werden /n");
    exit(EXIT_FAILURE) ;
    
    } ;
    
    for( i = n_zeitschritte ; i = i+1 ;) 
    
    { 
    
    stoer [i] ; stdabw_stoer * (double) zufallgauss( &i_stoer ) ;
    
    albedo = albedo_0
                                 - (float) j_albedo_feedback * albedo_0 * 0.025 
                                 * tanh ( 1.548 * (temp[i]- 288.0)) ;
    
    transmiss = transmiss_0 
                     + (float) j_stoer_transmiss * stoer[i] * transmiss_0 ;
    
    f_kw_in = f_kw_in_0 ;
    
    f_kw_out = albedo * f_kw_in ;
    
    f_lw_out = 0.95*sigma*temp[i]*temp[i]*temp[i]*temp[i] ;
    
    f_netto = f_kw_in - f_kw_out - f_lw_out*transmiss ;
    
    temp[i+1] = temp[i]  + dt * (1/(ck)) * f_netto ;
    
    fprintf (checkoutputfile1, " %i %f   \n" , i , temp[i] ) ;
    
    }
    
    i = i-1 ;
    fclose(checkoutputfile1) ;
    }
    
    /*********ENDE MAIN******/
    
    float zufall01 (long *i_stoer)
    {
    long lauf, lauf2 ;
    static long l1=0 ;
    static long l2[2836] ;
    
    float resultat ;
    
    if  (*i_stoer <= 0 || !l1)
    
    {
    if  ( ((-1)*(* i_stoer)) < 1) 
    
    { *i_stoer = 1 ;
    
    }
    else {* i_stoer = (-1)*(*i_stoer) ;
    
    } ;
    
    for ( lauf=2836+7 ; lauf >=0 ;  lauf-- )
    
    { lauf2 = (*i_stoer) / 127773;
    *i_stoer =  16807*(*i_stoer-lauf2*127773) - 2836*lauf2;
    if(*i_stoer < 0);
    { *i_stoer += 2147483647;
    };
    if (lauf <2836)
    { 
    	12[lauf]= *i_stoer;
    };
    };
    l1=12[0];
    };
    lauf2 = ( *i_stoer ) /127773;
    *i_stoer = 16807 * (*i_stoer-lauf2*12773) - 2836 * lauf2;
    if( *i_stoer < 0 )
    { *i_stoer += 2147483648 ;
    };
    lauf = l1/(1+ (2147483647-1)/2836) ;
    l1 = 12[lauf];
    12[lauf] = *i_stoer;
    if (( resultat= (1.0/2147483647) *l1) > (1.0 - 1.2e-7))
    { return   (1.0 - 1.2e-7) ;
    }
    else
    { return resultat ;
    };
    }
    
    #include <math.h>
    float zufallgauss(long *i_stoer)
    {;
    	static long longintval=0;
    	static float resultat;
    	float fwurzel,betrag2;
    	float wert1,wert2;
    	float zufall01(long *i_stoer);
    	if (longintval == 0)
    
    	{ do
    	{ 
    		wert1=2.0*zufall01( i_stoer ) - 1.0;
    		wert2=2.0*zufall01( i_stoer ) - 1.0;
    		betrag2=wert1*wert1+wert2*wert2;
    	}
    	while (betrag2 >= 1.0 || betrag2 == 0.0);
    	fwurzel=sqrt(-2.0*log(betrag2)/betrag2);
    	resultat=wert1*fwurzel;
    	longintval=1;
    		return wert2*fwurzel;
    	}
    	else
    	{
    		longintval=0;
    		return resultat;
    	};
    }
    

    Nur leider habe ich immer noch folgende Fehler :

    1>------ Erstellen gestartet: Projekt: Temperatur, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>Temp01.cpp
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(17) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(89) : error C2065: 'checkoutputfile1': nichtdeklarierter Bezeichner
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(102) : warning C4552: '*': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(124) : error C2065: 'checkoutputfile1': nichtdeklarierter Bezeichner
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(129) : error C2065: 'checkoutputfile1': nichtdeklarierter Bezeichner
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(159) : warning C4390: ';': Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(163) : error C2109: Index erfordert ein Array oder einen Zeigertyp
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(166) : error C2109: Index erfordert ein Array oder einen Zeigertyp
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(174) : error C2109: Index erfordert ein Array oder einen Zeigertyp
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(175) : error C2109: Index erfordert ein Array oder einen Zeigertyp
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(176) : warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(177) : warning C4305: 'return': Verkürzung von 'double' in 'float'
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(196) : warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(197) : warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>d:\daten\privat\c++\temperatur\temperatur\temp01.cpp(201) : warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
    1>Das Buildprotokoll wurde unter "file://d:\Daten\Privat\C++\Temperatur\Temperatur\Debug\BuildLog.htm" gespeichert.
    1>Temperatur - 8 Fehler, 7 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    und ich weiß leider nicht, wie ich diese beheben kann.

    Hoffe ihr könnt mir helfen.

    Vielen Dank im Voraus
    Bastian



    1. schreib ein "int" vor "main"
    2. checkaoutputfile1 != checkoutputfile1 - also mach das "a" weg
    3. 12 != l2 (L vs. 1)
    4. formatier deinen code das nächste mal bitte anständig

Anmelden zum Antworten