[C] Programm zun lösen einer quadratischen Gleichung

Querscheck

Grünschnabel
Hallo und guten Tag hier im Forum! ;)

Ich brauch dringend eure Hilfe. Wir sollen im Informatikunterricht an unserer Schule ein Programm in C schreibenm, welches eine einfache quadratische Gleichung löst.

Die Gleichung soll so aufgebaut sein:

ax²+bx+c=o

Folgende 5 Fälle/Bedingungen soll das Programm beherschen:
1. a = 0 und b = 0 und c = 0 ----> trialer Fall

2. a = 0 und b= 0 und C != 0 ----> Widerspruch! Keine Lösung!

3. a = 0 und b != 0 ----> lineare Gleichung

4. a != 0 und d < 0 -----> Keine Lösung!

5. a != 0 und d > 0

-------------

Mit dem Quelltext bin ich schon mal ein bisschen angefangen, ich hab aber keinen Plan wie ich weiter machen soll....

Code:
#include <iostream>
#include <stdlib.h>

using namespace std;
//------------------------------------------------------------------------------
//Datei: quadro.cpp
//Programm zun lösen einer quadratischen Gleichung...
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
int main(int argc, char *argv[])
{
   
   float 
     a, // Faktor von x^2 
     b, // Faktor von x
     c, // konstantes Glied
     d; // Diskriminante
   
  
  cout << 
    "**************** Quadro King* **** © **********************"
    << endl;
  cout << "                                                "<< endl; // Leer
  cout << 
    "Dieses Programm loesst eine quadratische Gleichung, die in der Normalform:"
    << endl << endl;
  cout << "                 A*x^2 + B*x + C = 0" << endl << endl;
  cout << "vorliegen muss." << endl << endl;
  cout << "Bitte A, B und C gemaess der Normalform eingeben!" << endl;
  cin >> a >> b >> c;
  cout <<"A = " << a << endl;
  cout <<"B = " << b << endl;
  cout <<"C = " << c << endl;
  cout << "Die wurzel von " << a << " = " << sqrt(a) << endl;
  cout << "Der Pythagoras von A und B = " << sqrt(a*a + b*b) << endl;
        
      



    
  
  system("Pause");	
   return 0;
}


Kann mir einer Tipps geben oder mir helfen? Ist wirklich sehr wichtig...

Wäre super nett ;)


MFG

Querscheck
 
als erstes solltest du auch eine <math.h> includen, sonst kennt das Programm die mathematischen Funktionen nicht.
Was hältst du von ein paar if-Anweisungen?

Gruß TShanik
 
Ich will jetzt nicht direkt auf dein C-Programm eingehen, aber dafür auf deine 5 Punkte:
1. a = 0 und b = 0 und c = 0 ----> trialer Fall

2. a = 0 und b= 0 und C != 0 ----> Widerspruch! Keine Lösung!

3. a = 0 und b != 0 ----> lineare Gleichung

4. a != 0 und d < 0 -----> Keine Lösung!

5. a != 0 und d > 0

=============
1. is Klar
2. 0x² +0x + 5 = 5 => es gibt eine Lösung und keinen Widerspruch!
3. auch Klar
4. wo kommt das d her? Is das der rechte Teil der Gleichung?
wenn ja: f(x=-1): 2x² + 10x +5 = d
2 - 10 + 5 = -3 => es gibt eine lösung
5. wie bei 4, gibt eine lösung

Solltest du bei 4. und 5. mit d b gemeint haben, gibt 4. dennoch eine Lösung:
f(x=2): 2x² +(-10x) +2 =
8 - 20 +2 = -10
 
Hallöchen!
Nur zur Mathematik:

Original von Querscheck
(...)
2. a = 0 und b= 0 und C != 0 ----> Widerspruch! Keine Lösung!
(...)
4. a != 0 und d < 0 -----> Keine Lösung!
5. a != 0 und d > 0
(...)

Original von MCIglo
2. 0x² +0x + 5 = 5 => es gibt eine Lösung und keinen Widerspruch!
(...)
4. wo kommt das d her? Is das der rechte Teil der Gleichung?
wenn ja: f(x=-1): 2x² + 10x +5 = d
2 - 10 + 5 = -3 => es gibt eine lösung
5. wie bei 4, gibt eine lösung


@MCIGlo:
bei 2. hast du dich leider getäuscht: :( Die allgemeine Form der Gleichung ist ax² + bx +c = 0 , zumindest die "allgemeine Form der Gleichung, die Querscheck lösen will. Also gibt es tatsächlich keine Lösung, wenn a=0 und b=0 aber c!=0 (kann man recht schnell sehen) ;)

Da also der rechte Teil der Gleichung immer 0 ist bleibt auch bei 4. und 5. die Frage, was d sein könnte, steht aber auch im Text: Die Diskriminante, also bei der p-q-Formel der Teil unter der Wurzel. ;)

@Querscheck: Und jetzt kommt doch "nur" noch das eigentliche rechnen: Du überprüfst deine Bedingungen (mit geschachtelten if's) und berechnest demzufolge deine Lösung. Wie im Unterricht ;)
Achja, speichern und ausgeben könntest du sie auch noch ;-)

Grüßle, viel Erfolg!
Marei
 
Achso, das =o soll ein = 0 sein
dann is das natürlich was anderes :p

und das mit der Diskriminante hab ich übersehen, da ich mir das Programm selbst nicht angeschaut hab
 
man könnte auch das ganze in Abhängigkeit von der Diskriminante bringen und dann nur drei Fälle unterscheiden.

D>0 zwei Lösungen über die "Mitternachtsformel"
D=0 keine Lösung bzw. lösung wird komplex
D<0 genau eine lösung

dann wären es nur drei Fälle und der Rest sollte dein Programm bei richtigem Programmieren eigentlich alleine machen.
Natürlich solltest du vorher deine Diskriminante definieren.

vielleicht so etwas wie in der Art:

if(quadr_gleich (a, b, c, &x1,&x2)){
printf("\n die Loesung ist komlex");
}
else{
printf("\n die Loesungen lauten: x1= %.3f "
"\n x2= %.3f ", x1, x2);
}
}
printf ("Programm Ende\n\n");
}

int quadr_gleich (double p, double q,
double*x1, double*x2)
{
double D;
D = (p*p)/4 -q; // Ausdruck unter der Wurzel rechnen

if(D<0){
*x1 = *x2 = 0;
return(1); // .. ja, komplexe Lösung
}
*x1 = -p/2 + sqrt(r); // 1. Lösung berechnen
*x2 = -p/2 - sqrt(r); // 2. Lösung berechnen

return(0); // .. reelle Lösung
}

int quadr_gleich(double a, double b, double c,
double*x1, double*x2)
{
if(a==0){
*x1 = *x2 = 0;
return(1);
}
return( quadr_gleich( b/a, c/a, x1, x2));
}


ist aber nur ein Vorschlag und stark verbesserungswürdig
 

Neue Beiträge

Zurück