Brauche Hilfe, der Code funktioniert nicht !!!



  • Hallo an alle, schon ein paar Tage versuche ich dieses kleines Programm zum laufen zu bringen und kriege das nicht auf die Reihe, das Programm soll durch die ABC-Formel die Lösung zu einer quadratische Gleichung liefern, dabei ist zu beachten, das nicht für alle Gleichungen eine reelle Lösung gibt. Könnt ihr mir helfen?, wäre sehr dankbar. Wo ist der Fehler, das immer nur blödsinn ausgegeben wird, wie kann man das besser machen, Danke im vorraus 🙂 . Hier der Code.

    /* Aufgabe zur Lösung von quadratischen Gleichungen */
    /* Formel x1/2 = (-b) +- wurzel(b² - 4ac) / 2a */

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    void funktion(const double a, const double b, const double c, double *x1, double *x2);

    main()
    {
    double a, b, c, x1, x2;

    printf("Geben Sie ""a"" ein: ");
    scanf("%f", &a);
    printf("Geben Sie ""b"" ein: ");
    scanf("%f", &b);
    printf("Geben Sie ""c"" ein: ");
    scanf("%f", &c);

    funktion(a, b, c, &x1, &x2);

    if(x1 != x2)
    {
    printf("X1 = %0.3f\n", x1);
    printf("X2 = %0.3f\n", x2);
    }
    else if(x1 == x2)
    {
    printf("Doppelte Stelle bei %0.3f.\n", x1);
    }
    return 0;
    }

    void funktion(const double a, const double b, const double c, double *x1, double *x2)
    {
    double det = (pow(b,2) - (4*a*c));
    double wurzel = sqrt(det);

    if(det != 0 && det > 0)
    {
    *x1 = (-b + wurzel) / (2*a);
    *x1 = (-b - wurzel) / (2*a);
    }
    else if(det == 0)
    {
    *x1 = (-b + wurzel) / (2*a);
    *x1 = (-b - wurzel) / (2*a);
    }
    else if( det != 0 && det < 0)
    {
    printf("Keine reelle Lösung.\n");
    }
    }



  • 1. Es gibt hier Codetags

    void funktion(const double a, const double b, const double c, double *x1,  double *x2)
    {
    	double det = (pow(b,2) - (4*a*c));
    	double wurzel = sqrt(det);
    
    	if(det != 0 && det > 0)
    	{
    		*x1 = (-b + wurzel) / (2*a);
    		*x1 = (-b - wurzel) / (2*a);
    	}
    	else if(det == 0)
    	{
    		*x1 = (-b + wurzel) / (2*a);
    		*x1 = (-b - wurzel) / (2*a);
    	}
    	else if( det != 0 && det < 0)
    	{ 
    		printf("Keine reelle Lösung.\n");
    	}
    }
    

    2. Debugger gibt es auch (nicht hier, aber im allgemeinen)
    3. Du hast immer nur x1 =... da stehen



  • Das Problem liegt darin, dass bei scanf("%f", &double-Wert) nur Mist im double steht. Ändere die Variablen a,b und c vom Typ nach float.
    Außerdem gibt es noch einen copy&paste-Fehler bei der Berechnung von x2.

    if(det != 0 && det > 0)
    {
        *x1 = (-b + wurzel) / (2*a);
        *x1 = (-b - wurzel) / (2*a);  // *x2
    }
    else if(det == 0)
    {
        *x1 = (-b + wurzel) / (2*a);
        *x1 = (-b - wurzel) / (2*a);  // *x2
    }
    else ...
    

    Das ganze ist C-Code und das C-Forum ist hier.

    :xmas2: Werner



  • Vielen Dank für die Schnelle Antwort, ihr hab recht gehabt, vielen dank !!! 🙂 :xmas1:


Anmelden zum Antworten