C Programm zur Berechnung von quadratischen Funktionen

atiufi

Cadet 2nd Year
Registriert
März 2016
Beiträge
24
Hallo,

in der Uni haben wir eine Aufgabe bekommen.
Wir sollen ein Programm erstellen, welches die Lösungen von quad. Gleichungen berechnet.
Und man muss ja 3 Fälle machen für
D<0
D=0
D>0
Leider haben wir in der Schule nur die normale Analysis gemacht, dass heißt D<0=keine Lösung.
Aber wir sollen jetzt mit komplexen Lösungen arbeiten, aber ich weiß garnicht wie ich die Formel dazu schreiben soll. Im Internet habe ich auch nichts richtiges dazu gefunden.
Alles was ich im Internet gefunden habe war etwas mit "i" oder Wurzel 1, das habe ich dann versucht wie ihr im Code sehen könnt, aber ich bekomme beim Kompilieren den "format %lf expects a matching 'double' argument.
Ich hoffe ihr könnt mir helfen
Hier mal mein Code :
C:
#include<stdio.h>
#include<math.h>

int main() {
    
    double a,b,c;
    printf("Gebe eine Zahl für a ein: ");
    scanf("%lf", &a);
    printf("Gebe eine Zahl für b ein: ");
    scanf("%lf", &b); 
    printf("Gebe eine Zahl für c ein: ");
    scanf("%lf", &c);
    
    double d = (b*b)-(4*a*c);
    if(d>1) { 
        printf("%lf und %lf sind die beiden Lösungen\n",-b+sqrt(d),-b-sqrt(d));
    }
    else if(d==0) {
        printf("%lf ist die Lösung\n",-b+sqrt(d));
    }
    else {
        printf("%lf und %lf sind die komplexen Lösungen\n"),+sqrt(1)*sqrt(d),-sqrt(1)*sqrt(d);
    
}
return(0);
}

Mit freundlichen Grüßen

atiufi
 
Jetzt mach ich schon solange C, aber komplexe Zahlen habe ich noch nicht gebraucht....
Kurzes googeln ergab für mich, dass es einen standard header (heist für dich, du must nichts runterladen etc.) namens <complex.h> gibt.
Anwendung siehe hier:

https://pubs.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html
https://de.wikibooks.org/wiki/C-Programmierung:_Komplexe_Zahlen

Must also das double als
C:
double complex VarName
deklarieren und kommst dann mit
C:
creal(VarName), cimag(VarName)
an den realen bzw. an den imaginären Teil ran.
 
  • Gefällt mir
Reaktionen: atiufi
  1. Hier werden keine Hausaufgaben gelöst.
  2. Zeile 22 ist eine Klammer falsch gesetzt.
  3. Ich bin mir ziemlich sicher, das du mit Wissen aus diesem Link die Aufgabe sehr einfach lösen kannst.
 
  • Gefällt mir
Reaktionen: maloz
Komplexe Zahlen bestehen auch einem reellen und einem imaginären Teil. Entweder du stellt die jeweils mit einem eigene Double dar und berechnest die getrennt oder du nutzt wie von @Sweepi vorgeschlagen schon fertige Lösungen für Komplexe zahlen.
Wenn du die Teile einzeln berechnen willst, geht das mit der "pq-Formel" einfacher als mit der "Mitternachtsformel".
 
  • Gefällt mir
Reaktionen: atiufi
atiufi schrieb:
Alles was ich im Internet gefunden habe war etwas mit "i" oder Wurzel 1, das habe ich dann versucht wie ihr im Code
Sollte man nicht spaetestens an der Uni komplexe Zahlen in Mathe behandeln?

Davon abgesehen, die Aufgabenstellung muss erstmal vorgeben ob Loesungen in ℝ oder ℂ gesucht werden.

Aber gut, C hat selbstverstaendlich Bibliotheken dafuer.
 
Sweepi schrieb:
Jetzt mach ich schon solange C, aber komplexe Zahlen habe ich noch nicht gebraucht....
Kurzes googeln ergab für mich, dass es einen standard header (heist für dich, du must nichts runterladen etc.) namens <complex.h> gibt.
Anwendung siehe hier:

https://pubs.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html
https://de.wikibooks.org/wiki/C-Programmierung:_Komplexe_Zahlen

Must also das double als
C:
double complex VarName
deklarieren und kommst dann mit
C:
creal(VarName), cimag(VarName)
an den realen bzw. an den imaginären Teil ran.
Danke für deine Hilfe jetzt hat es geklappt!
Ich habe gedacht es wäre auch ohne einen extra header möglich die komplexen Lösungen zu berechnen, wahrscheinlich gibt es auch eine Möglichkeit aber so ist es einfacher :)

Zerstoerer schrieb:
  1. Hier werden keine Hausaufgaben gelöst.
  2. Zeile 22 ist eine Klammer falsch gesetzt.
  3. Ich bin mir ziemlich sicher, das du mit Wissen aus diesem Link die Aufgabe sehr einfach lösen kannst.
Ich will ja nicht, dass ihr für mich die ganze Hausaufgabe löst. Den größten Teil habe ich ja schon ich wusste nur nicht wie man komplexe Zahlen in C berechnet.
Und der Link zeigt nur das Beispiel bei reelen Zahlen und da würde es ja bei D<0 keine Lösung geben, das hilft mir in diesem Fall nicht weiter. Auch danke für deine Hilfe :)
 
Naja, ein double kann nun mal keine komplexen Zahlen aufnehmen, dafür ist der Datentyp schlicht nicht gedacht.
Im Übrigen sind deine oben angegebenen Lösungen (-b± √ d) auch noch falsch. Falls du das bisher noch nicht korrigiert hast, werde dir am besten über den mathematischen Sachverhalt, den du da behandeln willst klar.
Bei diesem Programm ist das trivial, bei größeren sollte man sich wirklich die Zeit nehmen und erst schauen, was man überhaupt mit dem Programm bezwecken will.

Edit: Und falls euch gesagt wurde, ihr sollt eine Fallunterscheidung treffen, dann wäre davon auszugehen, dass ihr den Code ohne complex lösen sollt.
 
atiufi schrieb:
Ich habe gedacht es wäre auch ohne einen extra header möglich die komplexen Lösungen zu berechnen, wahrscheinlich gibt es auch eine Möglichkeit aber so ist es einfacher
C:
    else {
        double p = b / a;
        double q = c / a;
        double RA = -p / 2.0;
        double IA = sqrt(fabs((p / 2.0)*(p / 2.0)-q));

        printf("%lf+%lfi und %lf-%lfi sind die komplexen Lösungen\n", RA, IA, RA, IA);
    }

so .z.b. geht bestimmt auch eleganter
 
  • Gefällt mir
Reaktionen: atiufi
Zurück
Oben