AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi [Tutorial] Quadratische Gleichungen vollständig lösen
Thema durchsuchen
Ansicht
Themen-Optionen

[Tutorial] Quadratische Gleichungen vollständig lösen

Ein Thema von Wolfgang Mix · begonnen am 24. Jul 2009 · letzter Beitrag vom 10. Apr 2010
Antwort Antwort
Seite 2 von 9     12 34     Letzte »    
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Quadratische Gleichungen vollständig lösen

  Alt 24. Jul 2009, 18:29
Zitat von stoxx:
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
Das war auch mein erster Gedanke. Eine saubere Funktion wird hier benötigt:
function SolvePolynom2ndOrder(a,b,c: extended; var x1,x2:extended):Integer; Über die Namen der Ein- und Ausgabeparameter kann natürlich verhandelt werden.
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.
fork me on Github
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#12

Re: Quadratische Gleichungen vollständig lösen

  Alt 24. Jul 2009, 18:48
Zitat von fwsp:
Ich würde behaupten die 0 lässt sich doch darstellen?
Das schon, aber erstens kann Float Format bei sehr kleinen Zahlen fehlerhafte ergebnisse bringen weshalb beim Größenvergleich besser mit einem Grenzwert Epsilon verglichen wird.

Das zweite problem ergibt sich hier wegen p = b/a

Wenn dann der Koeffizient a = 0 ist gibt es eine Exception EDividebyZero.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#13

Re: Quadratische Gleichungen vollständig lösen

  Alt 24. Jul 2009, 19:00
@ Aphton
Zitat:
Wenn wir schon dabei sind
na so ist das doch schon viel schöner
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Quadratische Gleichungen vollständig lösen

  Alt 24. Jul 2009, 19:21
@ Aphton schrieb:

// else -> keine Reelle Lösung

Gib hier bitte 'mal die beiden komplexen Lösungen zurück

mfg

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#15

Re: Quadratische Gleichungen vollständig lösen

  Alt 24. Jul 2009, 23:42
Zitat von Aphton:
Wenn wir schon dabei sind

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.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Quadratische Gleichungen vollständig lösen

  Alt 25. Jul 2009, 12:28
Zitat von gammatester:
Das ist keine saubere Lösung. Es wird zB nicht zurückgeliefert, wieviele Lösungen da sind.
Du kannst mit Length die Anzahl der Lösungen bestimmen:
Delphi-Quellcode:
  X := SolveQuadraticEquation( 1.0, 2.0, 1.0 );
  ShowMessage( 'Anzahl der Lösungen: ' + IntToStr( Length(X) ) );
Natürlich kann man da noch einen eigenen Typen (wie folgt) definieren
Delphi-Quellcode:
  TQuadraticEquationResults = record
    ResultCount: Byte;
    Results: TDoubleArr;
  end;
Aber um ehrlich zu sein, ist das - für meinen Geschmack - nicht unbedingt erforderlich.

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#17

Re: Quadratische Gleichungen vollständig lösen

  Alt 25. Jul 2009, 13:36
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)
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Quadratische Gleichungen vollständig lösen

  Alt 26. Jul 2009, 17:53
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;
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#19

Re: Quadratische Gleichungen vollständig lösen

  Alt 26. Jul 2009, 19:20
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
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#20

Re: Quadratische Gleichungen vollständig lösen

  Alt 26. Jul 2009, 19:34
Noch eine Anmerkung:

Bei elektrotechnischen Fragestellungen im Wechselstromkreis sind die meisten Lösungen komplexe!

mfg

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 9     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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