Toon posts:

3 deuren probleem met pascal

Pagina: 1
Acties:

Verwijderd

Topicstarter
beste mensen, ik ben met een pascal programma bezig waarbij er 3 deuren zijn, achter 1 deur staat een auto.
een persoon kiest eerst een deur en de quizmaster opent hierna een van de overgebleven deuren waar de auto niet achter staat.

Dan mag de persoon nog eenmaal van deur verwisselen.

uiteindelijk is er dus 66% kans dat deze persoon de auto kiest nadat deze persoon heeft gewisselt van deur.

het probleem is alleen dat er uit dit programma komt dat de kans 50% is...

ik snap dus niet wat het probleem is..

alvast bedankt.


PROGRAMMA
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
program auto;

var aantal:integer;
    auto_deur:integer;
    aantal_keer_gewonnen_zonder_wissel:integer;
    gekozen_deur:integer;
    x:integer;
    kandidaat_wisselt_deur:integer;
    aantal_keer_gewonnen_met_wissel:integer;
    percentage_gewonnen_zonder_wissel:real;
    percentage_gewonnen_met_wissel:real;

procedure auto_toewijzen;
begin
     auto_deur:=random(3)+1;
end;

procedure eerste_keuze_kandidaat;
begin
     gekozen_deur:=random(3)+1;
end;

procedure teller_gewonnen_zonder_wissel;
begin
     if auto_deur=gekozen_deur then
              begin
                   aantal_keer_gewonnen_zonder_wissel:=aantal_keer_gewonnen_zonder_wissel+1;
              end;
end;


procedure kandidaat_wisselt;
begin
     auto_deur:=random(2)+1;
     kandidaat_wisselt_deur:=random(2)+1;
end;

procedure teller_gewonnen_met_wissel;
begin
     if kandidaat_wisselt_deur = auto_deur then
        begin
             aantal_keer_gewonnen_met_wissel:=aantal_keer_gewonnen_met_wissel+1;
        end;
end;

procedure percentage_win_zonder_wissel;
begin
     percentage_gewonnen_zonder_wissel:=aantal_keer_gewonnen_zonder_wissel/aantal*100;
     writeln('Percentage gewonnen zonder wissel is:',percentage_gewonnen_zonder_wissel:8:2,'%');
end;

procedure percentage_win_met_wissel;
begin
     percentage_gewonnen_met_wissel:=aantal_keer_gewonnen_met_wissel/aantal*100;
     writeln('Percentage gewonnen met wissel is :',percentage_gewonnen_met_wissel:8:2,'%');
end;

procedure aantal_keer_uitgevoerd;
begin
     writeln('Aantal keer dat het programma is uitgevoerd is :' ,aantal:2);
end;


{---------------------------HOOFDPROGRAMMA-----------------------}
begin
randomize;
aantal_keer_gewonnen_met_wissel:=0;
aantal_keer_gewonnen_zonder_wissel:=0;
writeln('Geef op hoeveel keer dit uitgevoerd moet worden');
readln (aantal);
for x:=1 to aantal do
         begin
              auto_toewijzen;
              eerste_keuze_kandidaat;
              teller_gewonnen_zonder_wissel;
         end;
for x:=1 to aantal do
         begin
              kandidaat_wisselt;
              teller_gewonnen_met_wissel;
{activeer controle zooi door onderstaande haakies weg te halen}
{writeln('auto staat achter deur                         :',auto_deur);
writeln('kandidaat gaat voor deur staan                 :',gekozen_deur);
writeln('kandidaat wisselt naar deur                    :',kandidaat_wisselt_deur);
readln;}
         end;
aantal_keer_uitgevoerd;
percentage_win_zonder_wissel;
percentage_win_met_wissel;
readln;
end.

