Si, por supuesto que puse que se pueden repetir bolas en bombos distintos, mientras que en cada bombo no se pueden repetir.
Este es el programa:
program VariosBombos;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
type
SalioNumero= array [0..99] of boolean;
CienNumeros= array [0..99] of integer;
const
CienNoes: SalioNumero = (false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false,
false, false, false, false, false,false, false, false, false, false);
var
NuBo, NuBombos, NuExtrac, Pronos, Tandas, SorTandas:integer;
i,j,k,l,n,Aciertos: integer;
BolasSalidasBombo, BolasSalidasTodosBombos: SalioNumero;
Buenos: CienNumeros;
Porcen: double;
begin
repeat
write('Numero de bolas, máximo 100: ');readln(NuBo);
until (Nubo>0) and (Nubo <= 100);
repeat
write('Numero de bombos, máximo 10: ');readln(NuBombos);
until (Nubombos >0) and (NuBombos <=10);
repeat
write('Numero de extracciones por bombo: ');readln(NuExtrac);
until (Nuextrac > 0) and (Nuextrac<=NuBo);
repeat
write('Numero de pronósticos: ');readln (Pronos);
until (pronos>0) and (pronos <= Nubo);
repeat
write('Numero de tandas de sorteos: ');readln(Tandas);
until Tandas >0;
repeat
write('Numero de sorteos por tanda: ');readln(SorTandas);
until SorTandas >0;
for i:=0 to 100 do buenos:=0;
for i:=1 to Tandas do
begin
for j:=1 to SorTandas do
begin
Aciertos:=0;
BolasSalidasTodosBombos:=CienNoes;
for k:=1 to Nubombos do
begin
BolasSalidasBombo:= CienNoes;
for l:=1 to NuExtrac do
begin
repeat
n:= random(Nubo);
until not BolasSalidasBombo[n];
BolasSalidasBombo[n]:= true;
if (not BolasSalidasTodosBombos[n]) and (n < pronos) then
inc(aciertos,1);
BolasSalidasTodosBombos[n]:=true;
end;
end;
inc(Buenos[aciertos],1);
end;
writeln('Tanda ',i);
for j:= pronos downto 0 do
begin
Porcen:= 100*Buenos[j]/(SorTandas*i);
writeln(j:3,Buenos[j]:12,Porcen:12:7,' %');
end;
end;
readln;
end.
Y estos han sido los resultados, la primera columna es el número de aciertos, la segunda el numero de sorteos que han tenido esos aciertos y la tercera el tanto por ciento.
15 7868 0.0007868
14 160614 0.0160614
13 1471531 0.1471531
12 8048957 0.8048957
11 29409876 2.9409876
10 75949140 7.5949140
9 143421463 14.3421463
8 201611076 20.1611076
7 212782164 21.2782164
6 168593649 16.8593649
5 99482158 9.9482158
4 42926822 4.2926822
3 13112360 1.3112360
2 2676804 0.2676804
1 327508 0.0327508
0 18010 0.0018010
Si recuerdas en la pregunta anterior te decía que la probabilidad de 15 pudiéndose repetir bolas era
P(15) = 0.000002915 Uno de cada 343053 sorteos
Mientras que no se repitieran bolas sería
P(15) = C(85,45)/C(100,60) = [85! / (45!·40!)] / [100!/(60!·40!)] =
85!·60! / (45!·100!) = 0.0002099724 Uno de cada 4763
Con este método de tres bombos es
P(15) = 0.000007868 uno de cada 127097
Es 2.7 veces más fácil que cuando se pueden repetir todas, pero 26.7 veces más difícil que cuando no se puede repetir ninguna.
Y eso es todo,