{
 Programm  : Ziegen
 Erkl„rung : Siehe Angabenzettel!
 Fach      : Systeme Labor
}
PROGRAM Ziegen;
USES
 Crt;
CONST
 Grenze = 1000000;

PROCEDURE Init(VAR t1,t2,t3 : BOOLEAN);
 VAR
  i : INTEGER;
 BEGIN
  t1 := FALSE;
  t2 := FALSE;
  t3 := FALSE;
  i := Random(3) + 1;
  CASE i OF
   1 : t1 := TRUE;
   2 : t2 := TRUE;
   3 : t3 := TRUE;
  END;
 END;

PROCEDURE Tuerauf(    t1,t2,t3 : BOOLEAN;
                      choice   : INTEGER;
                  VAR opened   : INTEGER);
 VAR
  i : INTEGER;
 BEGIN
  IF (t1 = FALSE) AND (choice <> 1) THEN
   BEGIN
    opened := 1;
   END
  ELSE
   IF (t2 = FALSE) AND (choice <> 2) THEN
    BEGIN
     opened := 2;
    END
   ELSE
    BEGIN
     opened := 3;
    END;
 END;

PROCEDURE Wechsletuer(    t1,t2,t3 : BOOLEAN;
                          opened, choice : INTEGER;
                      VAR gewonnen : BOOLEAN);
 BEGIN
  IF (opened <> 1) AND (choice <> 1) THEN
   IF t1 THEN gewonnen := TRUE
   ELSE gewonnen := FALSE
  ELSE
    IF (opened <> 2) AND (choice <> 2) THEN
     IF t2 THEN gewonnen := TRUE
     ELSE gewonnen := FALSE
    ELSE
     IF t3 THEN gewonnen := TRUE
     ELSE gewonnen := FALSE;
 END;

VAR
 t1,t2,t3,winner    : BOOLEAN;
 choice,opened      : INTEGER;
 i,wins,wins_change : LONGINT;
 ch                 : CHAR;
BEGIN
 REPEAT
 ClrScr;
 Randomize;
 wins := 0;
 i := 1;
 {Ohne wechseln}
 WHILE i <= Grenze DO
  BEGIN
   choice := Random(3) + 1;
   Init(t1,t2,t3);
   CASE choice OF
    1 : IF t1 THEN wins := wins + 1;
    2 : IF t2 THEN wins := wins + 1;
    3 : IF t3 THEN wins := wins + 1;
   END;
   Inc(i);
  END;
 i := 1;
 wins_change := 0;
 WHILE i <= Grenze DO
  BEGIN
   choice := Random(3) + 1;
   Init(t1,t2,t3);
   Tuerauf(t1,t2,t3,choice,opened);
   Wechsletuer(t1,t2,t3,opened,choice,winner);
   IF winner THEN
    wins_change := wins_change + 1;
   Inc(i);
  END;
 WriteLn (i-1,' mal gespielt...');
 WriteLn ('Gewinne ohne wechseln: ',wins       );
 WriteLn ('Gewinne mit  wechseln: ',wins_change);
 WriteLn;
 WriteLn ('Beenden = n');
 ch := ReadKey;
 ch := Upcase(ch);
 UNTIL (ch = 'N');
END.