¡Ah! En el ejercicio anterior de varios bombos en la tercera columna no salía el signo de % pero son tantos por cientos, que se me olvidó hacer que lo escribiera el programa y se me olvidó escribirlo a mí a mano.
Asi es como queda el programa de un solo bombo con repetición de bolas que es el que sirve para lo que planteas. Da lo mismo sacar las bolas de uno solo que de dos o de veinte si se pueden repetir.
program bolas100;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
type
CienBooleanos = array[0..99] of boolean;
CientounoEnteros = array[0..100] of integer;
const
CienFalsas:CienBooleanos = (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
i, j,k, aciertos,sacadas, bolas, bola,pronos,
extraídas, tandas, sorteos :integer;
acertadas: CienBooleanos;
ganadas: CientounoEnteros;
porcen: double;
begin
randomize;
Write('Numero de bolas: '); readln(bolas);
Write('Números pronosticados: '); readln(pronos);
Write('Bolas extraídas: '); readln(extraídas);
Write('Tandas de sorteos: '); readln(tandas);
Write('Sorteos por tanda: '); readln (sorteos);
for i:= 0 to 100 do ganadas:= 0;
for i:= 1 to tandas do
begin
for j:= 1 to sorteos do
begin
acertadas:= CienFalsas; sacadas:=0; aciertos:=0;
While (aciertos < pronos) and (Sacadas <= extraídas) do
begin
bola:=random(bolas);
if (bola < pronos) and (not acertadas[bola]) then
begin
Inc(aciertos,1);
acertadas[bola]:=true;
end;
Inc(sacadas,1)
end;
inc(ganadas[aciertos],1);
end;
writeln('Tanda: ',i);
for k:=pronos downto 0 do
begin
porcen:= 100*ganadas[k] / (i*sorteos);
writeln(k:3,ganadas[k]:12, Porcen:14:7, '%');
end;
end;
readln;
end.
Y estos son los resultados:
15 84477 0.0084477 %
14 1207046 0.1207046 %
13 7812665 0.7812665 %
12 30417536 3.0417536 %
11 79660006 7.9660006 %
10 148620468 14.8620468 %
9 204003098 20.4003098 %
8 209860323 20.9860323 %
7 163108791 16.3108791 %
6 95773296 9.5773296 %
5 42129881 4.2129881 %
4 13640269 1.3640269 %
3 3147465 0.3147465 %
2 487305 0.0487305 %
1 45446 0.0045446 %
0 1928 0.0001928 %
Y eso es todo.