Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Quadratische Gleichung
Nac-Hac - Do 02.12.04 16:37
Titel: Quadratische Gleichung
Anbei mein Code für ne quadratische Gleichung. D.h. es werden 3 Koeffizienten (a,b,c) eingegeben und er gibt die Lösungen aus. Dazu soll noch ein Kommentar stehen (keine Lösung usw.)
Nur funzt das Proggi net.
Was hab ich falsch gemacht?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| procedure TFrmQuadr.BitBtn1Click(Sender: TObject); var a, b, c, d :real; kommentar :string; begin a:=StrToFloat (edit1.Text); b:=StrToFloat (edit2.Text); c:=StrToFloat (edit3.Text); d:=(b*b)-(4*a*c); Panel3.caption:=kommentar;
if a=0 then begin; Panel1.caption:='---'; Panel2.caption:='---'; kommentar:='Keine Lösung'; end else begin; if d<0 then begin; Panel1.caption:='---'; Panel2.caption:='---'; kommentar:='Keine Lösung'; end else begin; if d=0 then begin; Panel1.caption:=(-b)/(2*a); Panel2.caption:='---'; kommentar:='Eine Lösung'; end else begin; Panel1.caption:=(-b+sqr(d))/(2*a); Panel2.caption:=(-b-sqr(d))/(2*a); kommentar:='Zwei Lösungen'; end; end; end; end;
end. |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.Moderiert von
Tino: Topic aus Sonstiges verschoben am Fr 03.12.2004 um 09:36
AXMD - Do 02.12.04 16:56
:welcome:
Wär nett, wenn du vielleicht etwas genauer erläutern könntest, was nicht funktioniert.
//EDIT: Panel3.Caption := Kommentar muss nach den ifs stehen!!!
AXMD
greg - Do 02.12.04 17:01
Titel: Re: Quadratische Gleichung
Hallo Nac-Hac,
ich schreib Dir mal ein paar Kommentare rein ...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| procedure TFrmQuadr.BitBtn1Click(Sender: TObject); var a, b, c, d :real; kommentar :string; begin a:=StrToFloat (edit1.Text); b:=StrToFloat (edit2.Text); c:=StrToFloat (edit3.Text); d:=(b*b)-(4*a*c); Panel3.caption:=kommentar; if a=0 then begin Panel1.caption:='---'; Panel2.caption:='---'; kommentar:='Keine Lösung'; end else begin if d<0 then begin Panel1.caption:='---'; Panel2.caption:='---'; kommentar:='Keine Lösung'; end else begin if d=0 then begin Panel1.caption:=FloatToStr((-b)/(2*a)); Panel2.caption:='---'; kommentar:='Eine Lösung'; end else begin Panel1.caption:=FloatToStr((-b+sqr(d))/(2*a)); Panel2.caption:=FloatToStr((-b-sqr(d))/(2*a)); kommentar:='Zwei Lösungen'; end; end; end; end;
end. |
Und dann schau Dir nochmal die Bedingungen an, wie Du Sie verschachtelt hast und überleg Dir für welche Werte, die Abfragen wie abgearbeitet werden.
Gruß
Gregor
Nac-Hac - Do 02.12.04 17:33
Erst mal danke für eure schnelle Antwort...
also das 1. was nicht funktioniert hat, waren die panels, da hat er immer gemeldet :
Zitat: |
Incompatible types: 'String' and 'Extended' |
das habe ich mit Hilfe von greg's kommentaren gelöst (hat einfach FloatToStr gefehlt)
Ich kann das Programm jetzt wenigstens starten, auch wenn er mir die beiden Lösungen nicht korrekt berechnet (die Formeln müssten aber stimmen :? )
@greg: ich habe es doch übersichtlich strukturiert!
Nun gibts noch das Riesenproblem mit den Kommentaren
d.h. Wenn es nur eine Lösung gibt (was vorkommen kann wenn die Diskriminante (d)= 0 ist) soll im Panel3 stehen: Eine Lösung
Zitat: |
Panel3.Caption := Kommentar muss nach den ifs stehen!!! |
wenn ich das unten hinschreibe, sagt er dass es Panel3 nicht gibt :???:
Hier meine überarbeitete Version (die Kommentare mal rausgenommen; wär echt nett wenn das jmd. wüsste)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| procedure TFrmQuadr.BitBtn1Click(Sender: TObject); var a, b, c, d :real; kommentar :string; begin a:=StrToFloat (edit1.Text); b:=StrToFloat (edit2.Text); c:=StrToFloat (edit3.Text); d:=(b*b)-(4*a*c);
if a=0 then begin; Panel1.caption:='---'; Panel2.caption:='---'; kommentar:='Keine Lösung'; end else begin; if d<0 then begin; Panel1.caption:='---'; Panel2.caption:='---'; kommentar:='Keine Lösung'; end else begin; if d=0 then begin; Panel1.caption:=FloatToStr((-b)/(2*a)); Panel2.caption:='---'; kommentar:='Eine Lösung'; end else begin; Panel1.caption:=FloatToStr((-b+sqr(d))/(2*a)); Panel2.caption:=FLoatToStr((-b-sqr(d))/(2*a)); kommentar:='Zwei Lösungen'; end; end; end; end; end. |
Nac-Hac - Do 02.12.04 20:03
k habs jetzt
das mit dem panel3.caption:=kommentar war gar nicht notwendig :oops:
einfach panel3.caption:='blabla' usw.
Kroni - Do 02.12.04 20:16
Delphi-Quelltext
1: 2:
| Panel1.caption:=FloatToStr((-b+sqr(d))/(2*a)); Panel2.caption:=FloatToStr((-b-sqr(d))/(2*a)); |
also irgendwie fehlt mir da vor dem +sqr(d))/(2*a) ein sqrt....genauso bei dem -sqr.....
da müsste man doch noch + Wurzel aus irgendwas - Wurzel aus irgendwas oder??ß
Rechne das nochmal nach bitte
Nac-Hac - Do 02.12.04 20:27
ach ist sqrt die bez. für wurzel?
das könnte der fehler sein, warum ein falsches ergebnis rauskommt
//EDIT Ja das war die Lösung :wink: thx
Kroni - Do 02.12.04 21:18
Bitte sehr...ja, sqrt ist die Wurzel und sqr, wie du schon richtig eingegeben hast, ist ja das Quadrat nur die Wurzel fehlte ja eben
Ein hoch auf die Mathematik und die PQ Formel^^
EDIT:
Also ich würde da mal den Vorschlag machen, dass wenn a=0 ist, du ne Meldung ausgibst, dass es sich um keine quadratsiche Gleichung handelt, sonder du damit eien Lineare Gleichung der Form 0=bx+c errechnen kannst;-)
Nac-Hac - Do 02.12.04 21:59
hehe, ne für meine zwecke reicht das locker aus ^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!