www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Xan

Gepostet:
24.07.2012 23:46

quadratische Gleichung lösen  
Hallo,
die Funktion soll die quadratische Gleichung nach Eingabe a b c lösen. Aber es funktionier nicht weil es in der Funktion zu viele \"=\" gibt :Hugs> \"Syntax error in expression (unexpected `=\')\"


quadratGleichung :: Float -> Float -> Float -> Float
quadratGleichung a b c = pqFormel
where
pqFormel a b c = if a>0 then p = (a/b) && q = (a/c) else b=p && q=c
pqFormel x1 = -(p/2)+sqrt(((p*p)/4)-q)
pqFormel x2 = -(p/2)-sqrt(((p*p)/4)-q)



Zum Seitenanfang    
 
Landei

Gepostet:
25.07.2012 00:10

   
Hier erst mal der Code, der beide Lösungen - so vorhanden - als Paar ausgibt. Natürlich gibt es Fehler, wenn die Wurzel imaginär ist.


quadratGleichung :: Float -> Float -> Float -> (Float, Float)
quadratGleichung a b c =
let p = b / a
q = c / a
root = sqrt(((p*p)/4.0)-q)
in (0.0 - p/2.0 - root, 0.0 - p/2.0 + root)


Haskells Umgang mit - ist etwas hakelig, da ein Operator nicht gleichzeitig unär und binär sein kann. Also verwendet man entweder die negate-Funktion, oder schreibt wie ich einfach eine Null davor.

Zu Zahlen in Haskell solltest du dir mal http://www.haskell.org/tutorial/numbers.html anschauen (da werden auch komplexe Zahlen erwähnt, so dass man diese Aufgabe auch für imaginäre Wurzeln lösen könnte).
Zum Seitenanfang    
 
Xan

Gepostet:
25.07.2012 00:50

   
Wenn ich deine Funktion im Hugs compeliere , dann kriege ich den Fehler Main> quadratGleichung 5 3 5
\"(
Program error: argument out of range\"
Und wenn ich für a Null eingebe, dann sind p und q auch Null.........
Zum Seitenanfang    
 
Landei

Gepostet:
25.07.2012 08:21

   
Das Programm funktioniert so wie es ist in GHC, Hugs habe ich nicht installiert. Die 0.0 kann man doch weglassen, habe ich gerade gemerkt.

Wenn a == 0 ist, handelt es sich nicht mehr um ein Polynom zweiten Grades, und damit ist die Formel nicht mehr anwendbar (p und q werden NaN, nicht 0).

Und die von dir eingegebene Gleichung 5x² + 3x + 5 == 0 hat keine reellen Wurzeln, sondern komplexe, muss also bei Berechnung mit reellen Zahlen einen Fehler liefern (das passiert beim Wurzelziehen aus einer negativen Zahl). Schau es dir selbst an: http://www.wolframalpha.com/input/?i=5x%C2%B2+%2B+3x+%2B+5+%3D+0

Zum Seitenanfang