Реализации алгоритмов/Парадокс Монти Холла: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 468:
</pre>
 
== Программа на Turbo [[w:Turbo Pascal|Turbo Pascal]], моделирующая задачу ==
 
<pre>
function montey : boolean;
program paradacs;
var
uses crt;
f, c, o : byte;
label 1;
var a d : array [10..32] of byteboolean;
begin
i,b:integer;
f c:= byterandom(3);
for c := 0 to 2 do
begin;
d[c] := f = c;
clrscr;
c := random(3);
writeln('Program by Kisuke, paradocs Monty Holla');
repeat
randomize;
i o := random(3)+1;
until ((not d[o]) and (o <> c));
{writeln(i);}
montey := d[3 - c - o];
a[i]:=1;
end;
Writeln('Viberite nomer dveri');
readln(b);
If b=1 then begin
Writeln('Hotite smenit vash vibor? Otvet (da - 1) (net - 0) ');
read(c);
if c=1 then begin
if i=2 then b:=2;
if i=3 then b:=3;
if i=1 then b:=4;
end;
if i=b then writeln('Ugadali')
else writeln('Ne ugadali');
readln; goto 1;
end;
If b=2 then begin
Writeln('Hotite smenit vash vibor? Otvet (da - 1) (net - 0) ');
read(c);
if c=1 then begin
if i=1 then b:=2;
if i=3 then b:=3;
if i=2 then b:=4;
end;
if i=b then writeln('Ugadali')
else writeln('Ne ugadali');
readln; goto 1;
end;
If b=3 then begin
Writeln('Hotite smenit vash vibor? Otvet (da - 1) (net - 0) ');
read(c);
if c=1 then begin
if i=1 then b:=1;
if i=2 then b:=2;
if i=3 then b:=4;
end;
if i=b then writeln('Ugadali')
else writeln('Ne ugadali');
readln; goto 1;
end;
 
const
1: readln;
n = end.10000000;
var
 
i, k : longint;
</pre>
Или
<pre>
program paradox;
uses crt;
label 1;
var a:array[1..3] of byte;
i,b,m,n:longint;
begin;
writeln('Program by Kisuke&SHOGUN, Monty Hall problem');
randomize;
n:=1;
m:=0;
for n:=1 to 1000000 do
begin
randomize;
i:=random(3)+1;
for i := 1 to n do
a[i]:=1;
if montey then
b:=random(3)+1;
inc(k);
 
write(k * 100 / n : 5 : 2);
If b=1 then begin
readln;
if i=2 then b:=2;
end.
if i=3 then b:=3;
if i=1 then b:=4;
end else
If b=2 then begin
if i=1 then b:=2;
if i=3 then b:=3;
if i=2 then b:=4;
end else
If b=3 then begin
if i=1 then b:=1;
if i=2 then b:=2;
if i=3 then b:=4;
end;
if i=b then m:=m+1 else
end;
writeln(m);
readln;
end.
</pre>
Программа подсчитывает вероятность выигрыша в случае смены двери. Производится n попыток. Результат работы — 66 %.
Из миллиона вариантов это программа показала верными 555830, что превышает 50 %.
 
== Программа на [http://ru.wikipedia.org/wiki/Delphi_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) Delphi] ==