Livello:
Medio
Lanciando due dadi, la somma dei punti sulla loro faccia superiore è un numero intero compreso tra 2 e 12. Il
programma calcolerà le diverse probabilità di apparire di ciascun numero e le rappresenterà in un
grafico.
Per simulare il lancio di un dado useremo la primitiva Casuale. Ecco come funziona:
Casuale 6 -→ restituisce un numero intero compreso tra 0 e 5 (0, 1, 2, 3, 4, 5). Quindi (Casuale 6)+1
restituisce un intero a caso tra 1 e 6. Le parentesi sono necessarie perché altrimenti LOGO sommerebbe 6+1 e
restituirebbe un numero casuale tra 0 e 6. Per evitare di scrivere le parentesi potremmo scrivere 1+Casuale 6.
Definiamo la procedura chiamata dado che simula il lancio di un dado.
Per dado Output 1+Casuale 6 Fine
Useremo la modalità multitartaruga e la primitiva ImpostaTartaruga. ImpostaTartaruga seguito da un numero
intero ci permette di selezionare la tartaruga identificata dal numero stesso.
Uno schema è meglio di mille parole…
Ciascuna tartaruga il cui numero va da 2 a 12 avanzerà di un passo quando la somma delle facce dei dadi appare.
Per esempio, se i due dadi totalizzano 8 allora la tartaruga 8 avanzerà di un passo. Tra due tartarughe successive ci
sono 30 passi orizzontalmente.
Impostiamo tutte le tartarughe usando le coordinate.
- La tartaruga numero 2 ha coordinate (-150;0)
- La tartaruga numero 3 ha coordinate (-120;0)
- La tartaruga numero 4 ha coordinate (-90;0)
- La tartaruga numero 5 ha coordinate (-60;0)
ImpostaTartaruga 2 ImpPos [-150 0] ImpostaTartaruga 3 ImpPos [-120 0] ImpostaTartaruga 4 ImpPos [-90 0] ImpostaTartaruga 5 ImpPos [-60 0] ImpostaTartaruga 6 ImpPos [-30 0] ...
Meglio di scrivere per 11 volte la stessa linea di comandi usiamo la primitiva RipetiPer. Con questa primitiva
possiamo assegnare ad una variabile una sequenza di valori. In questo caso vogliamo assegnare alla
variabile :i valori successivi da 2 a 12. Scriviamo: RipetiPer [i 2 12] [ elenco di istruzioni
]
Per impostare tutte le tartarughe creiamo la procedura inizializza
per inizializza PulisciSchermo NascondiTartaruga PennaSu RipetiPer [i 2 12] [ ImpostaTartaruga :i ImpPos Elenco -150+(:i-2)*30 0 PennaSu Indietro 15 Etichetta :i Avanti 15 PennaGiu ] fine
Cerchiamo di capire l’espressione -150+(:i-2)*30. Iniziamo da -150 e, per ogni nuova tartaruga, aggiungiamo
30 (verificalo con diversi valori di :i se sei scettico).
Infine questo è il programma:
Per dado output 1+Casuale 6 Fine per inizializza PulisciSchermo NascondiTartaruga PennaSu RipetiPer [i 2 12] [ ImpostaTartaruga :i ImpPos Elenco -150+(:i-2)*30 0 PennaSu Indietro 15 Etichetta :i Avanti 15 PennaGiu ] fine per avvia inizializza Ripeti 1000 [ AssegnaVar "sum dado+dado impostatartaruga :sum Avanti 1 ] RipetiPer [i 2 12] [ impostatartaruga :i # le coordtinate y di ciascuna tartaruga # rappresenta in numero di volte che il numero # e’ apparso AssegnaVarLocale "number Ultimo Posizione PennaSu Avanti 10 RuotaSinistra 90 Avanti 10 RuotaDestra 90 PennaGiu Etichetta :number/1000*100 ] fine
Qui c’è un programma più generale. Chiederemo all’utente il numero di dadi e quello di lanci.
per inizializza PulisciSchermo NascondiTartaruga PennaSu ImpNumMaxT :max+1 RipetiPer Frase Elenco "i :min :max [ ImpTar :i ImpPos Elenco -150+(:i-2)*30 0 PennaSu Indietro 15 Etichetta :i Avanti 15 PennaGiu ] fine per dado AssegnaVarLocale "somma 0 Ripeti :dice [ AssegnaVarLocale "somma :somma+1+Casuale 6 ] Output :somma fine per avvia Leggi [Numero di dadi:] "dice Se non Numero? :dice [Stampa [Non e’ un numero valido!] Ferma] AssegnaVar "min :dice AssegnaVar "max 6*:dice Leggi [Numero di lanci: ] "lanci Se non Numero? :lanci [Stampa [Non e’ un numero valido] Ferma] inizializza Ripeti :lanci [ impostatartaruga dado Avanti 1 ] RipetiPer Frase Elenco "i :min :max [ impostatartaruga :i AssegnaVarLocale "effectif Ultimo Posizione # Arrotonda per 0.1 PennaSu Avanti 10 RuotaSinistra 90 Avanti 10 RuotaDestra 90 PennaGiu Etichetta (Arrotonda :effectif/:lanci*1000)/10 ] fine