Delphi lottospiel-verständnisfrage

computerfreaky

Lt. Commander
Registriert
Juni 2008
Beiträge
1.589
hallo

also bin dabei ein kleines lotto spiel in D6 zu proggen. ein bisschen theorie: der user gibt ne zahl ein, egal welche, ist sie zu gross, schreibt das konsolenprogg 'Zahl zu gross', ist sie zu klein schreibt er 'zahl zu klein' ist sie gleich der zufallszahl, schreibt es 'richtige zahl' und das prog beendet sich.
Gut, hab aber nen kleines problem:das ganze soll mit einer while schleife gemacht werden, nur weiss ich nicht was ich als Kondition nehmen soll. hab schon so viel versucht...
mit der repeat until bekomme ich es hin, aber nicht mit der while
Code:
program lottospiel;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var NBR,N:integer;
begin
  randomize;//generiert eine zufallszahl
  N:=random(50);//weist der variable N eine zufallszahl zwischen 0 und 49
  write('Gebe ein zahl ein: ');
  readln(NBR);
  while (not (NBR=N)) do
  begin
    if (NBR>N) then writeln('Zahl zu gross')
    else writeln('zahl zu klein');
    if (NBR=N) then writeln('Richtige zahl');
    readln(NBR);
  end;

  readln;
end.
kann mir jmd bitte helfen. ich bekomme einfach kein licht in diese dunkle gesetz.
eine kleine erklärung genügt mir

danke
 
program lottospiel;

{$APPTYPE CONSOLE}

uses
SysUtils;
var NBR,N:integer;
begin
NBR := -1; // ungültigen wert initialisieren, um die schleife mindestens 1x auszuführen, alternativ könntest du auch eine do-while schleife verwenden
randomize;//generiert eine zufallszahl
N:=random(50);//weist der variable N eine zufallszahl zwischen 0 und 49
while (not (NBR=N)) do // ist die zahl falsch wird die schleife ausgeführt
begin
write('Gebe ein zahl ein: ');
readln(NBR);
if (NBR>N) then writeln('Zahl zu gross')
else writeln('zahl zu klein');
end;
writeln('Richtige zahl'); // wird die schleife nicht mehr ausgeführt so ist die zahl richtig

readln;
end.

kein delphi drauf aber so sollte es gehn
 
Zuletzt bearbeitet:
Der Unterschied zwischen einer While und einer Repeat Schleife ist vor allem, dass die Repeat schleife garantiert einmal durchlaufen wird, da die Bedingung am ende steht. Bei einer vorgestellten Bedingung ist dies nicht der Fall. Da die Schleife nur durchlaufen wird, wenn NBR ungleich N ist wird "if (NBR=N) then writeln('Richtige zahl');" nie true liefern.

Ich kenn mich nicht genau mit Konsolenanwendungen aus, aber ich glaub nicht, dass die readln in der Schleife sinn hat. Aber wie gesagt, da kenn ich mich nicht aus.
 
hey danke es funzt
Code:
program lottospiel;

{$APPTYPE CONSOLE}

uses
SysUtils;
var NBR,N:integer;
begin
  NBR := -1;
  randomize;
  N:=random(50);
  while (not (NBR=N)) do
  begin
    write('Gebe ein zahl ein: ');
    readln(NBR);
    if (NBR>N) then writeln('Zahl zu gross');
    if (NBR<N) then writeln('zahl zu klein');
  end;
  writeln('Richtige zahl');

readln;
end.

würde es noch ne bessere schreibweise geben?

thx
 
Zuletzt bearbeitet:
nimm

N:=random(49)+1

dann hast du eine zufallszahl zwischen 1 und 49.
 
Zurück
Oben