[ Voor 3% gewijzigd door D2k op 10-01-2003 09:59 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:42

Janoz

Moderator Devschuur®

!litemod

Ten eerste wil ik je ff op de quickstart wijzen... Daar staat in hoe je die source een beetje netjes neerzet.

Dat er 50% uit komt is trouwens helemaal niet raar. Kijk maar eens wat de procedure 'kandidaat wisselt' doet. Die maakt een nieuwe kansberekening ipv dat er met de oude verder gegaan wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

EDIT:
te Slaperig om wat zinnigs te zeggen :+
dus m'm eigen onzin maar weggehaald :D

[ Voor 82% gewijzigd door MeIsTwisted op 10-01-2003 10:02 . Reden: Sleepy ]

Multimonitor is relax :P


Verwijderd

Topicstarter
ja zover was ik ook al, maar hoe kan er met de oude worden verder gegaan zonder dat bijvoorbeeld door de quizmaster de deur wordt gekozen die de persoon al heeft gekozen.

Verwijderd

Topicstarter
50 % klopt dus niet, het is echt 66% als de persoon alsnog wisselt

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:42

Janoz

Moderator Devschuur®

!litemod

MeIsTwisted -> Beter opletten bij wiskunde :+

misterqazzaq -> De quizmaster (en je programma) weet toch waar de auto achter staat? Het is niet moeilijk om de quizmaster juist het lege hokje open te laten maken (is er maar 1 als de initiele keuze fout is en een keus uit twee waneer de juiste deur gekozen is)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

procedure kandidaat_wisselt;
begin
auto_deur:=random(2)+1;
kandidaat_wisselt_deur:=random(2)+1;
end;


dat klopt niet

Verwijderd

Topicstarter
en warom dan niet, want na 4 uur zitten staren kom ik er echt niet meer uit

  • _Rayman_
  • Registratie: November 2001
  • Laatst online: 29-08-2023

_Rayman_

Verwacht het onverwachte.

Verwijderd schreef op 10 januari 2003 @ 09:59:
procedure kandidaat_wisselt;
begin
auto_deur:=random(2)+1;
kandidaat_wisselt_deur:=random(2)+1;
end;


dat klopt niet
Idd. Zet er randomize boven ;)

Dus:

procedure kandidaat_wisselt;
begin
Randomize;
auto_deur:=random(2)+1;
kandidaat_wisselt_deur:=random(2)+1;
end;

[ Voor 22% gewijzigd door _Rayman_ op 10-01-2003 10:03 ]


Verwijderd

Je doet het imo veel te ingewikkeld. Wat sowieso niet klopt, is dat het mogelijk is dat als de kandidaat van deur wisselt, dat de auto ook van deur wisselt.

Sterker nog, zoals je de app. nu geschreven hebt klopt de kansberekening gewoon.

Die auto moet dus gewoon op z'n plek blijven staan.

Ik zou een array maken van deuren. In het begin zitten er in die array 3 deuren. Aan 1 van die deuren ken je een auto toe. Daarna laat je kand kiezen, auto --> prijs. Geen auto --> wisselen? Wisselt een kandidaat, dan flikker je die deur gewoon weg uit je array (ongeacht of de auto er achter zit of niet), maar blijf doorrekenen met het totaal aantal deuren waarmee je begonnen bent.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:42

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 10 januari 2003 @ 10:02:
Je doet het imo veel te ingewikkeld. Wat sowieso niet klopt, is dat het mogelijk is dat als de kandidaat van deur wisselt, dat de auto ook van deur wisselt.

Sterker nog, zoals je de app. nu geschreven hebt klopt de kansberekening gewoon.

Die auto moet dus gewoon op z'n plek blijven staan.

Ik zou een array maken van deuren. In het begin zitten er in die array 3 deuren. Aan 1 van die deuren ken je een auto toe. Daarna laat je kand kiezen, auto --> prijs. Geen auto --> wisselen? Wisselt een kandidaat, dan flikker je die deur gewoon weg uit je array (ongeacht of de auto er achter zit of niet), maar blijf doorrekenen met het totaal aantal deuren waarmee je begonnen bent.


Wel leuk, maar het 'auto -> prijs' gedeelte klopt niet. Mensen moeten zonder te kijken wisselen. Eigenlijk is het erg simpel :)...

Niet wisselen -> Je wint de auto als je eerste keus goed was
Wel wisselen -> Je wint de auto als je eerste keus fout was

ps: Owh, en dat randomize is natuurlijk sowieso onzin.. Nou niet onzin, maar lost je imnplementatie probleem niet op.

[ Voor 6% gewijzigd door Janoz op 10-01-2003 10:07 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
bedankt voor jullie reacties, maar ik zie gewoon niet waar de fout zit in mijn programma

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Je moet het maar eens programmeren zoals het echt gaat.
Dus:
autoplaatsen
kandidaat plaatsen
Open deur selecteren
Kandidaat overgebleven deur plaatsen,
Deuren openen.

Ik zie jou niet de opendeur selecteren en ook niet de kandidaat laten wisselen.

Als je het op mijn manier (dus de werkelijkheid) doet komt er echt 66% uit.

PS. Je procedures kunnen wel wat algemer worden qua functionaliteit.
Je geeft nu geen parameters mee. Het kiezen van de eerste deur is in beide gevallen gelijk. Maak hiervoor dus 1 procedure.
Openen deur krijgt dan bijvoorbeeld de parameters:
(Kandidaat deur IN, auto deur IN, open deur IN/OUT)
Wisselen van deur kan je ook in een procedure plaatsen door mee te geven: (huidige deur IN, open deur IN, nieuwe deur IN/OUT)

Kan kan je procedure tenminste ook zonder al die globale variabelen werken)
Ik zou met je huidige procedures zeggen: gooi ze weg en zet je code direct in de main body.
Dit is geen correct gebruik van procedures.
Pagina: 1