![]() |
While schleife endlos? oder nicht?
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:
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 :?:
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; 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:
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.
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; Kann mir jemand erklären wo nun genau mein Denkfehler ist? Danke schonmal. LG JumpFrog
Delphi-Quellcode:
(Hier noch die procedure die die Zahlen erstellt)
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; |
Re: While schleife endlos? oder nicht?
Hallo JumpFrog,
ohne jetzt auf die Logik des Programms einzugehen, mir schein, dass Du Probleme mit der Formatierung des Quelltextes hast. Versuche Deine Anweisungen in Begin/End - Blöcke zu setzen. Bis bald Chemiker |
Re: While schleife endlos? oder nicht?
Zitat:
Delphi-Quellcode:
wie du siehst, bleiben beide Seiten der Bedingung gleich (also ungleich :) ), der index des arrays wird erst nach verlassen der while-schleife gesetzt.
while x<=5 do
begin If Feld[a]>=10 then zahl:=zahl+1; a:=a+1; x:=x+1 end; HTH Frank |
Re: While schleife endlos? oder nicht?
nihms mir nicht übel....
aber...
Delphi-Quellcode:
Wenn das die While schleife ist
while x<=5 do
begin If Feld[a]>=10 then zahl:=zahl+1; a:=a+1; x:=x+1 end; müsste hier
Delphi-Quellcode:
stehen damit es ausserhalb der schleife ist oder nicht?
while x<=5 do
begin If Feld[a]>=10 then zahl:=zahl+1; a:=a+1; end; x:=x+1; |
Re: While schleife endlos? oder nicht?
Hallo,
Da gebe ich Chemiker recht, ich habe mal hier eine Stück Code von dir kopiert, schau mal,
Delphi-Quellcode:
Wenn man den Code nimmt, wird im Fall von , das if nicht gleich ist, nur die Zeile zahl:= zahl+1 ausgelassen, die anderen Zeilen werden immer ausgeführt.
begin
If Feld[a]>=10 then zahl:=zahl+1; a:=a+1; x:=x+1; else Der Code sollte also lauten...
Delphi-Quellcode:
Bedenke bitte auch, das das 'end' vor dem else, nicht mit einem ';' abgeschlossen wird.
begin
If Feld[a]>=10 then begin zahl:=zahl+1; a:=a+1; x:=x+1 end else Gruß Jens |
Re: While schleife endlos? oder nicht?
Sorry,habe jetzt erst gesehen, was du vorhast. Wenn du die While-Schleife betrachtest, hast Du recht. Ich testen es mal.
Gruß Jens
Delphi-Quellcode:
[EDIT] Recht schon, aber der Fehler ist trotzallem durch die fehlenden Blöcke
begin
Delphi-Quellcode:
aufgetreten.
begin
... ... ... end [EDIT]
Delphi-Quellcode:
end.
|
Re: While schleife endlos? oder nicht?
ahhh jetzt das bedeutete das immer nur die erste Zeile nach dem If zu der IF bedingung gehört. versteh ich das richtig?
|
Re: While schleife endlos? oder nicht?
Hi!
Das hast du richtig erkannt! Ciao, Frederic |
Re: While schleife endlos? oder nicht?
Das mit der if-Abfrage siehst du richtig. Deshalb, setzt am besten immer begin und end, damit ist für jeden eindeutig, was zusammen gehören soll.
Gruß Jens |
Re: While schleife endlos? oder nicht?
wie schön das unser Lehrer das uns mal gesagt hat :)
Delphi-Quellcode:
So sieht mein Quelltext jetzt aus. Und wie sollte es anders sein es Funktioniert nicht. Mich wundert es schon das die erste Zahl von der funktion random nicht 6 sondern diesmal 1 ist. Jedenfalls ist die ausgabe 0 obwoll es Zahlen gibt über 10. Dabei habe ich nur das else angefügt :) . Von der Logik her müsste es ja stimmen. Weil sonst ja eine endlosschleife enstehen würde(ohne das ELSE).
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 begin zahl:=zahl+1; a:=a+1; x:=x+1; end else x:=x+1; end; Label1.Caption:=inttostr(zahl); end; Also wo is nun wieder mein Fehler... :wall: @Jens: Ja, habe ich gemacht allerdings mit else und es hat nicht funktioniert, also habe ich das alles wieder weggenommen :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz