Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Einfache "Kugeln Ziehen"-Aufgabe mit Schleife

  Alt 25. Jan 2012, 21:07
ok, ich hatte die Schleife übersehen

Ich habe deinen Ursprungs-Quelltext mal etwas modifiziert und entsprechende Kommentare hinzugefügt
Delphi-Quellcode:
procedure TForm1.KugelnZiehen(Sender: TObject);
var s,w,fall,zug:integer;
begin

w:=StrToIntDef( Weiss.text, 0 ); // Wenn keine Zahl im Edit-Feld,
s:=StrToIntDef( Schwarz.text, 0 ); // dann wird der Default-Wert genommen, hier 0
zug := 0; // Initialisierung vergessen, ansonsten hat Zug einen Zufallswert

// Wenn die Summe aus s und w < 1 ist, dann hast du eine Endlosschleife, darum

if ( s + w ) < 1 then
  begin
    ShowMessage( 'Ungültige Eingabe für Schwarz und Weiß!' );
    Exit; // diese procedure wird nun verlassen
  end;

repeat
 begin
  // randomize; // Sollte nur einmal in Anwendung aufrufen werden
  // fall:=(Random(2)+1); {Welcher Fall tritt ein?}
  // Random( 2 ) + 1 ergibt Werte von 1..2 Fall 3 würde also niemals eintreten
  fall := Random( 3 ) + 1; // jetzt gibt es Werte von 1..3 :o)
  Case fall of
   1: begin {Zwei Schwarze Kugeln rausgenommen, eine Schwarze wieder rein}
       if s>=2 then
        begin
        s:=s-1;
        zug:=zug+1;
        end
        // else
      end;
   2: begin {Zwei Weiße Kugeln rausgenommen, eine Schwarze wieder rein}
       if w>=2 then
        begin
        w:=w-2;
        s:=s+1;
        zug:=zug+1;
        end
        // else
      end;
   3: begin {Zwei unterschiedliche Kugeln rausgenommen, eine Schwarze wieder rein}
       if (s>0) and (w>0) then
        begin
        s := s-1;
        zug:=zug+1;
        end
        // else
      end;
 end;
end;
until s+w=1;

  // Textausgabe.Caption:='Züge: '+(inttostr(zug))+' Schwarze Kugeln: '+(inttostr(zug))+' Weiße Kugeln: '+(inttostr(zug))+' ';
  // ist etwas umständlich und du hast immer nur die Variable Zug angegeben, besser so
  // %d ist ein Platzhalter für eine Integer-Zahl
  Textausgabe.Caption := Format( 'Züge: %d Schwarze Kugeln: %d Weiße Kugeln %d', [zug, s, w] );

end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (25. Jan 2012 um 21:12 Uhr)
  Mit Zitat antworten Zitat