Autor Beitrag
Seminex
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 12.12.10 21:12 
Hey Leute,
ich arbeite nicht sehr lange mit Delphi 5 und habe auch kaum Erfahrung mit ähnlichem und kenne keine Fachwörter ,also dieses bitte in der Antwort berücksichtigen!
Am besten direkt in meinem Text verbessern und eine kurze Erklärung warum dieses gemacht wird!
So eine kurze Erklärung was ich gemacht habe:
Ich will eine quadratische Gleichung mit der Pq-Formel lösen. Also in 2 verschiedenen Editfenstern wird einmal p und das andere Mal q angegeben. Dann soll es erkennen ob die Gleichung lösbar ist oder nicht und das kommt ja auf die Wurzel an! Sprich, wenn der Wurzelinhalt >0 ist, gibt es 2 Möglichkeiten, bei =0 gibt es nur eine Möglichkeit und wenn der Inhalt <0 ist, dann gibt es keine Lösung und das soll er auch angeben! Deswegen habe ich 3 Labelfenster ,in dem einem wird x1 angegeben, in dem anderen x2 und in dem 3. ,falls der Inhalt der Wurzel <0 ist, "nicht lösbar" steht! Nur leider funktioniert es nicht so wie ich es mir gedacht habe, deswegen such ich euch nun um Rat auf und hoffe auf schnelle Hilfe!

ausblenden 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:
var
  Form1: TForm1;
  p,q,a,b,c:real;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.caption:=' ';
label2.caption:=' ';
p:=strtofloat(edit1.text) ;
q:=strtofloat(edit2.text)  ;
a:=(p/2)*(p/2)+q            ;
if (a>0then  b:=0-(p/2)*(p/2)+sqrt((p/2)*(p/2)-q);
if (a>0then  c:=0-(p/2)*(p/2)-sqrt((p/2)*(p/2)-q);
if (a=0then  b:=0-(p/2)*(p/2);

if (a=0then c:=0-(p/2)*(p/2);
if (a<0then label3.caption:='nicht lösbar';
if (a>=0then label1.caption:=floattostr(b);
if (a>=0then label2.caption:=floattostr(c);


end;

end.


Moderiert von user profile iconGausi: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.12.10 21:32 
Na, wie lautet denn die PQ-Formel? ;-)
user profile iconSeminex hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
a:=(p/2)*(p/2)+q            ;					


Und noch ein Tipp: Wenn du den Wert unter der Wurzel ohnehin bereits ausgerechnet hast, dann kannst du diese Variable doch auch bei der weiteren Berechnung dort einsetzen. ;-)
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: So 12.12.10 21:33 
Du hast ne Falsche Formel!

Versuche es mal so:
ausblenden 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:
procedure TForm1.Button1Click(Sender: TObject);
var
  p,q,a,b,c:real;
begin
  label1.caption:='';
  label2.caption:='';
  p:=strtofloat(edit1.text);
  q:=strtofloat(edit2.text);

  a:=sqr(p/2)-q;      // direkt mit sqr die Potenz rechnen

  if a>0 then
  begin
    b:=0-(p/2)*(p/2)+sqrt((p/2)*(p/2)+q);
    c:=0-(p/2)*(p/2)-sqrt((p/2)*(p/2)+q);
    label1.caption:=floattostr(b);
    label2.caption:=floattostr(c);
  end
  else if a=0 then
  begin
    b:=0-(p/2)*(p/2);
    c:=0-(p/2)*(p/2);
    label1.caption:=floattostr(b);
    label2.caption:=floattostr(c);
  end
  else
  begin
    label3.caption:='nicht lösbar';
  end;
end;


Lg

Edit : Falsche Mathe Kenntnisse ins Spiel gebracht :D


Zuletzt bearbeitet von HenryHux am So 12.12.10 21:39, insgesamt 2-mal bearbeitet

Für diesen Beitrag haben gedankt: Seminex
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.12.10 21:35 
Na, fast, du hast falsch herum korrigiert. ;-)
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Versuche es mal so:
ausblenden Delphi-Quelltext
1:
  a:=sqr(p/2)+q;      // direkt mit sqr die Potenz rechnen					
Richtig ist es mit Minus.
Seminex Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 12.12.10 22:01 
Danke ;) Kein Wunder, dass es nicht funktionierte^^
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 618
Erhaltene Danke: 368

W7
Delphi 6 pro
BeitragVerfasst: Mo 13.12.10 12:19 
Mit Mathe Kenntnissen (komplexe Zahlen) läßt sich das Problem vollständig lösen.
Der Radikand kann darf auch negativ sein. :wink:

ausblenden volle Höhe 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:
41:
42:
43:
44:
 procedure TPQ.RechneClick(Sender: TObject);
  var a,b,c,p,q,Radikand,x1,x2:Extended;
      Fehler:Integer;
  begin
   val(Edita.Text,a,Fehler);
   if Fehler>0 then
    begin
     MessageDlg('Fehler in der ersten Zahl an Position '+IntToStr(Fehler)+'!!!',mtError,[mbRetry],0);
     exit;
    end;
   val(Editb.Text,b,Fehler);
   if Fehler>0 then
    begin
     MessageDlg('Fehler in der zweiten Zahl an Position '+IntToStr(Fehler)+'!!!',mtError,[mbRetry],0);
     exit;
    end;
   val(Editc.Text,c,Fehler);
   if Fehler>0 then
    begin
     MessageDlg('Fehler in der dritten Zahl an Position '+IntToStr(Fehler)+'!!!',mtError,[mbRetry],0);
     exit;
    end;
   if a=0 then
    begin
     MessageDlg('keine quadratische Gleichung!',mtError,[mbRetry],0);
     exit;
    end;
   p:=b/a;q:=c/a;
   Radikand:=sqr(p)/4-q;
   if Radikand<0 then
    begin
     MessageDlg('negativer Radikand!',mtError,[mbOk],0);
     MessageDlg('Es gibt zwei komplexe Lösungen!',mtInformation,[mbOk],0);
     EditX1.Text:=FloatToStr(-p/2)+'+'+FloatToStr(sqrt(-Radikand))+'i';
     EditX2.Text:=FloatToStr(-p/2)+'-'+FloatToStr(sqrt(-Radikand))+'i';
    end
   else
    begin
     x1:=-p/2+sqrt(Radikand);
     x2:=-p/2-sqrt(Radikand);
     EditX1.Text:=FloatToStr(x1);
     EditX2.Text:=FloatToStr(x2);
    end
  end;

Mehr Infos hier de.wikipedia.org/wiki/Komplexe_Zahl
Gruß
Fiete

_________________
Fietes Gesetz: use your brain (THINK)