Autor Beitrag
Nac-Hac
Hält's aus hier
Beiträge: 11

WIN XP Home
D6
BeitragVerfasst: Do 02.12.04 16:37 
Anbei mein Code für ne quadratische Gleichung. D.h. es werden 3 Koeffizienten (a,b,c) eingegeben und er gibt die Lösungen aus. Dazu soll noch ein Kommentar stehen (keine Lösung usw.)
Nur funzt das Proggi net.
Was hab ich falsch gemacht?

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:
procedure TFrmQuadr.BitBtn1Click(Sender: TObject);
var a, b, c, d :real;
    kommentar  :string;
begin
  a:=StrToFloat (edit1.Text);
  b:=StrToFloat (edit2.Text);
  c:=StrToFloat (edit3.Text);
  d:=(b*b)-(4*a*c);
  Panel3.caption:=kommentar;

if a=0
then begin;
       Panel1.caption:='---';
       Panel2.caption:='---';
       kommentar:='Keine Lösung';
     end
     else begin;
                                 if d<0
                                 then begin;
                                        Panel1.caption:='---';
                                        Panel2.caption:='---';
                                        kommentar:='Keine Lösung';
                                      end
                                      else begin;
                                                                  if d=0
                                                                  then begin;
                                                                         Panel1.caption:=(-b)/(2*a);
                                                                         Panel2.caption:='---';
                                                                         kommentar:='Eine Lösung';
                                                                       end
                                                                       else begin;
                                                                              Panel1.caption:=(-b+sqr(d))/(2*a);
                                                                              Panel2.caption:=(-b-sqr(d))/(2*a);
                                                                              kommentar:='Zwei Lösungen';
                                                                            end;
                                           end;
          end;
     end;

end.


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Fr 03.12.2004 um 09:36
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 02.12.04 16:56 
:welcome:

Wär nett, wenn du vielleicht etwas genauer erläutern könntest, was nicht funktioniert.

//EDIT: Panel3.Caption := Kommentar muss nach den ifs stehen!!!

AXMD
greg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119

Windows2000, WindowsXP
D5 Prof
BeitragVerfasst: Do 02.12.04 17:01 
Hallo Nac-Hac,

ich schreib Dir mal ein paar Kommentare rein ...

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:
procedure TFrmQuadr.BitBtn1Click(Sender: TObject);
var a, b, c, d :real;
    kommentar  :string;
begin
  a:=StrToFloat (edit1.Text);
  b:=StrToFloat (edit2.Text);
  c:=StrToFloat (edit3.Text);
  d:=(b*b)-(4*a*c);
  Panel3.caption:=kommentar;     // Wozu soll das gut sein?
  if a=0 then                    // Die if .. then .. else .. schön strukturieren, damit Du auch
  begin                          // den Überblick behälst. Die überflüssigen Semikola hab ich mal
    Panel1.caption:='---';       // rausgeschmissen ... Nachtrag: und dabei doch glatt noch ein Semikolon übersehen
    Panel2.caption:='---';
    kommentar:='Keine Lösung';
  end else
  begin
    if d<0 then
    begin
      Panel1.caption:='---';
      Panel2.caption:='---';
      kommentar:='Keine Lösung';
    end else
    begin
      if d=0 then
      begin
        Panel1.caption:=FloatToStr((-b)/(2*a));   // Oben hast Du FloatToStr verwendet. Hier hat
        Panel2.caption:='---';                    // der Compiler Dir eigentlich schon verraten, was
        kommentar:='Eine Lösung';                 // falsch war
      end else
      begin
        Panel1.caption:=FloatToStr((-b+sqr(d))/(2*a));
        Panel2.caption:=FloatToStr((-b-sqr(d))/(2*a));
        kommentar:='Zwei Lösungen';
      end;
    end;
  end;
end;

end.


Und dann schau Dir nochmal die Bedingungen an, wie Du Sie verschachtelt hast und überleg Dir für welche Werte, die Abfragen wie abgearbeitet werden.

Gruß
Gregor
Nac-Hac Threadstarter
Hält's aus hier
Beiträge: 11

WIN XP Home
D6
BeitragVerfasst: Do 02.12.04 17:33 
Erst mal danke für eure schnelle Antwort...

also das 1. was nicht funktioniert hat, waren die panels, da hat er immer gemeldet :
Zitat:
Incompatible types: 'String' and 'Extended'

