Fehler bei Potenzierung/Deklaration von Variablen??



  • Hi leute,
    also ich bin in c++ Neuling und habe jetzt ein Code geschreiben, bei dem ich ein Fehler habe, der womöglich recht einfach zu beheben ist.
    Die Struktur des Quellcodes ist dabei soweit in Ordnung, Vereinachungen sind erstmal nicht notwendig, da ich dabei nur so vorgegangen bin, wie ich mit meinem momentanen Wissenstand aus der Vorlesung dazu in der Lage war.
    Der Fehler liegt hierbei ganz einfach in der mathematischen Potenzierung
    bestimmter Variablen oder habe ich die Variablen vielleicht doch falsch deklariert? Die Fehler liegen in dem von mir fett markierten Bereich, den Rest des Codes habe ich aus einer Aufgabe, die ich zuvor schon korrekt absolviert hatte.
    Ich weiß, dass der Fehler vielleicht zu simpel ist, hoffe trotzdem auf einen richtigen Hinweis.
    Besten Dank boenz

    #include <stdio.h>
    #include <math.h>
    
    int main ()
    {
        float x,y,z;
        float a,b,c;
        int i,j;
    
        i = 2;
        j = 3;
        x = 3.4;
        y = 4.4;
        z = -3.6;
    
        [b]a = ((x^j)+(y^i))*z-1/(((x^i)-(y^j))*z);[/b]
        [b]b = (a^j)*((z^i)-(x^j));[/b]
        c = a*b;
    
        printf("Wir loesen folgende Gleichungen:\n\n");
        printf("a = (x^j+y^i)*z-1/((x^i-y^j)*z)\n");
        printf("b = a^j*(z^i-x^j)\n");
        printf("c = a*b\n\n");
        printf("Mit den gegeben Variablen:\n\n");
        printf("i = 2\n");
        printf("j = 3\n");
        printf("x = 3.4\n");
        printf("y = 4.4\n");
        printf("z = -3.6\n\n");
        printf("Die Loesung von a lautet: ");
        printf("%f\n",a);
        printf("Die Loesung von b lautet: ");
        printf("%f\n",b);
        printf("Die Loesung von c lautet: ");
        printf("%f\n",c);
    
        getchar();
        return(0);
    
    }
    


  • ^ ist wenn ich mich recht erinnere ein Bitweise-XOR, und nicht einfach die Potenz.

    Um potenzen zu errehnen gibt es std::pow aus <cmath>



  • Ok, danke, das Ergebnis der ersten Gleichung habe ich jetzt schonmal richtig, Quellcode sieht nun wie folgt aus:

    #include <stdio.h>
    #include <math.h>
    
    int main ()
    {
        float x,y,z;
        float a,b,c;
        double i,j,x1,x2,y1,y2,z1,a1;
    
        i = 2;
        j = 3;
        x = 3.4;
        y = 4.4;
        z = -3.6;
        x1 = pow(x,i);
        x2 = pow(x,j);
        y1 = pow(y,i);
        y2 = pow(y,j);
        z1 = pow(z,i);
        a1 = pow(a,j);
    
        a = (x2+y1)*z-1/((x1-y1)*z);
        b = a1*(z1-x2);
        c = a*b;
    
        printf("Wir loesen folgende Gleichungen:\n\n");
        printf("a = (x^j+y^i)*z-1/((x^i-y^j)*z)\n");
        printf("b = a^j*(z^i-x^j)\n");
        printf("c = a*b\n\n");
        printf("Mit den gegeben Variablen:\n\n");
        printf("i = 2\n");
        printf("j = 3\n");
        printf("x = 3.4\n");
        printf("y = 4.4\n");
        printf("z = -3.6\n\n");
        printf("Die Loesung von a lautet: ");
        printf("%f\n",a);
        printf("Die Loesung von b lautet: ");
        printf("%f\n",b);
        printf("Die Loesung von c lautet: ");
        printf("%f\n",c);
    
        getchar();
        return(0);
    
    }
    

    Das Ergebnis der anderen beiden Gleichungen sieht allerdings sehr merkwürdig aus: -1.#INF00, sowie die positive Form dessen für Aufgabe 3.
    Einen Fehler in den Formeln habe ich nicht gefunden, kann das wieder mit der deklaration zutun haben?



  • Zu dem Zeitpunkt, zu dem du a1 aus a berechnest, ist a noch uninitialisiert. Du musst die Reihenfolge dieser Anweisungen vertauschen.



  • Einfach so:

    b = a1*(z1-x2);
    a = (x2+y1)*z-1/((x1-y1)*z);
    

    😕
    Fehler bleibt dann aber.



  • Ne, er meint hier:

    i = 2;
        j = 3;
        x = 3.4;
        y = 4.4;
        z = -3.6;
        x1 = pow(x,i);
        x2 = pow(x,j);
        y1 = pow(y,i);
        y2 = pow(y,j);
        z1 = pow(z,i);
        a1 = pow(a,j); // Hier wird a benutzt, aber 
    
        a = (x2+y1)*z-1/((x1-y1)*z); // hier wird es definiert..
        b = a1*(z1-x2);
        c = a*b;
    

    also einfach:

    ..
    a = (x2+y1)*z-1/((x1-y1)*z); 
    a1 = pow(a,j); 
    ...
    


  • Ach wie dumm, ist ja auch logisch, alles klar. Vielen Dank euch allen...


Anmelden zum Antworten