AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

While schleife endlos? oder nicht?

Ein Thema von JumpFrog · begonnen am 5. Apr 2009 · letzter Beitrag vom 6. Apr 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
JumpFrog

Registriert seit: 15. Mär 2009
26 Beiträge
 
#1

While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 14:55
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)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:06
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#3

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:07
Zitat von JumpFrog:
Ich weiß nicht wieso weil es eigentlich beim ersten durchlaufen der schleife eine endlosschleife ergeben müsste.

Delphi-Quellcode:
...
while x<=5 do
begin
  If Feld[a]>=10 then
      zahl:=zahl+1;
      a:=a+1;
      x:=x+1
end;
...
deine Einrückung ist falsch wenn du sie richtig machst, wird der fehler klarer:

Delphi-Quellcode:
while x<=5 do
begin
  If Feld[a]>=10 then
      zahl:=zahl+1;
  a:=a+1;
  x:=x+1
end;
wie du siehst, bleiben beide Seiten der Bedingung gleich (also ungleich ), der index des arrays wird erst nach verlassen der while-schleife gesetzt.

HTH Frank
  Mit Zitat antworten Zitat
JumpFrog

Registriert seit: 15. Mär 2009
26 Beiträge
 
#4

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:11
nihms mir nicht übel....

aber...

Delphi-Quellcode:
while x<=5 do
begin
  If Feld[a]>=10 then
      zahl:=zahl+1;
  a:=a+1;
  x:=x+1
end;
Wenn das die While schleife ist

müsste hier
Delphi-Quellcode:
while x<=5 do
begin
  If Feld[a]>=10 then
      zahl:=zahl+1;
  a:=a+1;
end;
x:=x+1;
stehen damit es ausserhalb der schleife ist oder nicht?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:12
Hallo,

Da gebe ich Chemiker recht, ich habe mal hier eine Stück Code von dir kopiert, schau mal,

Delphi-Quellcode:
begin
  If Feld[a]>=10 then
      zahl:=zahl+1;
      a:=a+1;
      x:=x+1;
  else
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.

Der Code sollte also lauten...

Delphi-Quellcode:
begin
  If Feld[a]>=10 then
    begin
      zahl:=zahl+1;
      a:=a+1;
      x:=x+1
    end
  else
Bedenke bitte auch, das das 'end' vor dem else, nicht mit einem ';' abgeschlossen wird.


Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:14
Sorry,habe jetzt erst gesehen, was du vorhast. Wenn du die While-Schleife betrachtest, hast Du recht. Ich testen es mal.

Gruß Jens
begin [EDIT] Recht schon, aber der Fehler ist trotzallem durch die fehlenden Blöcke

Delphi-Quellcode:
begin
...
...
...
end
aufgetreten.
[EDIT] end.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
JumpFrog

Registriert seit: 15. Mär 2009
26 Beiträge
 
#7

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:15
ahhh jetzt das bedeutete das immer nur die erste Zeile nach dem If zu der IF bedingung gehört. versteh ich das richtig?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:16
Hi!

Das hast du richtig erkannt!


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:18
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
JumpFrog

Registriert seit: 15. Mär 2009
26 Beiträge
 
#10

Re: While schleife endlos? oder nicht?

  Alt 5. Apr 2009, 15:24
wie schön das unser Lehrer das uns mal gesagt hat

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
  begin
      zahl:=zahl+1;
      a:=a+1;
      x:=x+1;
  end
  else
  x:=x+1;
end;

Label1.Caption:=inttostr(zahl);

end;
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).
Also wo is nun wieder mein Fehler...

@Jens: Ja, habe ich gemacht allerdings mit else und es hat nicht funktioniert, also habe ich das alles wieder weggenommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz