Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program ziegenproblem_spiel;
- uses crt, math, sysutils;
- var tuerAuto, tuerZiege, tuerZiegeSwap, tuerKandidat, zaehlerSpiele, zaehlerAutos, rep, strat, i:integer;
- diagque, simque: string;
- diag, sim: boolean;
- procedure randomAuto;
- begin
- tuerAuto:=1+random(3);
- end;
- procedure userchoice1;
- begin
- writeln('Bitte entscheide dich fuer eine der drei Tueren! (Werte: 1-3)');
- repeat
- write('Deine Entscheidung: ');
- readln(tuerKandidat);
- until (tuerKandidat = 1) or (tuerKandidat = 2) or (tuerKandidat = 3);
- end;
- procedure defineZiege;
- var muenze: integer;
- begin
- if (tuerAuto = 1) then begin // Auto = Tür 1
- if (tuerKandidat = 1) then begin
- muenze:=random(1);
- if (muenze=0) then tuerZiege:= 2
- else tuerZiege:= 3;
- end;
- if (tuerKandidat = 2) then tuerZiege:= 3;
- if (tuerKandidat = 3) then tuerZiege:= 2;
- end;
- if (tuerAuto = 2) then begin // Auto = Tür 2
- if (tuerKandidat = 1) then tuerZiege:= 3;
- if (tuerKandidat = 2) then begin
- muenze:=random(1);
- if (muenze=0) then tuerZiege:= 1
- else tuerZiege:= 3;
- end;
- if (tuerKandidat = 3) then tuerZiege:= 1;
- end;
- if (tuerAuto = 3) then begin // Auto = Tür 3
- if (tuerKandidat = 1) then tuerZiege:= 2;
- if (tuerKandidat = 2) then tuerZiege:= 1;
- if (tuerKandidat = 3) then begin
- muenze:=random(1);
- if (muenze=0) then tuerZiege:= 1
- else tuerZiege:= 2;
- end;
- end;
- end;
- procedure defineZiegeSwap; // Tür bestimmen, auf welche der Benutzer wechseln kann
- begin // quasi Zahl =/= tuerKandidat und tuer Ziege
- if (tuerZiege = 1) then begin
- if (tuerKandidat = 2) then tuerZiegeSwap:= 3
- else tuerZiegeSwap:= 2;
- end;
- if (tuerZiege = 2) then begin
- if (tuerKandidat = 1) then tuerZiegeSwap:= 3
- else tuerZiegeSwap:= 1;
- end;
- if (tuerZiege = 3) then begin
- if (tuerKandidat = 1) then tuerZiegeSwap:= 2
- else tuerZiegeSwap:= 1;
- end;
- end;
- procedure userchoice2; // Ausgabe der Pos. der Ziege, Abfrage ob Tür geänd. werden soll
- var wahl:String;
- begin
- writeln('Du hast die Tuer Nummer [', tuerKandidat, '] ausgewaehlt!');
- writeln('Der Moderator oeffnet eine Tuer! Es befindet sich eine Ziege hinter Tuer [', tuerZiege, ']!');
- write('Moechtest du deine Wahl auf Tuer [', tuerZiegeSwap, '] aendern? (ja/nein): ');
- readln(wahl);
- if (wahl='nein') then writeln('Wahl nicht geaendert.')
- else if (wahl='ja') then begin
- tuerKandidat:=tuerZiegeSwap;
- end
- else writeln('Ungueltige Eingabe, deine Wahl wird beibehalten.');
- end;
- procedure result; //Bestimmen und ausgeben, ob gewonnen
- begin
- writeln('Das Auto befindet sich bei Tuer Nummer [', tuerAuto,'], deine Auswahl war Tuer Nummer [', tuerKandidat, '].');
- if (tuerAuto = tuerKandidat) then begin
- writeln('Klasse, du hast gewonnen!');
- zaehlerAutos:= zaehlerAutos+1;
- end
- else writeln('Leider nur die Ziege, viel Glueck beim naechsten Mal!');
- end;
- procedure stat; // Ausrechnen und ausgeben der gezählten Spieldaten
- var winrate: double;
- begin
- winrate:=(zaehlerAutos/zaehlerSpiele)*100;
- writeln('[Statistik: ', zaehlerSpiele, ' Spiel(e), ', zaehlerAutos, ' gewonnen. ', winrate:0:2, '% Winrate.]');
- end;
- begin
- randomize; // Parameter setzen
- sim:=false;
- diag:= false;
- zaehlerSpiele:= 0;
- zaehlerAutos:= 0;
- write('Diagnosemodus? (ja/nein): '); // Modi abfragen
- readln(diagque);
- if (diagque = 'ja') then diag := true;
- write('Simulation? (ja/nein): '); // Modi abfragen
- readln(simque);
- if (simque = 'ja') then sim := true;
- writeln;
- while (sim=false) do // Modus : Spiel
- begin
- randomAuto;
- if (diag) then writeln('Auto ist bei Tuer: ', tuerAuto,'.'); // Ausgabe von Autopos. wenn diag = true
- userchoice1;
- defineZiege;
- defineZiegeSwap;
- userchoice2;
- result;
- zaehlerSpiele:= zaehlerSpiele+1;
- stat;
- writeln('Bitte <Enter> druecken, um erneut zu spielen!');
- readln;
- end;
- while (sim) do // Modus : Simulation
- begin
- write('Wie viele Wiederholungen sollen getestet werden? ');
- readln(rep);
- writeln('Welche Strategie? Tuer behalten: 1, Tuer wechseln: 2');
- write('> ');
- readln(strat);
- for i:=1 to rep do
- begin
- randomAuto;
- tuerKandidat:=1+random(3);
- defineZiege;
- defineZiegeSwap;
- if (strat = 2) then tuerKandidat := tuerZiegeSwap; // WICHTIG: Hier wird Tür getauscht falls Str. 2 gewählt
- if (tuerAuto = tuerKandidat) then zaehlerAutos:= zaehlerAutos+1;
- zaehlerSpiele:= zaehlerSpiele+1;
- end;
- stat;
- writeln('Bitte <Enter> druecken, um eine neue Simulation durchzufuehren!');
- writeln;
- readln;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement