# [C] Programm zun lösen einer quadratischen Gleichung



## Querscheck (20. September 2004)

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


```
#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


----------



## basd (20. September 2004)

hää ? 

x1  =   (-b  + sqrt(b^2 -4ac))/2a

x2  =   (-b  - sqrt(b^2 -4ac))/2a

b^2 >=4ac


----------



## Martin Schroeder (23. September 2004)

Wir haben erade quadratische Gleichungen in Mathe und das kann man auch gut binomische Formeln gebrauchen (so als Tip, wenn du weiter bist)


----------



## TShanik (28. September 2004)

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


----------



## MCIglo (28. September 2004)

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


----------



## Abbreviation (28. September 2004)

Hallöchen!
Nur zur Mathematik:



> _ Original von Querscheck _
> (...)
> 2. a = 0 und b= 0 und C != 0 ----> Widerspruch! Keine 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


----------



## MCIglo (28. September 2004)

Achso, das =o soll ein = 0 sein
dann is das natürlich was anderes 

und das mit der Diskriminante hab ich übersehen, da ich mir das Programm selbst nicht angeschaut hab


----------



## TShanik (28. September 2004)

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


----------

