6 - NUMERI CASUALI (O MEGLIO, “PSEUDOCASUALI”)

 

Nell’istruzione

 

bigliettino:=random (25)

 

bigliettino è una variabile di tipo intero;

l’istruzione le assegna un valore casuale,

o meglio “pseudocasuale” (vedi il riquadro qui a destra)

che potrà essere  0, 1, 2, 3, … , 23, 24.

 

In generale, in PASCAL, la funzione RANDOM (n)

genera un intero pseudocasuale che potrà valere:  0, 1, 2, … , n1.

 

Due esempi significativi:

 

     esito:=random(2)

assegnerà alla variabile esito o il valore 0 o il valore 1

        perciò si presta a simulare il lancio di una moneta

        (0 si potrà interpretare come “Testa” e 1 come “Croce”, o viceversa)

 

     x:=random(6)+1

      assegnerà alla variabile x uno dei valori 1, 2, 3, 4, 5 o 6

        perciò si presta a simulare il lancio di un dado.

 

Invece la funzione RANDOM, usata senza alcun argomento,

genera un numero pseudocasuale di tipo reale,

compreso fra 0 (incluso) e 1 (escluso). 

 

Esempio:  l’istruzione   y:=random   assegna alla variabile y,

                che deve essere stata dichiarata di tipo reale,

                un valore pseudocasuale  e .

 

COSA VUOL DIRE

“PSEUDOCASUALE”

?

L’aggettivo “pseudocasuale”

esprime il fatto che in realtà,

quando il computer produce

tutta una successione

di numeri di questo tipo

uno dopo l’altro,

quello davvero casuale…

è solo il primo

(detto “il seme”

della sequenza),

perché si basa su di un valore

preso dal clock

nel preciso istante in cui

la procedura viene avviata,

mentre i successivi

vengono calcolati

mediante appositi algoritmi

(scelti in modo tale

da assicurare “l’apparenza”,

ma non dunque la “sostanza”,

della casualità).

                  

 

IMPORTANTE

Occorre ricordarsi, tutte le volte che in un programma Pascal si utilizza una funzione random,

di premettere, dopo il “begin” e prima dell’istruzione che contiene la RANDOM

l’istruzione

RANDOMIZE;

essa ordina al computer di

rendere casuale il seme per la generazione dei numeri pseudocasuali

(a tale scopo viene impiegato un valore fornito in quell’istante dal clock del sistema)

 

E’ un po’ come scuotere preventivamente l’urna da cui si estrarranno le palline;

se non lo si fa, la pallina estratta, quando viene posata,

resterà sempre in superficie e continuerà ad essere ripescata.

 

 

Esercizio 3)

 

Il fratellino deve ripassare le operazioni aritmetiche? Scrivi un programma Pascal che operi nel seguente modo:

 

a)     sul monitor deve comparire la stringa: BAMBINO, CHE OPERAZIONE VUOI FARE? + OPPURE * ?

 

b)     a questo punto, evidentemente, il bambino digiterà il simbolo + o in alternativa il simbolo *

e il computer “leggerà” il carattere scelto (NOTA: dovrai allora prevedere una variabile

di tipo STRING[1], oppure di tipo CHAR, la quale renda possibile la lettura del simbolo);

 

c)     poi il computer deve “estrarre” due numeri interi pseudocasuali x, y, ciascuno compreso fra 0 e 10,

e mandare sul monitor i numeri stessi, separati dall’operazione che il bambino aveva scelto;

quindi, ad esempio,

9*7 =

 

d)     Il bambino scrive la sua risposta, il computer ne valuta la correttezza e manda in output la stringa

GIUSTO!   oppure   SBAGLIATO   a seconda dei casi.

 

Insomma, al termine dell’esecuzione il monitor deve apparire (ad esempio) così:

 

BAMBINO, CHE OPERAZIONE VUOI FARE? + OPPURE * ?

+

6+8=15

SBAGLIATO

 

dove, evidentemente, il bambino ha digitato esclusivamente il simbolo + della seconda riga e il numero 15,

mentre tutto il resto lo ha scritto il computer.