Lanciare i dadi – 1

Lanciare un dado più volte e conteggiare le uscite

  1. Ciascuna faccia del dado ha probabilità 1/6 (16,6… %)
  2. Quanti lanci sono necessari per avere dati attendibili?
  3. Frequenze assolute e/o relative?
Type CONTATORI  = Array[1..6] of LongInt;
Var  C1, C2, C3 : CONTATORI;

Procedure Vedi(CONTA: CONTATORI; n: Longint);
Var
   i: Byte;
   x: Real;
Begin
   Writeln('n=', n);
   For i:=1 to 6 do
      Begin
         x:=100*CONTA[i]/n;
         Writeln(i:8, ': ', x:6:2, ' %');
      End;
End;

Procedure LanciaDado(Var CONTA: CONTATORI; n: Longint);
Var
   i    : Longint;
   esito: Byte;
Begin
   For i:=1 to 6 do         // inizializza i contatori
      CONTA[i]:=0;

   For i:=1 to n do         // lancia il dado n volte
      Begin
         esito:=Random(6)+1;
         Inc(CONTA[esito]);
      End;
End;

Begin
   // Numero di lanci sempre più grande: 10, 100, 1.000, 10.000 ...
   LanciaDado(C1,   10); Vedi(C1,   10);
   LanciaDado(C2,  100); Vedi(C2,  100);
   LanciaDado(C3, 1000); Vedi(C3, 1000);
   Readln;
End.

Output

n=10
       1:   0.00 %
       2:   0.00 %
       3:  10.00 %
       4:  50.00 %
       5:  10.00 %
       6:  30.00 %
n=100
       1:  16.00 %
       2:  12.00 %
       3:  20.00 %
       4:  20.00 %
       5:  17.00 %
       6:  15.00 %
n=1000
       1:  16.60 %
       2:  16.30 %
       3:  17.50 %
       4:  15.80 %
       5:  16.20 %
       6:  17.60 %

Confrontando i risultati di 2 esperimenti

//  ...
    Vedi2(C1,  10, C2,  100);
    Vedi2(C1,  10, C3, 1000);
    Vedi2(C2, 100, C3, 1000);
    Readln;

o di 3

//  ...
    Vedi3(C1, 10, C2, 100, C3, 1000);
    Readln;

risulta più evidente la tendenza delle frequenze relative verso la probabilità teorica

             10       100      1000
  1:     0.00 %   16.00 %   16.60 %
  2:     0.00 %   12.00 %   16.30 %
  3:    10.00 %   20.00 %   17.50 %
  4:    50.00 %   20.00 %   15.80 %
  5:    10.00 %   17.00 %   16.20 %
  6:    30.00 %   15.00 %   17.60 %