![]() |
[Tutorial] Quadratische Gleichungen vollständig lösen
Liste der Anhänge anzeigen (Anzahl: 2)
Eine quadratische Gleichung hat die allgemeine Form
y = a*x^2 + b*x +c (1) Die Lösung(en) findet man bei y = 0 a*x^2 + b*x + c = 0 (2) Teilt man (2) durch a, erhält man die Normalform einer quadratischen Gleichung: x^2 + p*x + q = 0 (3), wobei p = b/a und q = c/a Die Lösung(en) erhält man mit der Formel: x1,2 = -p/2 +- sqrt(sqr(p/2)-q)) 4 Möglichkeiten sind zu beachten: 1.) Wenn a = 0 ist, liegt keine quadratische Gleichung vor. 2.) Wenn der Radikand sqr(p/2)-q Null ist, gibt es nur eine reelle Lösung. 3.) Wenn der Radikand positiv ist, gibt es 2 reelle Lösungen 4.) Wenn der Radikand negativ ist, gibt es 2 komplexe Lösungen Anmerkung zu (4): sqrt(-1) ist die imaginäre Zahl i
Delphi-Quellcode:
[edit=TBx]Das Thema dient inzwischen mehr der Erstellung eines Turorials. Wenn ein solches fertig gestellt ist, wird das Thema entsprechend verschoben, Einzug in die CL wird es sicherlich nicht finden. Dafür habe wir dann ja die Tutorial-Sparte. Mfg, TBx[/edit]
procedure TForm2.Button1Click(Sender: TObject);
var a,b,c,Radikand,wurzel,p,q,x1,x2,im,re:real; begin a:=StrToInt(Edit1.Text); b:=StrToInt(Edit2.Text); c:=StrToInt(Edit3.Text); if a=0 then showmessage('Keine quadratische Gleichung'); try p:=b/a;q:=c/a; except on E : Exception do begin ShowMessage('Exception class name = '+E.ClassName); ShowMessage('Exception message = '+E.Message); end; end; Radikand:=sqr(p/2)-q; If Radikand=0 then begin x1:=-p/2; Edit4.Text:= 'x = ' + FloatToStr(-p/2); Edit5.Text:=''; Label6.Caption:='Nur eine Lösung!'; end; If Radikand>0 then begin x1:=-p/2+sqrt(Radikand); x2:=-p/2-sqrt(Radikand); Edit4.Text:='x1 = ' + FloatToStr(x1); Edit5.Text:='x2 = ' + FloatToStr(x2); Label6.Caption:='2 relle Lösungen!'; end; If Radikand<0 then begin Radikand:=-Radikand; re:=-p/2; im:=sqrt(Radikand); Edit4.Text:=FloatToStr(re) + ' + '+ FloatToStr(im) + ' i'; Edit5.Text:=FloatToStr(re) + ' - '+ FloatToStr(im) + ' i'; Label6.Caption:='2 komplexe Lösungen!'; end; end; |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
eine möglichkeit um das zu umgehen: einen gewisse abweichung mit einzuberechnen. //edit artikel von luckie dazu: ![]() |
Re: Quadratische Gleichungen vollständig lösen
Muss Radikand = 0 problematisch sein? Ich würde behaupten die 0 lässt sich doch darstellen?
MfG xZise |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
|
Re: Quadratische Gleichungen vollständig lösen
Wie wär's denn damit:
If (Radikand < 1e99) or (Radikand >1e-99) then |
Re: Quadratische Gleichungen vollständig lösen
Oder Math.IsZero ;)
|
Re: Quadratische Gleichungen vollständig lösen
ich finde dieses Beispiel als Lehrbeispiel sehr, sehr, sehhr ungeeignet, weil direkt mit den Editfeldern in den Berechnungen gearbeitet wird.
Besser wäre es, die Ausgabe immer von den Berechnungen zu trennen. Erst Modul Eingabe, dann alle Werte zur Berechnung .. dann wieder zurück und dann Ausgabe. .. Daten von der Visualiserung trennen |
Re: Quadratische Gleichungen vollständig lösen
Also die Lösungsformel liest sich so (in Textform) sehr bescheiden. Ich würde vorschlagen, dafür ein Bild einzufügen (z. B. von der Wikipedia, oder von einem LaTeX-Onlineservice, oder halt vom eigenen Webscape). Desweiteren ist es wohl angenehmer, die Formel entsprechend für die allgemeine Form anzupassen. Klar ist so die Herleitung schöner, aber anwenden lässt es sich so nicht so schön.
@stoxx: Prinzipiell hast du da ja recht, aber wegen einer quadratischen Gleichung eine neue Unit aufzumachen, ist vielleicht etwas übertrieben. Klar, wenn da noch mehr dazukäme, wäre es sinnvoll. |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
gibt ja manchmal eine, zwei oder keine Reelle Lösung .. und es geht auch darum, sich sowas erst gar nicht anzugewöhnen, wie der Threadersteller es getan hat. Übung und Gewohnheit. |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
Delphi-Quellcode:
type
TDoubleArr = Array of Double; function SolveQuadraticEquation( A, B, C: Double ): TDoubleArr; var d: Double; // diskriminante (das was unter SQRT steht) begin // ax² + bx + c = 0 if A = 0 then Exit; B := B / A; C := C / A; // Diskriminante berechnen d := SQR(B/2) - C; if d > 0 then begin // zwei Lösungen SetLength( Result, 2 ); Result[0] := -B/2 + SQRT( d ); Result[1] := -B/2 - SQRT( d ); end else if d = 0 then begin // eine Lösung SetLength( Result, 1 ); Result[0] := -B/2; end; // else -> keine Reelle Lösung end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz