quadratische Gleichung was ist hier falsch bitte?



  • anddy007 schrieb:

    double D=(pow(p/2,2)-q)>0 ? (-p/2)+d :(-p/2)-d ;
    

    Hallo Anddy

    an dieser Stelle liest Du aus der uninitialisierten Variable 'd'. 'd' und 'D' sind zwei verschiedene Variablen, da C++ case-sensitive ist - also zwischen Klein- und Groß-Schreibung unterscheidet.

    Der Ausdruck für das Ziehen einer Wurzel (z.B. aus double x) heißt sqrt( x ).

    Versuche zunächst alle benötigten Variablen also D und x1 und x2 zu berechnen und verfahre dann in Abhängigkeit ihrer Werte. Und es reicht auch hin sie genau einmal zu berechnet; das macht das Programm nicht nur schneller (spielt hier wirklich keine Rolle) sondern auch übersichtlicher.

    Gruß
    Werner



  • @joomoo so lautet die aufgabe:

    Für eine quadratische Gleichung der Form  lautet die Lösungsformel . Die Diskriminante D errechnet sich nach der Formel .
    
    Die Lösungen der quadratischen Gleichung hängen von D wie folgt ab:
    
     :  und  sind reell und verschieden,
     :  und  sind reell und gleich,
     :  und  sind konjugiert-komplex.
    
    Schreiben Sie ein Programm, welches die Werte von p und q in gleichnamige Variablen des Typs double einliest und alle Lösungen, auch die konjugiert-komplexen, ausgibt. Kennzeichnen Sie eine komplexe Zahl in der Ausgabe durch ein nachgestelltes »i«.
    


  • @Werner Salomon
    ja d und D sind uterschidlich aber wenn ich 'd' schreibe das program zegt fehler
    double instalirung von var `d`deshalb habe ich verändert
    aber das prog ist falsch wel zeigt nicht die richtige werte
    😕



  • Wenn d die Diskriminante sein soll, dann musst Du sie auch berechnen:

    d = pow(p/2,2)-q;
    

    Erst danach kannst Du Deine Variable D berechnen.
    Mir ist aber nicht klar, wass Du mit D bezwecken willst. Wenn d < 0, dann hast Du keine Nullstellen, wenn d = 0, dann hast Du eine Nullstelle, wenn d > 0, dann hast Du zwei Nullstellen (-p/2 +/- sqrt(d)).
    siehe z.B. http://de.wikipedia.org/wiki/Pq-Formel



  • anddy007 schrieb:

    @Werner Salomon
    ja d und D sind uterschidlich aber wenn ich 'd' schreibe das program zegt fehler
    double instalirung von var `d`deshalb habe ich verändert
    😕

    .. aber das ist doch keine Lösung 🙄 - was soll 'd' den sein? und was willst Du mit

    anddy007 schrieb:

    double D=(pow(p/2,2)-q)>0 ? (-p/2)+d :(-p/2)-d ;
    

    bezwecken?

    Gruß
    Werner



  • #include <cmath>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {/*sowei bin ich aber ich weiß nicht was ich schreiben muss damit ich den 
    determinane werte rechnet 
    D<0,D=0,D>0 */
    
        double p,q,x1,x2,d;//x^2 + px + q  d = diskriminante;
        cout << "p: ";
        cin >> p;
        cout<< "q: ";
        cin >> q;
        double D=(pow(p/2,2)-q)>0 ? -p/2 + sqrt((p/2)*(p/2) - q)  : -p/2 - sqrt((p/2)*(p/2) - q) ;
    
        cout<< "x1: " <<"=" << -p/2 + sqrt((p/2)*(p/2) - q)<< endl; 
        cout<<  "x2: " <<"=" << -p/2 - sqrt((p/2)*(p/2) - q)<<endl; 
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • Hallo Anddy,

    Das Einlesen von 'p' und 'q' war ja Ok

    #include <cmath>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {  
        double p,q; //x^2 + px + q
        cout << "p: ";
        cin >> p;
        cout<< "q: ";
        cin >> q;
    

    Die Parameter (int argc, char *argv[]) kannst Du weglassen, da Du sie nicht benötigst. Als nächstes bestimmst Du die Diskriminante

    double D = (p/2)*(p/2) - q;
    

    und nichts anderes. Dann ist natürlich zu überprüfen, ob dieser Wert >0, ==0 oder <0 ist.
    Du schreibst, dass Du kein if benutzen kannst - solltest Du hier aber tun:

    if( D > 0.0 )   // wenn der Wert von D größer als 0 ist
        {
            // dann ...
            cout<< "x1: = " << p/2 + sqrt(D) << endl;   // wert für 1.
            cout<< "x2: = " << p/2 - sqrt(D) << endl;   //    und 2. Lösung ausgeben
        }
    

    lt. Deiner Aufgabenstellung sollst Du auch die anderen Fälle abdecken. In C++ geht es dann so weiter

    else if( D == 0.0 )
        {
            cout<< "x2: = " << p/2 << endl;
        }
        else  // hier kann D nur kleiner als 0 sein
        {
            cout<< "x1: = " << p/2 << " + i * " << sqrt(-D) << endl;
            cout<< "x2: = " << p/2 << " - i * " << sqrt(-D) << endl;
        }
    
        system("PAUSE");
        return 0;       // 0 ist ok
    }
    

    Gruß
    Werner



  • danke aber ich habe den if operator noch nicht gelernt
    deshalb waollte ich mit
    auswahloperator oder( Fragezeichenoperator, ternärer Operator oder Bedingungsoperator) diese aufgabe lösen
    mfg
    anndy



  • if() ist kein Operator 😉 (und wo lernst du denn, daß solche Bonus-Eigenschaften wie ?: eher durchgenommen werden als die Programmier-Grundlagen (if oder Schleifen)?)

    *versucht, das if()-Beispiel in ein ?: umzuwandeln*

    cout<< (D<0)
      ? "keine Lösung"<<endl
      : (D>0)
        ? "Zwei Lösungen: x0="<< p/2+sqrt(D) <<", x1="<< p/2-sqrt(D) <<endl
        : "Eine Lösung: x="<< p/2 <<endl;
    


  • an der uni eistieg in c++
    ist sehr schwer diese(?:) zu verstehn if glaube ich ist einfaecher
    ich habe wieder werzucht aber es klappt nicht sch......
    ich habe den text in tutorium 100 mal gelesen aber dort es gibt keine konkrete
    bsp
    sind einige bsp die einfach sind

    mfg anndy



  • so sollte sein
    [cpp]ist sehr schwer diese( ? : )zu verstehn if glaube ich ist einfaecher[cpp]



  • anddy007 schrieb:

    ist sehr schwer diese ( ? : ) zu verstehn if glaube ich ist einfaecher

    Ja, if() ist einfacher zu verstehen und idR auch flexibler, aber wenn du auf ?: bestehst, mußt du da durch.


Anmelden zum Antworten