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.png

    Weiß 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 durch 10. (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);
    

Anmelden zum Antworten