das habe ich mit Hilfe von greg's kommentaren gelöst (hat einfach FloatToStr gefehlt)
Ich kann das Programm jetzt wenigstens starten, auch wenn er mir die beiden Lösungen nicht korrekt berechnet (die Formeln müssten aber stimmen :? )
@greg: ich habe es doch übersichtlich strukturiert!

Nun gibts noch das Riesenproblem mit den Kommentaren
d.h. Wenn es nur eine Lösung gibt (was vorkommen kann wenn die Diskriminante (d)= 0 ist) soll im Panel3 stehen: Eine Lösung

Zitat:
Panel3.Caption := Kommentar muss nach den ifs stehen!!!

wenn ich das unten hinschreibe, sagt er dass es Panel3 nicht gibt :???:

Hier meine überarbeitete Version (die Kommentare mal rausgenommen; wär echt nett wenn das jmd. wüsste)

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:
procedure TFrmQuadr.BitBtn1Click(Sender: TObject);
var a, b, c, d :real;
    kommentar  :string;
begin
  a:=StrToFloat (edit1.Text);
  b:=StrToFloat (edit2.Text);
  c:=StrToFloat (edit3.Text);
  d:=(b*b)-(4*a*c);


if a=0
then begin;
       Panel1.caption:='---';
       Panel2.caption:='---';
       kommentar:='Keine Lösung';
     end
     else begin;
                                 if d<0
                                 then begin;
                                        Panel1.caption:='---';
                                        Panel2.caption:='---';
                                        kommentar:='Keine Lösung';
                                      end
                                      else begin;
                                                                  if d=0
                                                                  then begin;
                                                                         Panel1.caption:=FloatToStr((-b)/(2*a));
                                                                         Panel2.caption:='---';
                                                                         kommentar:='Eine Lösung';
                                                                       end
                                                                       else begin;
                                                                              Panel1.caption:=FloatToStr((-b+sqr(d))/(2*a));
                                                                              Panel2.caption:=FLoatToStr((-b-sqr(d))/(2*a));
                                                                              kommentar:='Zwei Lösungen';
                                                                            end;
                                           end;
          end;
     end;
end.
Nac-Hac Threadstarter
Hält's aus hier
Beiträge: 11

WIN XP Home
D6
BeitragVerfasst: Do 02.12.04 20:03 
k habs jetzt
das mit dem panel3.caption:=kommentar war gar nicht notwendig :oops:

einfach panel3.caption:='blabla' usw.
Kroni
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 720

Win 98, Win ME, Win2k, Win XP
D3 Pro
BeitragVerfasst: Do 02.12.04 20:16 
ausblenden Delphi-Quelltext
1:
2:
Panel1.caption:=FloatToStr((-b+sqr(d))/(2*a));
        Panel2.caption:=FloatToStr((-b-sqr(d))/(2*a));

also irgendwie fehlt mir da vor dem +sqr(d))/(2*a) ein sqrt....genauso bei dem -sqr.....
da müsste man doch noch + Wurzel aus irgendwas - Wurzel aus irgendwas oder??ß
Rechne das nochmal nach bitte
Nac-Hac Threadstarter
Hält's aus hier
Beiträge: 11

WIN XP Home
D6
BeitragVerfasst: Do 02.12.04 20:27 
ach ist sqrt die bez. für wurzel?

das könnte der fehler sein, warum ein falsches ergebnis rauskommt

//EDIT Ja das war die Lösung :wink: thx user defined image
Kroni
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 720

Win 98, Win ME, Win2k, Win XP
D3 Pro
BeitragVerfasst: Do 02.12.04 21:18 
Bitte sehr...ja, sqrt ist die Wurzel und sqr, wie du schon richtig eingegeben hast, ist ja das Quadrat nur die Wurzel fehlte ja eben
Ein hoch auf die Mathematik und die PQ Formel^^

EDIT:
Also ich würde da mal den Vorschlag machen, dass wenn a=0 ist, du ne Meldung ausgibst, dass es sich um keine quadratsiche Gleichung handelt, sonder du damit eien Lineare Gleichung der Form 0=bx+c errechnen kannst;-)
Nac-Hac Threadstarter
Hält's aus hier
Beiträge: 11

WIN XP Home
D6
BeitragVerfasst: Do 02.12.04 21:59 
hehe, ne für meine zwecke reicht das locker aus ^^