hey leute,
wir sollen in der Berufsschule ein "LottoProgramm" schreiben.
Ich bin in der Stunde nicht fertig geworden und hab es Zuhause neu geschrieben. Später habe ich meinen Lehrer gefragt wieso mein Programm "hängt" (mir war klar das es an den Endlosschleife hing, allerdings hab ich die den logichen fehler nicht gefunden). Anschließend hab ich Algorithmus neu geschrieben. natürlich anders
und nun Funktioniert das Programm ohne Probleme. Ich weiß nicht wieso weil es eigentlich beim ersten durchlaufen der schleife eine endlosschleife ergeben müsste.
Delphi-Quellcode:
procedure TForm1.BtnGroClick(Sender: TObject);
var
x,a,i,zahl:Integer;
begin
x:=0;
a:=0;
zahl:=0;
while x<=5 do
begin
If Feld[a]>=10 then
zahl:=zahl+1;
a:=a+1;
x:=x+1
end;
Label1.Caption:=inttostr(zahl);
end;
Das Array "Feld" beinhaltet die ersten 6 Zahlen die die Funktion random ausgibt (sie legen zwischen 0 und 48). Die erste Zahl war immer eine 6. Somit würde ja die IF Bedingung nicht erfüllt und er durchläuft die schleife erneut mit der ersten Zahl in dem Array (welche ja 6 wäre). Somit wäre ja wieder eine endlosschleife entstanden. Allerdings funktioniert das programm so einmandfrei
ALso dachte ich mir (bevor ich das Programm geteste habe), das doch ein ELSE noch benötigt wird fals die bedingung nicht erfüllt ist (Schließlich will ich alle 6 Werte die im Array stehen vergleichen) Also hab ich ein else geschrieben.
Delphi-Quellcode:
procedure TForm1.BtnGroClick(Sender: TObject);
var
x,a,i,zahl:Integer;
begin
x:=0;
a:=0;
zahl:=0;
while x<=5 do
begin
If Feld[a]>=10 then
zahl:=zahl+1;
a:=a+1;
x:=x+1;
else
x:=x+1;
end;
Label1.Caption:=inttostr(zahl);
end;
So hat er es mir erst garnicht von der Syntax her angenommen, also habe ich es mit begin und end versucht, ohne erfolg. Nun hatte ich das Programm so ausgeführt und es hatte funktioniert ohne Endlosschleife.
Kann mir jemand erklären wo nun genau mein Denkfehler ist?
Danke schonmal.
LG JumpFrog
Delphi-Quellcode:
procedure TForm1.BtnerzClick(Sender: TObject);
var
i,a,c,LoZahl:Integer;
begin
a:=0;
i:=0;
c:=0;
while i<=5 do // Schleifenbegin für 6 Ziehungen
begin
LoZahl:=random(48)+1;
Feld[a]:=LoZahl;
while c<=5 do
begin
while Feld[a]= LoZahl do
LoZahl:=random(48)+1;
c:=c+1;
end;
a:=a+1;
i:=i+1;
end;
end;
(Hier noch die procedure die die Zahlen erstellt)