Re: Quadratische Gleichungen vollständig lösen
Zitat:
Delphi-Quellcode:
Über die Namen der Ein- und Ausgabeparameter kann natürlich verhandelt werden.
function SolvePolynom2ndOrder(a,b,c: extended; var x1,x2:extended):Integer;
Die Funktion selbst liefert 0=keine Lösung, 1=Doppelte Nullstelle, 2=x1 und x2 enthalten die Nullstellen. Und ich bin mit Englisch schon sehr verseucht; man darf auch deutsche Funktionsnamen (NullstellenQuadGleichung()) verwenden. |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
Das zweite problem ergibt sich hier wegen p = b/a Wenn dann der Koeffizient a = 0 ist gibt es eine Exception EDividebyZero. |
Re: Quadratische Gleichungen vollständig lösen
@ Aphton
Zitat:
|
Re: Quadratische Gleichungen vollständig lösen
@ Aphton schrieb:
// else -> keine Reelle Lösung Gib hier bitte 'mal die beiden komplexen Lösungen zurück mfg Wolfgang |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
Das ist keine saubere Lösung. Es wird zB nicht zurückgeliefert, wieviele Lösungen da sind. mit x := SolveQuadraticEquation(1.0,2.0,1.0); ist x[1] unbelegt (und da man das nicht mitgeteilt kriegt, kracht's oder es wird mit unsinngen Werte weiter gerechnet). Es ist verständlich, wenn Du den komplexen Fall nicht betrachten willst. Allerdings ist doch der lineare Fall A=0 leicht zu behandeln und sollte nicht durch ein schödes "if A=0 then exit" abqualifiziert werden. Was in allen Beiträgen so gut wie überhaupt nicht behandelt wird, sind die Rundungsfehler-, Überlauf-, Unterlaufprobleme. Diese sind so alt wie das Programmieren und eigentlich schon seit 40 Jahren im Rahmen des möglichen gelöst. |
Re: Quadratische Gleichungen vollständig lösen
Zitat:
Delphi-Quellcode:
Natürlich kann man da noch einen eigenen Typen (wie folgt) definieren
X := SolveQuadraticEquation( 1.0, 2.0, 1.0 );
ShowMessage( 'Anzahl der Lösungen: ' + IntToStr( Length(X) ) );
Delphi-Quellcode:
Aber um ehrlich zu sein, ist das - für meinen Geschmack - nicht unbedingt erforderlich.
TQuadraticEquationResults = record
ResultCount: Byte; Results: TDoubleArr; end; MfG |
Re: Quadratische Gleichungen vollständig lösen
Wenn man ins komplexe geht, kann man sich das mit der Anzahl sparen, da hat die Gleichung immer genau 2 Lösungen :) (Berührpunkt ist eine doppelte Lösung)
|
Re: Quadratische Gleichungen vollständig lösen
Ich hoffe, die meisten von Euch können jetzt mit dieser Variante leben:
Delphi-Quellcode:
type
TSolution = Array of String; function pq( A, B, C : Double ): TSolution; var Radikand, re, im: Double; begin // ax² + bx + c = 0 if A = 0 then exit; B := B / A; //p C := C / A; //q // Radikand berechnen Radikand := sqr(B/2) - C; //Realteil berechnen re:=-B/2; //Imaginärteil berechnen im:=sqrt(abs(Radikand)); if Radikand > 0 then begin // zwei Lösungen SetLength( Result, 2 ); Result[0] := FloatToStr(-B/2 + sqrt( Radikand )); Result[1] := FloatToStr(-B/2 - sqrt( Radikand )); end else if abs(Radikand) < 1e-6 then begin // eine Lösung SetLength( Result, 1 ); Result[0] := FloatToStr(-B/2); end else if Radikand < 0 then begin ///Radikand:=-Radikand; SetLength( Result, 2 ); Result[0] := FloatToStr(re) + ' + ' + FloatToStr(im) + ' i '; Result[1] := FloatToStr(re) + ' - ' + FloatToStr(im) + ' i '; end; end; procedure TForm1.Button1Click(Sender: TObject); var a,b,c: double; begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); if (a=0) or (b=0) or (c=0) then begin //Werte der Funktion gar nicht erst übergeben showmessage ('Keine reine quadratische Gleichung!'); sleep(2000); exit; end else begin Edit4.Text:=pq(a,b,c)[0]; Edit5.Text:=pq(a,b,c)[1]; end; end; |
Re: Quadratische Gleichungen vollständig lösen
Hmmm ... also wenn ich ehrlich bin: Ich denke nicht, dass das lösen einer Quadratischen Gleichung eine derart große Sache ist, die unbedingt in die CodeLib rein muss ...
ich meine: Wenn ich das mal brauche, guck ich in die Wikipedia und hol mir die Lösungsformel und fertig. Danbn kann ich die unterscheidlichen Fälle (reell/imaginär) auch passend behandeln. Es kann ja sein, dass nur reelle Lösungen Sinn machen. Oder dass es auf den rellen Teil der komplexen Lösung ankommt. Also nichts für ungut, aber ich wollte nur mal einwerfen, dass sowas nicht undingt rein muss :stupid: |
Re: Quadratische Gleichungen vollständig lösen
Noch eine Anmerkung:
Bei elektrotechnischen Fragestellungen im Wechselstromkreis sind die meisten Lösungen komplexe! mfg Wolfgang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz