Advertisement
Guest User

Untitled

a guest
Feb 14th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. program ziegenproblem_spiel;
  2.  
  3. uses crt, math, sysutils;
  4.  
  5. var tuerAuto, tuerZiege, tuerZiegeSwap, tuerKandidat, zaehlerSpiele, zaehlerAutos, rep, strat, i:integer;
  6. diagque, simque: string;
  7. diag, sim: boolean;
  8.  
  9. procedure randomAuto;
  10. begin
  11. tuerAuto:=1+random(3);
  12. end;
  13.  
  14. procedure userchoice1;
  15. begin
  16. writeln('Bitte entscheide dich fuer eine der drei Tueren! (Werte: 1-3)');
  17. repeat
  18. write('Deine Entscheidung: ');
  19. readln(tuerKandidat);
  20. until (tuerKandidat = 1) or (tuerKandidat = 2) or (tuerKandidat = 3);
  21. end;
  22.  
  23. procedure defineZiege;
  24. var muenze: integer;
  25. begin
  26. if (tuerAuto = 1) then begin // Auto = Tür 1
  27. if (tuerKandidat = 1) then begin
  28. muenze:=random(1);
  29. if (muenze=0) then tuerZiege:= 2
  30. else tuerZiege:= 3;
  31. end;
  32. if (tuerKandidat = 2) then tuerZiege:= 3;
  33. if (tuerKandidat = 3) then tuerZiege:= 2;
  34. end;
  35. if (tuerAuto = 2) then begin // Auto = Tür 2
  36. if (tuerKandidat = 1) then tuerZiege:= 3;
  37. if (tuerKandidat = 2) then begin
  38. muenze:=random(1);
  39. if (muenze=0) then tuerZiege:= 1
  40. else tuerZiege:= 3;
  41. end;
  42. if (tuerKandidat = 3) then tuerZiege:= 1;
  43. end;
  44. if (tuerAuto = 3) then begin // Auto = Tür 3
  45. if (tuerKandidat = 1) then tuerZiege:= 2;
  46. if (tuerKandidat = 2) then tuerZiege:= 1;
  47. if (tuerKandidat = 3) then begin
  48. muenze:=random(1);
  49. if (muenze=0) then tuerZiege:= 1
  50. else tuerZiege:= 2;
  51. end;
  52. end;
  53. end;
  54.  
  55. procedure defineZiegeSwap; // Tür bestimmen, auf welche der Benutzer wechseln kann
  56. begin // quasi Zahl =/= tuerKandidat und tuer Ziege
  57. if (tuerZiege = 1) then begin
  58. if (tuerKandidat = 2) then tuerZiegeSwap:= 3
  59. else tuerZiegeSwap:= 2;
  60. end;
  61. if (tuerZiege = 2) then begin
  62. if (tuerKandidat = 1) then tuerZiegeSwap:= 3
  63. else tuerZiegeSwap:= 1;
  64. end;
  65. if (tuerZiege = 3) then begin
  66. if (tuerKandidat = 1) then tuerZiegeSwap:= 2
  67. else tuerZiegeSwap:= 1;
  68. end;
  69. end;
  70.  
  71. procedure userchoice2; // Ausgabe der Pos. der Ziege, Abfrage ob Tür geänd. werden soll
  72. var wahl:String;
  73. begin
  74. writeln('Du hast die Tuer Nummer [', tuerKandidat, '] ausgewaehlt!');
  75. writeln('Der Moderator oeffnet eine Tuer! Es befindet sich eine Ziege hinter Tuer [', tuerZiege, ']!');
  76. write('Moechtest du deine Wahl auf Tuer [', tuerZiegeSwap, '] aendern? (ja/nein): ');
  77. readln(wahl);
  78. if (wahl='nein') then writeln('Wahl nicht geaendert.')
  79. else if (wahl='ja') then begin
  80. tuerKandidat:=tuerZiegeSwap;
  81. end
  82. else writeln('Ungueltige Eingabe, deine Wahl wird beibehalten.');
  83. end;
  84.  
  85. procedure result; //Bestimmen und ausgeben, ob gewonnen
  86. begin
  87. writeln('Das Auto befindet sich bei Tuer Nummer [', tuerAuto,'], deine Auswahl war Tuer Nummer [', tuerKandidat, '].');
  88. if (tuerAuto = tuerKandidat) then begin
  89. writeln('Klasse, du hast gewonnen!');
  90. zaehlerAutos:= zaehlerAutos+1;
  91. end
  92. else writeln('Leider nur die Ziege, viel Glueck beim naechsten Mal!');
  93. end;
  94.  
  95. procedure stat; // Ausrechnen und ausgeben der gezählten Spieldaten
  96. var winrate: double;
  97. begin
  98. winrate:=(zaehlerAutos/zaehlerSpiele)*100;
  99. writeln('[Statistik: ', zaehlerSpiele, ' Spiel(e), ', zaehlerAutos, ' gewonnen. ', winrate:0:2, '% Winrate.]');
  100. end;
  101.  
  102.  
  103.  
  104.  
  105. begin
  106. randomize; // Parameter setzen
  107. sim:=false;
  108. diag:= false;
  109. zaehlerSpiele:= 0;
  110. zaehlerAutos:= 0;
  111. write('Diagnosemodus? (ja/nein): '); // Modi abfragen
  112. readln(diagque);
  113. if (diagque = 'ja') then diag := true;
  114. write('Simulation? (ja/nein): '); // Modi abfragen
  115. readln(simque);
  116. if (simque = 'ja') then sim := true;
  117. writeln;
  118. while (sim=false) do // Modus : Spiel
  119. begin
  120. randomAuto;
  121. if (diag) then writeln('Auto ist bei Tuer: ', tuerAuto,'.'); // Ausgabe von Autopos. wenn diag = true
  122. userchoice1;
  123. defineZiege;
  124. defineZiegeSwap;
  125. userchoice2;
  126. result;
  127. zaehlerSpiele:= zaehlerSpiele+1;
  128. stat;
  129. writeln('Bitte <Enter> druecken, um erneut zu spielen!');
  130. readln;
  131. end;
  132. while (sim) do // Modus : Simulation
  133. begin
  134. write('Wie viele Wiederholungen sollen getestet werden? ');
  135. readln(rep);
  136. writeln('Welche Strategie? Tuer behalten: 1, Tuer wechseln: 2');
  137. write('> ');
  138. readln(strat);
  139. for i:=1 to rep do
  140. begin
  141. randomAuto;
  142. tuerKandidat:=1+random(3);
  143. defineZiege;
  144. defineZiegeSwap;
  145. if (strat = 2) then tuerKandidat := tuerZiegeSwap; // WICHTIG: Hier wird Tür getauscht falls Str. 2 gewählt
  146. if (tuerAuto = tuerKandidat) then zaehlerAutos:= zaehlerAutos+1;
  147. zaehlerSpiele:= zaehlerSpiele+1;
  148. end;
  149. stat;
  150. writeln('Bitte <Enter> druecken, um eine neue Simulation durchzufuehren!');
  151. writeln;
  152. readln;
  153. end;
  154. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement