Schleifen-Fehler
-
Hallo zusammen! Ich bin am verzweifeln...
#define _USE_MATH_DEFINES #define OMEGA 2*M_PI*f_i #include<stdio.h> #include<stdlib.h> #include<math.h> struct sKomplex{ double REAL; double IMG; }; int main(void) { double BASIS_10=10,R, C, L, f_i=0; int i,f=100; double _REAL=0, _IMG=0; struct sKomplex REAL={_REAL}; struct sKomplex IMG={_IMG}; L=15*pow(BASIS_10, -3); C=1.8*pow(BASIS_10, -6); R=100; printf("Induktivitaet: %lgH\n", L); printf("Kapazitaet: %lgF\n",C); printf("PI: %g\n", M_PI); for(i=0; i<=20; i++) { f_i =f*pow(BASIS_10, i/10); _REAL=( pow(OMEGA*R*C, 2) / ( pow(1-pow(OMEGA,2)*L*C, 2) + pow(OMEGA*R*C,2) ) ); printf("\n%g\n", _REAL); } system("PAUSE"); return EXIT_SUCCESS; }
Das Programm berechnet die Segmente meiner Frequenz f=100 Hz. Ich habe es schrittweise durch den Debugger laufen lassen. Und er berechnet nie den wert für f_i neu!
Hier mein Fenster:
http://www10.pic-upload.de/thumb/17.04.12/l8cb6s3h3u.pngWeiß jemand Rat?
LG Max-Hansen
-
Max-Hansen schrieb:
f_i =f*pow(BASIS_10, i/10);
Hier willst du vermutlich lieber
"i/10."
. Wenn du durch 10 dividierst, ist das eine Ganzzahlendivision und damit ist für i=0 bis i=9 das Ergebnis 0. Also dividiere durch10.
(double). Wenn ein Operand Fließkomma ist, ist auch das Ergebnis Fließkomma.
-
ah okay! Guten morgen
wenn ich durch eine Ganzzahl dividiere kommt da Quatsch raus
So gehts:
f_i =f*pow(BASIS_10, i/10.0);
Vielen Dank!
-
Max-Hansen schrieb:
wenn ich durch eine Ganzzahl dividiere kommt da Quatsch raus
Jein.
Wenn beide Operanden ganzzahlige Typen sind wird auch ganzzahlig gerechnet.
Du kannst auch einen Parameter nach double casten:f_i =f*pow(BASIS_10, (double)i/10); //oder f_i =f*pow(BASIS_10, i/(double)10);