 |
BlueHeaven |
.fedelissimo.
Registered: Dec 2005
Posts: 53 (0.01 al dì)
Location: Milano
Corso: Informatica Triennale
Anno: Terzo
Time Online: 8:19:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Bella lì, grazie!
Ho provato a fare il quarto, correggetemi se sbaglio:
figliBianchi := (b=1; While[Random > 1/2, b=b+1]; b)
per capire meglio lo scrivo per esteso:
b=1;
while (Random > 1/2) {
b=b+1;
}
figliBianchi=b;
1) ora, per far funzionare il ciclo con qualsiasi p prefissato, basta parametrizzare (ma mi sembra così sciocco che probabilmente non ho capito la domanda)
p=1/2 // questo è il parametro prefissato. Lo posso settare come voglio
b=1;
while (Random > p) {
b=b+1;
}
figliBianchi=b;
2) questa sintassi dovrebbe funzionare.
nel caso dei Rossi si parte dal secondo figlio a ciclare. Il primo lo determino a parte per capire se dal 2° inseguirò un maschio o una femmina:
x:= if[Random>p,0,1] // se x=0 femmina, se x=1 maschio (per es.)
b=2; //come già detto parto dal 2° figlio
while (Random > abs(x-p)) {
b=b+1;
}
figliBianchi=b;
NOTA su abs(x-p)): per rendere più evidenti i casi utilizzo p diverso da q (cioè diversi da 1/2) per esempio p=1/3 di avere un maschio come primo figlio (2/3 quindi per la femmina)
- se x=0 il 1° figlio è femmina => abs(0-1/3) = abs(-1/3) =
1/3 = 1/3. Quindi se Random > 1/3 il prossimo figlio non è maschio, cioè femmina
- se x=1 il 1° figlio è maschio => abs(1-1/3) = abs(2/3) =
2/3. Quindi se Random > 2/3 il prossimo figlio non è femmina, cioè maschio.
Correggetemi se sbaglio...
__________________
"...no black and white in the blue..."
|