![]() |
pq-Formel berechnen
Hallo,
folgendes Problem... Ich habe einen pq-Formel (jedem der die Schule absolviert hat ein Begriff) Berechner geschrieben um ein bisschen zu üben. Es kommt zwar nur selten zu einem Absturz, aber es kommt zu dem Problem, dass falsche Ergebnisse ausgegeben werden. Kann mal jemand drüber gucken und mir den Fehler mitteilen?
Delphi-Quellcode:
Wäre super wenn es irgendwann mal klappen würde :wink:
begin
a := strtoint(Edit1.Text); b := strtoint(Edit2.Text); c := strtoint(Edit3.Text); d := (-a/2); j := (b/2); i := exp(2*ln(j)); e := (i-c); if e = 0 then begin Label1.Caption := ('x1= ') + floattostr(a); Label2.Caption := ('x2= ') + floattostr(a); end; if e > 0 then begin f := exp(0.5*ln(e)); g := d + f; h := d - f; Label1.Caption := ('x1= ') + floattostr(g); Label2.Caption := ('x2= ') + floattostr(h); end; if e <0 then begin showmessage('Aus einer negativen Zahl kann keine Wurzel gezogen werden') end; end; procedure TForm1.Edit1Change(Sender: TObject); begin Edit2.Text := Edit1.Text; end; MfG Thomas |
Re: pq-Formel berechnen
Hallo Plague,
ich kann dir leider nicht sagen, wo genau der Fehler in deinem Quelltext steckt. Mir ist aber auch nicht ganz klar, nach welcher Formel genau du rechnest. Da du mit a,b und c rechnest sollte die Formel eigentlich x=-b/(2a)+-sqrt((b*b-4*a*c)/(4*a*a)) sein. Entschuldige das häßliche Layout dieser Formel, aber es geht gerade nicht besser. Mit sqrt ist Wurzel gemeint. Ich kann dir allerdings einige Tipps geben: Um das Quadrat von a und b auszurechnen, benutze besser die Multiplikation also a*a oder die Funktion sqr(a), beides gibt das Quadrat von a aus. Zum ziehen der Wurzel kannst du die Funktion sqrt(a) nehmen, das gibt die Wurzel von a aus. Desweiteren würde ich dir empfehlen, nicht soviele Variablen einzuführen. Schließlich brauchst du sie nicht alle. Du kannst die Rechnungen ineinanderschachteln. Das spart Speicher und Zeit. Zuletzt noch ein Hinweis: Wenn du wirklich die Quadratische Gleichung der Form ax²+bx+c=0 lösen willst, musst du vorher eine Fallunterscheidung machen, ob c=0 ist und dann noch ob gegebenenfalls b=0. Das Programm soll ja schließlich universell funktionieren, egal was der Benutzer eingibt. So hab ich es gemacht, und das funktioniert:
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d: Real; begin a := strtoint(Edit1.Text); b := strtoint(Edit2.Text); c := strtoint(Edit3.Text); if a<>0 then begin d :=(b*b-4*a*c)/(4*a*a); if d<0 then begin Label1.Caption:= 'Es gibt keine Lösung'; Label2.Caption:= 'Es gibt keine Lösung'; end else if d=0 then begin Label1.Caption := 'x= ' + floattostr(-b/(2*a)); Label2.Caption := 'Keine weitere Lösung'; end else if d>0 then begin Label1.Caption := 'x1= ' + floattostr(-b/(2*a)+Sqrt(d)); Label2.Caption := 'x2= ' + floattostr(-b/(2*a)-Sqrt(d)); end; end else begin if b<>0 then begin Label1.Caption:= 'x= ' + floattostr(-c/b); Label2.Caption := 'Keine weitere Lösung'; end else begin if c<>0 then begin Label1.Caption:= 'Es gibt keine Lösung'; Label2.Caption:= 'Es gibt keine Lösung'; end else begin Label1.Caption:= 'Jede Zahl ist Lösung'; Label2.Caption:= ''; end; end; end; end; Seniman |
Re: pq-Formel berechnen
Hallo!
@Plague: Um nochmal ein bisschen was zu Deiner Lösung zu sagen: (1) das "p" in der pq-Formel müsste in Deiner Formel so etwas wie b/a sein. Dies wird jedoch nicht berechnet, bei Dir ist "p", wenn ich das richtig sehe, einfach nur a/2, was ja falsch ist. (2) in der Wurzel steht ja (p/2)^2 - q. Normalerweise. Bei Dir steht aber (b/2)^2 - c. Das macht auch wenig Sinn. Denn Du arbeitest (in Hinblick auf (1)) mit zwei verschiedenen p. ==> Du hast die pq-Formel nicht richtig angewendet (und das bei jemandem, dem sie ein Begriff ist :mrgreen: )! Die pq-Formel wendet man an, wenn vor dem x² nur eine 1 steht, bei Dir steht noch ein a dort. Da muss noch umgeformt werden. MfG Peter //edit: ach ja, wenn b<0 ist, dann wird der ln in der sechsten Zeile wohl 'nen Fehler produzieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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-2025 by Thomas Breitkreuz