daily pastebin goal
31%
SHARE
TWEET

Untitled

a guest Feb 14th, 2018 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top