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=falseDen 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
-
- schreib ein "int" vor "main"
- checkaoutputfile1 != checkoutputfile1 - also mach das "a" weg
- 12 != l2 (L vs. 1)
- formatier deinen code das nächste mal bitte anständig