Maximum bestimmen!

03/26/2014 19:26 Jadensan#1
Hey Leute,

ich bin noch ganz am Anfang(Delphi 7)!
Aber besser früher als nie:)

Ich habe ein Problem und hoffe ihr könnt mir bei der einfachen Aufgabe behilflich sein!
Es geht um Delphi 7 und ich habe jetzt aus eigener Interesse so ein Programm erstellt der das Maximum aus 3 Zahlen berechnet jedoch spuckt er mir nicht das Maximum aus sondern gar nicht :/

Code:
unit Aufgabe1II2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Panel1: TPanel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
var a,b,c,max:single;
procedure TForm1.ButtonClick(Sender:Object);

begin
 with Form1 do
 begin
 val(Edit1.Text,a,code);
 val(Edit2.Text,b,code);
 val(Edit3.Text,c,code);
 end;

procedure max;
begin
if a> b then max:= a;
if c> max then max:= c;
Label1.Caption := max;
end;
end.
wie gesagt hoffe ihr hated mich nicht auch wenn es aus eurer Sicht zu einfach ist !

Ich danke im vorraus !
03/26/2014 19:28 alpines#2
Bist du sicher das du Singles zu einem ANSI-String (oder PChar? Bin nicht so fit in Delphi) einfach so assignen kannst?

Die Zeile
Code:
Label1.Caption := max;
müsste glaube ich
Code:
Label1.Caption := FloatToStr(max);
lauten.
03/26/2014 19:30 Jadensan#3
No, geht noch immer nicht :/
trzd danke!
03/26/2014 19:43 snow#4
Wenn ich das richtig sehe, rufst du nirgends die Prozedur auf.
Du überprüfst übrigens nicht, ob b die größte Zahl ist.
03/26/2014 19:56 Jadensan#5
Ok danke :DD das mit b hab ich auch grad gemerkt^^...
Wie rufe ich denn eine Prozedur auf ?
03/26/2014 19:58 alpines#6
Statt einer Prozedur würde ich eine Funktion bevorzugen, da kannst du was returnen lassen und direkt weiterverarbeiten. Wenn du von deiner Eingabe (a,b,c) etwas zurückerwartest (a, b oder c) dann nimm lieber Funktionen. Das Caption-setten sollte nicht in der Prozedur erfolgen.
03/26/2014 20:17 Jadensan#7
Habs nochmal etwas geändert...

Code:
procedure max;
var a,b,c,max:integer;
begin
 with Form1 do

 begin
   if a > b then max := a;
   if b> max then max:= b;
   if c> max then max:= c;
   val(Edit1.Text,a,code);
   val(Edit2.Text,b,code);
   val(Edit3.Text,c,code);
end;
Label1.Caption := FloatToStr(max);
end;
end.
...mit function zeigt der haufenweise Fehler an :0

Bei mir zeigt der bei max := a nen Fehler an :/
03/26/2014 20:19 alpines#8
Vielleicht wegen deiner If-Abfrage?
Delphi bitcht häufig wegen kleinstem Scheiß rum wobei andere Sprachen richtig tolerant sind.
Versuch mal
Code:
If (a>b) then max := a;
statt dem ursprünglichen.
03/26/2014 20:27 Jadensan#9
Quote:
Originally Posted by alpines View Post
Vielleicht wegen deiner If-Abfrage?
Delphi bitcht häufig wegen kleinstem Scheiß rum wobei andere Sprachen richtig tolerant sind.
Versuch mal
Code:
If (a>b) then max := a;
statt dem ursprünglichen.
haha:D
jetzt zeigt der mir bei

Code:
val(Edit1.Text,a,code);
den Fehler an um genau zu sein für code...

Wenn ich das jetzt raus schneide zeigt der mir bei

Code:
Label1.Caption := FloatToStr(max)
den Fehler an :confused:
03/26/2014 21:33 alpines#10
Sicherlich zeigt der dafür einen Fehler an wenn keine Variable code definiert ist, was soll val() überhaupt machen?

Und der Grund warum der beim letzten einen Fehler anzeigt ist, weil du ein Semikolon ; vergessen hast.
03/27/2014 05:44 Saedelaere*#11
val() ist das selbe wie StrToInt().

1) das "with Form1 do" kannst du weglassen, da Form1 (Self) in einer Klassenmethode automatisch impliziert wird
2) A, B, C und Max solltest du lokal deklarieren und nicht global
3) du kannst nicht einfach so eine procedure/function innerhalb des Codeteils einer anderen Funktion deklarieren. Das hat doch sicher schon zur compiletime Fehlermeldungen gehagelt? Pack die Funktion entweder in die private/evtl. public Section des Formulars oder in eine extra Unit/Klasse.

Optimal wäre sowas:
Code:
type
  TForm12 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    function Max(A1, A2: Integer): Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form12: TForm12;

implementation

{$R *.dfm}

procedure TForm12.Button1Click(Sender: TObject);
var
  A, B, C: Integer;
begin
  A := StrToInt(Edit1.Text);
  B := StrToInt(Edit2.Text);
  C := StrToInt(Edit3.Text);
  Label1.Caption := IntToStr(Max(Max(A, B), C));
end;

function TForm12.Max(A1, A2: Integer): Integer;
begin
  Result := A1;
  if (A2 > A1) then Result := A2;
end;
03/27/2014 20:31 Jadensan#12
Danke an alle das Problem ist jetzt gelöst :)!