Problem mit sqrt
-
Hallo,
in der Uni hab ich ein Semester Einführung in die Programmierung in C.
Da haben wir die Aufgabe bekommen, ein Programm zu schreiben, welches bei quadratischen Funktion nach Eingabe von a,b,c die Lösungsmenge ausspucken soll und bei Eingaben, die z.b. die Wurzel negativ werden lassen, mit zu bedenken.
Da hab ich mir folgendes überlegt:# include <stdio.h> # include <math.h> int main() { double a; double b; double c; double x1; double x2; double t; double w; double m; printf(" \n Bitte geben Sie ihren Parameter a ein "); scanf("%lf", &a); printf(" \n Bitte geben Sie ihren Parameter b ein "); scanf("%lf", &b); printf(" \n Bitte geben Sie ihren Parameter c ein "); scanf("%lf", &c); t=2*a; m=(b*b-4*a*c); w=sqrt(m); if (t==0) { printf("Ihre Eingabe war nicht korrekt. Sie teilen bei einer Teilrechnung durch 0 oder haben einen negativen Wurzelausdruck."); } else if (w<0) { printf("Ihre Eingabe war nicht korrekt. Sie teilen bei einer Teilrechnung durch 0 oder haben einen negativen Wurzelausdruck."); } else { x1=((-b/(2*a))+(sqrt((b*b)-4*a*c))/(2*a)); x2=((-b/(2*a))-(sqrt((b*b)-4*a*c))/(2*a)); printf("Die Loesung x1 ihrer quadratischen Gleichung lautet:" "%lf\n", x1); printf("Die Loesung x2 ihrer quadratischen Gleichung lautet:" "%lf\n", x2); } return 0; }
Wenn ich das nun teste, klappt das eigentlich gut, einzig die Bedingung mit der Wurzel mag nich hinhauen. Da spuckt mein Compiler immer ne "Fehlermeldung" aus:
-1. #IND00
Hab schonmal ein bisschen gegoogelt und rumprobiert, hat aber alles nichts geholfen.
-
Der Ausdruck unter der Wurzel darf nicht negativ sein.
Bei dir ist das m.
Und wenn das negativ ist, berechnest du die Wurzel am besten gar nicht erst.
-
Hmm, stimmt natürlich
Manchmal verlier ich beim Programmieren doch den Blick fürs Detail^^
-
ich stell die Frage einfach mal gleich hier:
beim Compilieren bei uns anner Uni bekommt man bei der Programmabgabe immer ne Mail zugesand zwecks Syntaxfehlern. Über MinGW daheim bekomme ich in meinem Fall aber nichts. Er meldet anner Uni immer, dass er "sqrt" als undefined symbol bezeichnet, sprich er das scheinbar nicht kennt.
Als Bibliotheken hab ich math.h und stdio.h eingebunden. Liegt dort der Fehler, dass da noch was fehlt?
-
Wahrscheinlich fehlt die mathematische Bibliothek beim Linken. Ich weiß nicht, welchen Compiler du da hast, aber eventuell hilft die Compileroption
-lm
.
-
Die Header-Dateien (stdio.h, math.h und co) sind keine Bibliotheken.
Darin stehen nur die Hinweise für den Compiler, wie er die Funktionen aus den Bibliotheken verwenden soll.Die Bibliotheken muss man dem Compiler (genauer: dem Linker) noch mitteilen.
-
hmm und wo binde ich das dann -lm genau ein?
Also hier daheim hab ich wie gesagt MinGW und da klappt das perfekt.
Zur Abgabe des Programms muss das bei uns auf der Uniseite hochgeladen werden (nennt sich bei uns LEHVIS) Der prüft beim hochladen auf Syntaxfehler und stellt das eben fest und verschickt den Fehler als Mail.