Delphi Zahlenvergleich

HoLLoWManN

Grünschnabel
Code:
unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Zahl1Edit: TEdit;
    Zahl2Edit: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    ErgebnisPanel: TPanel;
    Zahl3Edit: TEdit;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var       Zahl1,Zahl2,Zahl3,m : Real;
begin
     Zahl1:=StrToFloat(Zahl1Edit.Text);
     Zahl2:=StrToFloat(Zahl2Edit.Text);
     Zahl3:=StrToFloat(Zahl3Edit.Text);
     if Zahl1=Zahl2
        then m:=Zahl1;
        if m=Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 = Zahl3 '
        else if m<Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 < Zahl3 '
        else ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 > Zahl3 ';
     if Zahl1<Zahl2
        then m:=Zahl2;
        if m=Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 < Zahl 2 = Zahl3 '
        else if m<Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 < Zahl 2 < Zahl3 '
        else ErgebnisPanel.Caption:=' Zahl 1 < Zahl 2 > Zahl3 ';
     if Zahl1>Zahl2
        then m:=Zahl2;
        if m=Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 > Zahl 2 = Zahl3 '
        else if m<Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 > Zahl 2 < Zahl3 '
        else ErgebnisPanel.Caption:=' Zahl 1 > Zahl 2 > Zahl3 ';

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     close
end;

end.

Es wird angezeigt Variable m might not be initialized

es startet trotzdem vergleicht aber immer nur die 2. und 3. Zahl, ich hab ka voran das liegen soll, in der Schule hats genauso mit Delphi 5 noch geklappt bei mir zuhause mit Delphi 7 nicht mehr.
 
Hi

m might not be initialized

meint: Es könnte sein, dass m verwendet wird, bevor m initialisiert wurde,

Aufgrund der vielen if - Verzweigungen kann der Compiler nicht feststellen, ob m vor der ersten Belegung initialisiert wurde.
Du könnstest diese Warnung (kein Fehler) umgehen, indem du m vor den Verzweigungen bspw. mit 0 initialisierst. Das ist aber unerheblich.

Dein Problem ist aber wohl, dass Du die einzelnen if-Verzweigungen zwar verschachtelt eingerückt hast, sie aber anders ausgeführt werden, weil du begin ... end vergessen hast.

Code:
 if Zahl1=Zahl2
        then m:=Zahl1;
        if m=Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 = Zahl3 '
        else if m<Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 < Zahl3 '
        else ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 > Zahl3 ';

ist nämlich das gleiche wie

if Zahl1=Zahl2 then m:=Zahl1;
if m=Zahl3 hen ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 = Zahl3 '
  else 
    if m<Zahl3 then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 < Zahl3 '
    else ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 > Zahl3 ';

Du meinst aber sicher:
if Zahl1=Zahl2 then
begin  
    m:=Zahl1;
    if m=Zahl3
    then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 = Zahl3 '
     else if m<Zahl3
        then ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 < Zahl3 '
        else ErgebnisPanel.Caption:=' Zahl 1 = Zahl 2 > Zahl3 ';
end;

etc.
 vop
 
Zurück