(1a)   Script:  probabiltà 1

Ecco la parte dello script, modificabile, in cui è descritto l'evento, seguita da alcuni esempi di uscite (la probabilità in questo caso sappiamo essere 16.666...%).


function ValVer()
{ with(Math) {
/// evento attuale e' uscita 7 con 2 dadi equi
/// se vuoi cambia evento e salva con un nuovo nome

U1 = floor(random()*6+1);
U2 = floor(random()*6+1);
if (U1+U2==7)
{ V = 1}
else
{ V = 0}

}}

Ecco alcune uscite:

n = 300000 16.675333333333334% +/- 0.2041669333995811
n = 100000 16.774% +/- 0.3544632838563058
n = 50000 16.882% +/- 0.5025740794093005
n = 20000 17.015% +/- 0.7971368578283816
n = 12000 16.975% +/- 1.0281537447905884
n = 11000 16.936363636363634% +/- 1.0729023794123182
n = 10000 16.82% +/- 1.122187493459559
n = 2000 16.2% +/- 2.4722613207383657
n = 1000 15.6% +/- 3.444070501836689

(1b)  Ovvero con R:

Pr <- function(n) {f <- 0
    for (i in 1:n) if ( floor(runif(1)*6)+floor(runif(1)*6)+2 == 7) f <- f+1
    fr <- f/n; S <- sqrt(fr*(1-fr)/(n-1))
    print(c(fr, "+/-", 3*S), quote=FALSE)}
Pr(1e2)
[1] 0.17           +/-           0.113257550420591
Pr(1e3)
[1] 0.157          +/-           0.0345304409376908
Pr(1e4)
[1] 0.1644         +/-           0.0111197005703426
Pr(1e5)
[1] 0.16841        +/-           0.00355027499153589
Pr(1e6)
[1] 0.166135       +/-           0.00111660588516437
# Posso concludere che è tra 0.1650 e 0.1672

(2a)   Qual è la probabilità, pescando 10 carte da un mazzo da 40, di ottenere almeno un tris (cioè 3 o 4 carte dello stesso valore)?
Il calcolo teorico non è facile. Con una simulazione è facile trovare che è del 38%±1% (ma ci vogliono molte prove per arrivare a 3 cifre significative: 38.5%±0.1%).

Script:  probabiltà 2


///c[seme][valore] matrice in cui segno le carte uscite
c=new Array(4); for (seme=1; seme<5; seme++) {c[seme]=new Array(10)}
for (seme=1; seme<5; seme++)
  {for (valore=1; valore<11; valore++) {c[seme][valore]=0}}
///matrice in cui conto le uscite di ogni valore
n = new Array(10);
for (valore=1; valore<11; valore++) {n[valore]=0}
///genero 10 carte e pongo V=1 se trovo un tris
tris=0;
for (var i=1; i<11; i=i+1)
  {ripeti=1;
  while (ripeti==1)
    {seme=floor(random()*4)+1; valore=floor(random()*10)+1;
    if (c[seme][valore]==0) {ripeti=0}}
  c[seme][valore]=1; n[valore]=n[valore]+1}
for (valore=1; valore<11; valore++)
  {if (n[valore]==3 || n[valore]==4) {tris=1; valore=10}}
if (tris==1) {V=1} else {V=0}
}}

Ecco alcune uscite:

n = 1600000 38.4720625% +/- 0.11539056836443596%
n = 800000 38.406625% +/- 0.16313479670944772%
n = 400000 38.40725% +/- 0.23070829283563846%
n = 200000 38.4825% +/- 0.32639110952127953%
n = 100000 38.417% +/- 0.4614403528756373%
n = 50000 38.362% +/- 0.6524023027667002%
n = 10000 38.33% +/- 1.4586441492959916%

(2b)  Ovvero con R:

Pr <- function(n) {f <- 0
 for (prove in 1:n) {
   ca <- array(rep(0,40),dim=c(4,10))
   nu <- array(rep(0,10),dim=10)
   tris <- 0
   for (i in 1:10)
     {ripeti <- 1; while(ripeti==1)
      {seme <- floor(runif(1)*4)+1; valore <- floor(runif(1)*10)+1;
      if (ca[seme,valore]==0) ripeti <- 0}
    ca[seme,valore] <- 1; nu[valore] <- nu[valore]+1;
    for(valore in 1:10)
      if (nu[valore]==3 | nu[valore]==4) {tris <- 1; valore <- 10};
    V <- ifelse(tris==1,1,0) }
   f <- f+V}
 fr <- f/n;
 S <- sqrt(fr*(1-fr)/(n-1)); print(c(fr, "+/-", 3*S), quote=FALSE)}
Pr(1e3)
[1] 0.374          +/-          0.0459263021070195
Pr(1e4)
[1] 0.386          +/-          0.0146056472808722
Pr(1e5)
[1] 0.38415        +/-          0.00461435834087785
Pr(1e6)
[1] 0.385536       +/-          0.00146016576676077
...

Nota: da queste e dalle uscite precedenti si deduce che (probabilmente) il valore è tra 0.38407 e 0.38588, ovvero è 0.385±0.001, ovvero (38.5±0.1)%.