Sei sulla pagina 1di 28

HOEPLI

PAOLO CAMAGNI
RICCARDO NIKOLASSY
Per il nuovo liceo scientico
opzione scienze applicate
3
CORSO DI INFORMATICA
LINGUAGGIO C e C
++
PAOLO CAMAGNI RICCARDO NIKOLASSY
EDITORE ULRICO HOEPLI MILANO
Corso
di Informatica
Linguaggio C e C++
Per il nuovo liceo scientico
opzione scienze applicate
VOLUME 3
Copyright Ulrico Hoepli Editore S.p.A. 2014
Via Hoepli 5, 20121 Milano (Italy)
tel. +39 02 864871 fax +39 02 8052886
e-mail hoepli@hoepli.it
www.hoepli.it
Tutti i diritti sono riservati a norma di legge
e a norma delle convenzioni internazionali
Indice
UNIT DI APPRENDIMENTO 1
Algoritmi di calcolo numerico
L1 Calcolo approssimato della radice
quadrata
Cenni sul calcolo numerico . . . . . . . . . . . . . . . . . . . . . 2
Calcolo della radice quadrata . . . . . . . . . . . . . . . . . . . 3
Metodo alternativo di Newton . . . . . . . . . . . . . . . . . . 6
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 7
L2 Generare numeri pseudocasuali
Processi deterministici e pseudocasuali . . . . . 8
Numeri pseudocasuali in C . . . . . . . . . . . . . . . . . . . . . . 9
Algoritmi che generano le sequenze . . . . . . . . . . 12
Linear Congruential Generator (LCG) . . . . . . . 14
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 17
L3 Calcolo di U e integrazione
con il metodo Monte Carlo
La ricerca di pi greco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Il metodo Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Integrazione numerica con il metodo
Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Il problema della moneta di Buffon . . . . . . . . . . . 26
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 28
L4 Il numero e
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Calcolo del numero e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Ricordare il numero e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 35
L5 Calcolo approssimato del seno
di un angolo con Taylor
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Algoritmo per il calcolo approssimato
del seno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 41
L6 Calcolo approssimato della radice
di una equazione: metodo
di bisezione
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 47
L7 Calcolo approssimato delle aree
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Metodo dei rettangoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Metodo dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Metodo di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . 54
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 57
L8 Le equazioni differenziali
risolte col metodo di Eulero
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Metodo di Eulero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Metodo di Eulero modicato . . . . . . . . . . . . . . . . . . . . 63
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 66
UNIT DI APPRENDIMENTO 2
Applicazioni tecnico-scientiche
in VBA
L1 Lambiente visuale di VBA
per Excel
Visual Basic for Applications . . . . . . . . . . . . . . . . . . . 68
Le macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Lambiente di programmazione di Excel. . . . . 73
Scrivere un programma in VBA . . . . . . . . . . . . . . . . 77
LEditor di VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Struttura di un programma VBA . . . . . . . . . . . . . . . 81
Le variabili e le costanti . . . . . . . . . . . . . . . . . . . . . . . . . 82
Il colloquio con lutente . . . . . . . . . . . . . . . . . . . . . . . . . . 89
I riferimenti di cella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 92
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 94
Indice
IV
Indice
L2 Le variabili e le condizioni
Gli operatori matematici. . . . . . . . . . . . . . . . . . . . . . . . . 95
La condizione logica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Gli operatori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Blocchi annidati nella istruzione
di selezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
La selezione nidicata . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
I codici ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 107
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 109
L3 I cicli in VBA
I cicli in VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
I concetti di accumulatore e contatore . . . . . . 113
La struttura di ripetizione per falso . . . . . . . . . . . 116
La struttura di ripetizione con contatore. . . . 122
Un ciclo dentro a un ciclo:
i cicli annidati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 127
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 131
L4 Il perfezionamento dellinterfaccia
graca
I controlli VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 147
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 149
L5 Applicazioni della statistica
Generazione di risultati casuali per
un torneo calcistico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
La macchina di Galton . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 164
L6 Applicazioni della matematica
Tracciare una retta sul piano cartesiano . . . . 166
Tracciare una funzione con il metodo
per punti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
L7 La crittograa
La crittograa bellica: codice Playfair . . . . . . . . 177
La crittograa bellica: il codice Delastelle. . . 183
UNIT DI APPRENDIMENTO 3
Principi teorici della computazione
L1 Analisi degli algoritmi
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Denizioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Parametri di qualit di un algoritmo . . . . . . . . . . 188
Il modello di costo per il calcolo
del tempo di esecuzione . . . . . . . . . . . . . . . . . . . . . . . 189
Calcolo della complessit in funzione
del passo base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 195
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 196
L2 Complessit asintotica
e notazione O-grande
Complessit asintotica . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Notazione O-grande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Algebra degli O-grandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Equivalenza tra algoritmi . . . . . . . . . . . . . . . . . . . . . . . . 202
Classi di complessit degli algoritmi . . . . . . . . . . 203
Istruzione dominante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 207
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 208
L3 La complessit dei problemi
Algoritmi e problemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Problemi computabili ma intrattabili . . . . . . . . 211
Problemi polinomiali ed esponenziali . . . . . . . 213
La classe NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
La classe P coincide con la classe NP? . . . . . . 216
La classe NPC o NP-completa . . . . . . . . . . . . . . . . . . 217
Risolvere i problemi intrattabili . . . . . . . . . . . . . . . 217
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 218
UNIT DI APPRENDIMENTO 4
Fondamenti di Networking
L1 Introduzione al Networking
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Reti: denizioni e concetti di base . . . . . . . . . . . . 221
Aspetti hardware delle reti . . . . . . . . . . . . . . . . . . . . . . 222
Reti locali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Topologia delle reti locali . . . . . . . . . . . . . . . . . . . . . . . . 224
Reti geograche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Reti wireless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 229
L2 Il trasferimento dellinformazione:
multiplazione e commutazione
La trasmissione delle informazioni . . . . . . . . . . . 230
Generalit sui protocolli . . . . . . . . . . . . . . . . . . . . . . . . . 231
Tecniche di trasferimento
dellinformazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Multiplazione (multiplexing). . . . . . . . . . . . . . . . . . . . 234
Tecniche di accesso o protocolli
di accesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Classicazione delle tecniche
di accesso multiplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
La commutazione (switching) . . . . . . . . . . . . . . . . . . 239
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 243
V
Indice
L3 Larchitettura a strati ISO-OSI
e TCP-IP
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Larchitettura a strati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Il modello OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Il modello Internet o TCP/IP . . . . . . . . . . . . . . . . . . . . 252
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 254
UNIT DI APPRENDIMENTO 5
Internet e il protocollo TCP/IP
L1 Il TCP/IP e indirizzi IP
Cenni storici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
I livelli del TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Formato dei dati nel TCP/IP . . . . . . . . . . . . . . . . . . . . 260
Lintestazione IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Struttura degli indirizzi IP . . . . . . . . . . . . . . . . . . . . . . . 262
Classi di indirizzi IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Reti IP private (RFC 1918) . . . . . . . . . . . . . . . . . . . . . . 265
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 267
Verichiamo le competenze . . . . . . . . . . . . . . . . . . . . . . 268
L2 Congurare un PC: IP statico
e dinamico
Congurazione di un PC in una LAN . . . . . . . . . 269
Assegnazione manuale . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Assegnazione mediante DHCP . . . . . . . . . . . . . . . . . 272
ARP: Address Resolution Protocol . . . . . . . . . . . . 274
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 277
hoepliscuola.it
Inoltro di pacchetti sulla rete:
NAT e ICMP
Premessa
Network Address Translation
PAT
ICMP: Internet Control Message Protocol
Verichiamo le conoscenze
Verichiamo le competenze
UNIT DI APPRENDIMENTO 6
I servizi di rete
L1 Il livello delle applicazioni
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Applicazioni di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Architetture delle applicazioni di rete . . . . . . . 284
Servizi offerti dallo strato di trasporto
alle applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 290
L2 WEB e HTTP
Il World Wide Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Larchitettura del Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Il protocollo HyperText Transfer
Protocol (HTTP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Proxy server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
I cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
HTTPS: Secure HyperText
Transfer Protocol (cenni) . . . . . . . . . . . . . . . . . . . . . 304
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 306
L3 Trasferimento di le: FTP
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Il server e il client FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
La comunicazione FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 318
L4 Posta elettronica in Internet:
SMTP, POP e IMAP
Generalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Invio e ricezione di posta elettronica . . . . . . . . . 322
Il protocollo SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Prelievo della posta: Post Ofce
Protocol (POP3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Protocollo IMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 331
L5 DNS: il Domain Name System
Generalit: nome simbolico
e indirizzo IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Funzioni e caratteristiche
del DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Record DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Messaggi DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Verichiamo le conoscenze . . . . . . . . . . . . . . . . . . . . . . . 343
hoepliscuola.it
Il protocollo Telnet
Generalit
Il protocollo Telnet
Comandi e funzioni standard
La (non) sicurezza di Telnet
Utilizzo di Telnet
Verichiamo le conoscenze
Presentazione
Gli obiettivi principali di questo volume sono due: il primo di favorire la comprensione
dei fondamenti teorici delle scienze dellinformazione, fornendo le basi necessarie per
lacquisizione della padronanza duso degli strumenti dellIT (Information Technology)
idonei alla soluzione di problemi anche connessi allo studio delle altre discipline, il
secondo di rendere lallievo consapevole dei vantaggi e dei limiti delluso degli strumenti e
dei metodi informatici e delle relative conseguenze sociali e culturali di tale uso.
Limpostazione del volume tiene conto delle modiche apportate ai programmi riguardanti il
liceo scientico opzione scienze applicate previsti per il quinto anno della scuola superiore;
abbiamo ritenuto irrinunciabile fare tesoro della nostra esperienza maturata nel corso di
numerosi anni di insegnamento che ci ha resi consapevoli della difcolt di adeguare la
prassi didattica alle dinamiche dellapprendimento giovanile e ai continui cambiamenti
tecnologici che implicano sempre nuove metodologie di comunicazione.
Il volume strutturato in sei unit di apprendimento secondo tre aree tematiche che
recepiscono i nuovi obiettivi specici di apprendimento (OSA) divulgati dal MIUR. Le aree
tematiche sono: i principali algoritmi del calcolo numerico (CS), i principi teorici della
computazione (CS), le tematiche relative alle reti di computer, ai protocolli di rete, alla
struttura di internet e dei servizi di rete (RC) (IS) ed esempi di utilizzo dellinformatica in
applicazioni tecnico-scientiche (CS).
Ciascuna unit di apprendimento suddivisa in lezioni, ognuna delle quali stata progettata
per essere svolta in una o al massimo due lezioni. Lo scopo dellunit di apprendimento
di presentare un intero argomento, mentre quello delle lezioni di esporne un singolo
aspetto.
Presentazione
All'inizio
di ogni lezione sono
indicati in modo
sintetico i contenuti
OBIETTIVI
Conoscere il concetto di applicazione
di rete
lndividuare le tipologie di applicazione
di rete
Avere il concetto di porta e di socket
Conoscere l'architettura peer-to-peer (F2F)
Comprendere il protocollo Telnet
e il suo utilizzo
Conoscere l'architettura gerarchica
del WEB
Comprendere i meccanismi del protocollo
HTTF
Acquisire il Iormato del messaggio HTTF
Conoscere le Iunzioni del client
e del server FTF
ATTIVIT
Utilizzare le principali applicazione di rete
Utilizzare un proxy server per navigare
in modo anonimo
Utilizzare i comandi Telnet
Connettersi con una banca dati remota
utilizzando Telnet
lnviare una email utilizzando Telnet
Acquisire le modalit di collegamento FTF
Utilizzare i comandi FTF
Analizzare i pacchetti HTTF con wireshark
Analizzare i pacchetti SMTF e FOF
con wireshark
6
I SE
R
V
IZI
D
I R
E
TE
UNIT DI APPRENDIMENTO
L 4 Posta elettronica in Internet:
SMTP, POP e IMAP
L 5 DNS: il Domain Name System
L 1 Il livello delle applicazioni
L 2 Web e HTTP
L 3 Trasferimento di le: FTP
hoepliscuola.it
Il protocollo Telnet
UdA 5 Internet e il protocollo TCP/IP
256
LEZIONE 1
IL TCP/IP E GLI INDIRIZZI IP
IN QUESTA LEZIONE IMPAREREMO...
U il confronto tra i livelli ISO/OSI e TCP/IP
U il formato dei dati nel TCP/IP
U la struttura degli indirizzi IP
U le classi degli indirizzi IP
Q Cenni storici Nella prima met degli anni 70 il Ministero della Difesa statunitense DARPA (Defence Advanced
Research Project Agency), nellambito del progetto di una rete di computer che potesse sopravvive-
re anche in caso di attacco bellico, den il modello sul quale si sarebbe poi basato lo sviluppo della
rete Internet.
Questo modello, cui venne dato il nome di Internet Protocol Suite, presenta due protocolli princi-
pali:
Z IP (Internet Protocol);
Z TCP (Transmission Control Protocol).
Proprio da tali protocolli deriva il nome TCP/IP che viene usato per identicare questa architettura
di rete.
Nel 1974 la rete ARPAnet collegava la costa
dellAtlantico con quella del Pacico grazie a un
sistema a commutazione di pacchetto in grado
di connettere elaboratori eterogenei. ARPAnet continu a svilupparsi in ambito uni-
versitario e governativo nel corso di tutti gli anni
70, ma fu nel 1974, con la prima standardizza-
zione del protocollo TCP/IP, che il progetto della
rete venne denominato Internet.
Indice degli obiettivi che si
intendono raggiungere e delle attivit
che si sar in grado di svolgere
Nella pagina iniziale
di ogni unit di apprendimento
presente un indice delle
lezioni trattate
VIII
Presentazione
Le nalit e i contenuti dei diversi argomenti affrontati sono descritti
da obiettivi generali e dalle indicazioni delle diversa attivit che
verranno effettuate in ciascuna unit di apprendimento.
Alla ne di ogni lezione sono presenti esercizi di valutazione delle
conoscenze e delle competenze raggiunte, suddivisi in domande a
risposta multipla, a completamento e inne esercizi con procedure
guidate denominati simulazioni informatiche.
Al libro viene allegato un CD-ROM che contiene i le sorgenti degli
esempi in linguaggio C e VBA nonch il materiale necessario per
eseguire le procedure guidate passo passo degli esercizi svolti e
da svolgere e le simulazioni informatiche.
Le parole chiave vengono
poste in evidenza
e spiegate allo studente
Nel sito http://www.hoepliscuola.it sono disponibili le risorse online, tra cui numerosi esercizi
aggiuntivi per il recupero e il rinforzo, nonch le schede di valutazione di ne unit di
apprendimento.
In questa sezione viene
approfondito un argomento
di particolare importanza
Le osservazioni aiutano
lo studente a comprendere
e ad approfondire
Lo studente pu mettere in pratica
in itinere quanto sta apprendendo
nel corso della lezione
Lambiente visuale di VBA per Excel Lezione 1
69
In Microsoft Access possibile creare nestre di inserimento o di ricerca e ltraggio dati persona-
lizzate.
OLE AUTOMATION
Prima di utilizzare questo linguaggio importante conoscere il signi cato di OLE Automation.
OLE lacronimo di Object Linked and Embedded, (in inglese collegamento e incorporazione
di oggetti). Con OLE Automation si indica lopportunit di far cooperare tra loro pi programmi,
secondo un funzionamento di tipo Client/Server, dove un programma (client), pu richiedere
una risorsa messa a disposizione da un altro programma (server). Il programma server viene
anche detto VBA Compliant, dallinglese compiacente, si intende qualsiasi applicativo in
grado di comunicare e comprendere la sintassi del Visual Basic. In questo modo, parlando una
lingua comune, i vari applicativi possono interagire fra di loro scambiandosi informazioni.
Microsoft
Excel Microsoft
Outlook
Leggere
email Inviare
email
Gestire
contatti
Mediante lOLE Automation possibile effettuare le seguenti operazioni con i programmi del
pacchetto Of ce:
Z inviare email tramite Outlook prelevando gli indirizzi da un database Access, da un documen-
to Word o da un foglio Excel; Z usare le funzioni di Excel allinterno di un documento Word;
Z importare una tabella Excel in un database Access;
Z trasferire un testo scritto in Word in alcune slide di PowerPoint per creare una presentazione;
Z prelevare statistiche da un foglio Excel in un documento di Word.
Zoom su...
Q Le macro
Il registratore di macro un mezzo per memorizzare e riutilizzare le azioni compiute con la ta-
stiera e/o con il mouse, permettendo cos di creare delle procedure automatizzate chiamate macro.
Le macro eseguono sequenze di azioni molto pi rapidamente di noi. Macro Una macro pu essere de nita come un insieme di istruzioni, detto codice. Il codice scritto
in linguaggio Visual Basic for Applications (VBA) ed in grado di eseguire azioni descritte appunto
dalla sequenza di istruzioni che la compongono. La parola macro deriva dal termine informatico ma-
croistruzione che identi ca una istruzione molto potente formata da pi istruzioni.
Analisi degli algoritmi Lezione 1
189
CRITERI DI EFFICIENZA
Possiamo utilizzare fondamentalmente quattro parametri in grado di permetterci di va-
lutare la bont o meno degli algoritmi, detti criteri di ef cienza:
Z il tempo impiegato (complessit temporale);
Z lo spazio utilizzato (complessit spaziale);
Z la quantit e la modalit di input/output;
Z il tempo di trasmissione.
La complessit temporale indica sostanzialmente il tempo impiegato dallesecuzione dellalgorit-
mo.
La complessit spaziale si riferisce alla dimensione del programma, cio alloccupazione di me-
moria richiesta durante lesecuzione di un algoritmo, sia nella memoria centrale sia nella memo-
ria di massa.
La complessit di I/O (input/output) tiene conto del tempo impiegato per lacquisizione o il trasfe-
rimento dei dati con le periferiche: memoria secondaria, tastiera, stampante ecc.
La complessit di trasmissione misura lef cienza di I/O di un algoritmo rispetto a stazioni re-
mote (altri computer, memorie sicamente lontane ecc.).
In generale i criteri di ef cienza pi utilizzati per determinare la bont di un algoritmo sono i
primi due, cio il tempo di elaborazione e la quantit di memoria (soprattutto centrale) utiliz-
zata da un algoritmo.
Rispetto al primo gruppo di parametri soggettivi, i criteri di efficienza possono essere
calcolati con precisione e calcolati a priori, senza necessariamente eseguire il pro-
gramma.
Come precedentemente accennato utilizzeremo la complessit temporale per effettuare la classi -
cazione degli algoritmi.
Sar quindi necessario individuare le modalit per effettuare il calcolo del tempo di esecuzione di
un algoritmo A, che indicheremo come complessit di tempo A.
COMPLESSIT DI TEMPO
Studiare la complessit di tempo di un algoritmo signi ca stimare la quantit di tempo
che occorre alla CPU per eseguire il corrispondente programma.
Vedremo, nel seguito della trattazione, come la complessit di tempo di un algoritmo risulti essere
un ottimo parametro per scegliere il migliore tra due o pi algoritmi che risolvono lo stesso proble-
ma, e costituir la base per poter generalizzare il discorso e passare dalla complessit di calcolo di
un algoritmo A alla complessit di calcolo del problema U.
Q Il modello di costo per il calcolo del tempo di esecuzione
Possiamo calcolare il tempo di esecuzione di un algoritmo cronometrandone lesecuzione su alcune
istanze e quindi riportandone i risultati ottenuti in una tabella per effettuare il confronto, come nel
seguente esempio.
Lambiente visuale di VBA per Excel Lezione 1
77
Per modi care una propriet si procede scriven-
do il nuovo valore nella casella di testo relativa.
Per modi care il testo del pulsante si modi ca la
propriet Caption, scrivendo il nuovo testo (ad
esempio Prova) nella casella accanto a Cap-
tion, confermando con il tasto Invio.
Attiva la barra di accesso rapido Controlli e Codice.
Inserisci un pulsante nel foglio di lavoro.
Assegna al pulsante il testo Primo esempio (propriet Caption).
Assegna al pulsante il colore blu scuro (propriet BackColor).
Modi ca il colore del testo del pulsante (propriet ForeColor, colore bianco).
Modi ca il tipo di carattere del testo del pulsante (propriet Font, Georgia, 16).
Attiva la nestra del codice (Visual Basic Editor).
Tornare nel foglio di lavoro.
Disattiva la Modalit progettazione.
Fai clic sul pulsante per veri care il programma.
Salva il le.
Prova adesso!
U Attivare la modalit progettazione
U Disattivare la modalit progettazione
U Attivare la Casella degli strumenti
gra ci
U Inserire un oggetto gra co
ed eseguirlo
Q Scrivere un programma in VBA
Un programma realizzato in linguaggio VBA pu essere eseguito in due modi diversi:
Z tramite un evento legato al foglio di lavoro (ad esempio un pulsante sul quale avviene un click);
Z scrivendo il codice direttamente in un modulo di Visual Basic Editor.
Per scrivere un programma legato ad un evento, in questo caso un click su di un pulsante, proce-
diamo nel seguente modo:
fare clic sullicona Modalit progettazione;
scegliere loggetto gra co pulsante di comando dal gruppo Controlli e trascinarlo sul foglio di
lavoro;
fare doppio clic sulloggetto trascinato per attivare il Visual Basic Editor;
a questo punto scrivere codice seguente tra le righe Sub e End:
MsgBox Salve a tutti
MsgBox Mi presento: sono un programma scritto in VBA
MsgBox Premete Ok per tornare nel foglio di lavoro
per provare il programma necessario tornare in Excel, facendo clic sul pulsante;
tornare al foglio di lavoro usando la combinazione di tasti Alt + F11;
UdA 1 Algoritmi di calcolo numerico
28
Veri chiamo le competenze
g
Esercizi
1 Scrivi un programma che riceve in input il numero delle prove che deve eseguire e quante volte deve ripeterle.
Quindi visualizza sullo schermo una tabella che riassume tutti i risultati ottenuti.
2 Calcola il valore di U per diversi valori di n (anche no a n ~ 50000 ) e costruisci una tabella in modo da poter
comparare i risultati per analizzare la velocit di conversione di questo metodo.
3 Invece del numero di punti in {x2 + y 2 f 1}, conta il numero di punti in {x2 + y2 f 1/2}. A quale numero converge?
Converge pi o meno velocemente del metodo precedente?
4 In riferimento al calcolo dellintegrale della funzione

( )
3 2 1 152 2
1
5
f x dx
x x
A
B

=
+ + =
Scrivi un algoritmo che esegue 5 diversi calcoli variando volta per volta il numero di punti e completa la tabella
di seguito riportata.
Numero di punti
Valore calcolato
Errore % sul calcolo dellintegrale
500
10.000
100.000
1.000.000
5 Possiamo veri care un integrale dif cilmente calcolabile: lintegrale di Gauss (integrale che si presenta nello
studio della densit di probabilit per variabili aleatorie continue):

2
e dx x

+
La curva la seguente:
1
2
1
2
3
2
0
0
1
Osservandola deduciamo che possiamo studiare solo mezza gura, quella nel primo quadrante, e considerare il
rettangolo di altezza unitaria e di base ad esempio 3 (e non in nita!).
6 Prova a calcolare col metodo Monte Carlo il volume di una sfera unitaria.
7 Generalizza il problema di Buffon utilizzando piastrelle di forma rettangolare qualsiasi avente lati 2a e 2b: dopo
aver ricavato lespressione analitica, veri ca il risultato applicando il metodo Monte Carlo.
Generare numeri pseudocasuali Lezione 2
17
Veri chiamo le competenze
g Esercizi
1 Un algoritmo proposto da Knuth nel 1981 pu essere visto come una variante del metodo lineare congruenziale:
i termini pseudocasuali si ottengono dalla seguente espressione:
xn+1 = (ax2
n + bxn + c) % m
La presenza di termini con esponente 2 d al metodo il nome di congruenza quadratica.
Scrivi un programma con i seguenti parametri iniziali: x0 = 2, a = 2, b = 3, c = 1, m = 10 e confronta i primi 10
termini con quelli generati dal metodo lineare.
2 Scrivi un programma che, utilizzando il metodo lineare congruenziale, distribuisca le carte per un torneo di
tresette, assegnando ad ogni smazzata un numero identi cativo in modo che questa possa successivamente
essere rigiocata da un altro tavolo.
(Nel gioco del tresette ogni giocatore riceve 10 carte e le suddivide per seme e quindi le dispone in ordine
decrescente secondo la seguente regola: 3,2,1,K,Q,J,7,6,5,4).
Visualizza a schermo le carte in mano ai quattro giocatori.
3 Scrivi un programma che, utilizzando il metodo lineare congruenziale, effettui la simulazione del lancio di un
dado per N = 10000 e visualizzi listogramma delle frequenze in almeno 3 terne diverse di valori dei coef cienti.
Osservando i risultati, quali osservazioni possono essere fatte sui semi e sul coef ciente a?
Ripeti ora lesecuzione del programma ponendo c = 0 in ogni situazione: quali osservazioni puoi fare?
4 Crea un vettore di 20 elementi di valori random usando il metodo di congruenza lineare con m = 231 1 a = 75 c = 0.
Considerando che ogni numero pu essere permutato con qualsiasi altro numero con probabilit uniforme,
effettua n = 15 permutazioni e confronta a video i risultati.
5 Scrivere un programma che effettui la simulazione del lancio contemporaneo di due dadi e riportare in una
tabella come la seguente i risultati ottenuti al variare del numero di lanci.
Probabilit
con N = 500
Probabilit
con N = 3000
Probabilit con N = 10.000
Probabilit con N = 50.000
Probabilit con N = 1.00000
2
3

12
Traccia per la soluzione Effettuando il lancio di due dadi e sommando successivamente i risultati si ottengono le seguenti combinazioni:
1 2 3 4 5 6
1 2 3 5 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 8
4 5 6 7 8 9 10
5 6 7 8 9 10 11
6 7 8 9 10 11 12
Per la verica delle conoscenze
e delle competenze presente
un'ampia sezione di esercizi
Il signicato di
moltissimi termini
informatici viene illustrato e
approfondito
hoepliscuola.it
OBIETTIVI
Comprendere le basi del calcolo numerico
Acquisire il concetto di numeri
pseudocasuali
Saper utilizzare le Iunzioni di libreria del C
Ripercorrere nella storia la ricerca del
valore di U
Saper risolvere il problema della moneta
di BuIIon
Utilizzare i polinomi di Maclaurin e di
Taylor per approssimare la Iunzione sen(x)
Conoscere i concetti Iondamentali sul
calcolo approssimato delle aree
Conoscere i concetti Iondamentali sui
metodi di discretizzazione
ATTIVIT
CodiIcare l'algoritmo babilonese
per il calcolo della radice quadrata
CodiIcare l'algoritmo alternativo
di Newton
Generare i numeri pseudocasuali
con l'algoritmo LCG
Utilizzare il metodo Monte Carlo
per il calcolo delle aree
CodiIcare l'algoritmo approssimato
per il calcolo di sen(x)
lmplementare il metodo di bisezione
lmplementare il metodo del punto centrale
lmplementare il metodo dei rettangoli
lmplementare il metodo dei trapezi
lmplementare il metodo di Cavalieri-
Simpson
lmplementare il metodo di Eulero
e del punto centrale
L 1 Calcolo approssimato
della radice quadrata
L 2 Generare numeri
pseudocasuali
L 3 Calcolo di U e integrazione
con il metodo Monte Carlo
L 4 Il numero e
1
ALGORITMI DI
CALCOLO
NUMERICO
UNIT DI APPRENDIMENTO
L 5 Calcolo approssimato del seno
di un angolo con Taylor
L 6 Calcolo approssimato della
radice di una equazione:
metodo di bisezione
L 7 Calcolo approssimato delle aree
L 8 Le equazioni differenziali
risolte col metodo di Eulero
UdA 1
2
CS U l}oimi `i V>lVolo nmiiVo
LEZIONE 1
CALCOLO APPROSSIMATO
DELLA RADICE QUADRATA
IN QUESTA LEZIONE IMPAREREMO...
U le basi del calcolo numerico
U l>l}oimo L>Lilonii i il V>lVolo `ill> >`iVi >`>>
U l>l}oimo >lin>io `i ion
Q Cenni sul calcolo numerico
La matematica svolge un ruolo determinante nellanalisi dei problemi del mondo reale e il processo
di soluzione associa al problema reale un mo`illo m>im>iVo che ne approssima la soluzione:
molto spesso, per il mo`illo m>im>iVo che si ottiene non esprimibile con funzioni elementari,
ma con sistemi complessi che richiedono luso di metodi di calcolo approssimato: questi metodi
prendono il nome di mio`i `i V>lVolo nmiiVo.
Sono caratterizzati da algoritmi che consentono di ottenere una soluzione del problema in forma
>oim>> (con il grado di precisione generalmente legato al numero delle iterazioni e quindi al
tempo di calcolo) del problema specico producendo un valore altrimenti impossibile da determi-
nare con mio`i >l}iLiVi.
Lo schema di calcolo generalmente abbastanza semplice ma richiede numerosi calcoli ripe-
titivi, e il calcolatore si presta bene alla loro esecuzione.
Il V>lVolo >oim>o viene utilizzato sia quando non esistono algoritmi esatti di risoluzione,
sia quando gli algoritmi esatti non sono efcienti avendo un alto costo computazionale in termini
di tempo o di memoria; inoltre gli algoritmi numerici approssimati si sono dimostrati in grado di
calcolare approssimazioni delle soluzioni con maggiore velocit e precisione rispetto ad algoritmi
derivati dal metodo algebrico esatto.
In alcuni casi, pur esistendo algoritmi algebrici per la determinazione di soluzioni esatte, la dimen-
sione del problema rende comunque necessario il ricorso a un programma di calcolo: si pensi ad
esempio alla ricerca della soluzione di un sistema lineare composto da molte equazioni e molte
incognite (in natura molti problemi reali hanno come modello matematico sistemi lineari con cen-
tinaia di equazioni e centinaia di incognite!).
>lVolo >oim>o `ill> >`iVi >`>> U CS Lezione 1
3
Le tecniche utilizzate dagli algoritmi approssimanti o algoritmi euristici si basano su tecniche di:
Z `iVii>ioni: passaggio da domini continui a domini discreti;
Z >oim>ioni VViii: metodi iterativi.
Come primo esempio di metodo iterativo descriveremo un noto algoritmo per il calcolo della radice
quadrata.
ALGORITMO NUMERICO
In sintesi un algoritmo numerico approssimato viene utilizzato:
Z per calcolare lapprossimazione di un valore numerico non altrimenti determinabile
con metodi algebrici;
Z per calcolare lapprossimazione di un valore numerico non facilmente determinabile
in forma esatta con metodi algebrici;
Z per calcolare lapprossimazione di un valore numerico con una precisione maggiore rispetto a
un algoritmo ottenuto come implementazione di un metodo algebrico esatto.
Q Calcolo della radice quadrata
Qualsiasi calcolatrice ha a disposizione la funzione che calcola il valore approssimato della radice
quadrata di un qualsiasi numero con laccuratezza di molte cifre decimali: questo valore viene cal-
colato grazie a un semplice algoritmo di calcolo numerico che ripete per un numero denito di volte
alcune semplici operazione aritmetiche.
Vediamo di descrivere lorigine di questo algoritmo: calcoliamo la radice quadrata di un numero
positivo n, cio " x n. Scegliamo a piacere un numero x
0
sicuramente maggiore di n che sar la
prima approssimazione per eccesso del valore cercato.
Per esempio prendiamo " x
n
2
0
.
Calcoliamo ora un secondo valore con la seguente formula: y
0
=
n
x
0
e quindi sar n = x
0
y
0
dove la
media geometrica tra x
0
e y
0
viene presa come il primo valore che approssima per difetto la n, che
calcoliamo con la seguente espressione:
=
+
= +

x
x y
x
n
x 2
1
2
1
0 0
0
0
La media aritmetica di due numeri sempre maggiore o uguale alla loro media geometrica, quin-
di il numero x
1
ottenuto sar sempre compreso tra n e x
0
e approssimer meglio la radice
ricercata rispetto al valore x
0
precedentemente assunto, dato che x
0
> x
1
> n.
y
0
x
1
x
0
n
Ripetendo la medesima operazione pi volte otteniamo una sequenza di numeri che convergono
proprio alla n:
dapprima calcoliamo
" y
n
x
1
1
quindi
x
x y
x
n
x 2
1
2
2
1 1
1
1
=
+
= +

UdA 1 CS U l}oimi `i V>lVolo nmiiVo


4
Generalizzando i passi descritti in precedenza possibile dimostrare per induzione che:
=

x n lim
i
i
R = 9
Q1 = 9/2 = 4,5
Q2 = (4,5 + 9/(4,5))/2 = (6,5)/2 = 3,25
Q3 = (3,25 + 9/(3,25)) = (3,25 + 2,769)/2 = (6,019)/2 = 3,0095
Questo algoritmo anche conosciuto come algoritmo babilonese anche se spesso viene
attribuito a matematici posteriori, come Vhi> (428-365 a.C.) oppure a oni `i li>n-
`i> (vissuto tra il I e II secolo d.C.)
Scriviamo ora il codice dellalgoritmo che calcola + r>`iVinm.
Inizializziamo la prima iterazione al valore
num
2
e in un ciclo che viene ripetuto max = 10 volte
calcoliamo i successivi termini con Q = QPrec +
num
Qprec
e assegniamo questo valore come QPrec
per ripetere le operazioni.
Scriviamo dapprima la funzione >`iVi che verr successivamente richiamata dal m>in:
Il codice elementare e non richiede spiegazioni aggiuntive.
ESEMPIO 1
>lVolo >oim>o `ill> >`iVi >`>> U CS Lezione 1
5
Visualizziamo il valore calcolato dal nostro algoritmo e quello calcolato dalla funzione di libreria per
effettuare il confronto:
Si pu osservare che gi dopo sole 10 iterazioni i risultati coincidono per valori di n inferiori a 45.000.
Allaumentare di n aumenta lintervallo e quindi i due valori si discostano sempre di pi.
Modica il programma facendo in modo che lutente inserisca il numero di iterazioni che devo-
no essere eseguite: compila una tabella indicando lerrore che si commette per dieci unit di
misura diverse sia come numero di iterazioni che come valore da calcolare.
Prova adesso!
Se con numeri bassi il risultato viene ottenuto con poche iterazioni necessario migliorare lalgo-
ritmo introducendo una seconda condizione duscita che effettua il controllo sullentit del miglio-
ramento effettuato a ogni passo, cio confronta due iterazioni successive.
Indichiamo con =

errore
Q Qprec
Q
e stabiliamo un parametro EPS=0,00001 come valore di errore
minimo al di sotto del quale lelaborazione deve terminare.
Il nuovo algoritmo il seguente:
UdA 1 CS U l}oimi `i V>lVolo nmiiVo
6
Il controllo dellerrore viene effettuato calcolando il valore assoluto della differenza dei valori
approssimati per difetto e per eccesso e confrontandolo con il massimo errore accettabile
rappresentato dalla costante EPS.
Rimane invariato il programma chiamante:
Q Metodo alternativo di Newton
Un metodo alternativo quello proposto da Newton che utilizza la successione:
= =

+
x x
a
x
x ax 3
2 2
3
2
n n n
n n
1
3
3
che ha come limite il valore x =
a
1
.
Possiamo quindi scrivere un algoritmo iterativo utilizzando tale formula, ma necessario conoscere
un valore stimato che funga da primo termine della successione e questo valore pu essere lo stesso
utilizzato nellalgoritmo babilonese prima descritto.
1 Scrivi un programma che acquisisca dallutente il valore della precisione EPS compresa tra
0,1 e 0,000001 e quindi il valore di a per il quale si deve calcolare la radice, vericando che
questo sia positivo.
2 Utilizzando un valore a piacere di x
0
, realizza 2 iterazioni con il metodo babilonese per calco-
lare x
2
quindi scrivi lalgoritmo che utilizzi il nuovo metodo iterativo che assegna come valore
iniziale 1/x
2
.
Prova adesso!
>lVolo >oim>o `ill> >`iVi >`>> U CS Lezione 1
7
Verichiamo le competenze
g
Esercizi
1 ModiIca l'algoritmo in modo che l'utente scelga il numero massimo di iterazioni e la precisione desiderata,
quindi visualizzi a ogni iterazione l'errore che viene commesso.
lntroduci anche un controllo sui numeri inseriti che devono essere positivi.
2 Scrivi un nuovo programma dove viene inserito dall'utente anche il primo termine x
0
: analizza il comportamento
dell'algoritmo al variare di tale valore.
3 Scrivi un programma che acquisisca dall'utente il valore della precisione EFS desiderata compresa tra 0,1 e
0,000001 (veriIcando la correttezza dell'inserimento) ed il valore del numero del quale si vuole calcolare la
radice, veriIcando che sia positivo.
Esegui il calcolo della radice mediante l'algoritmo babilonese terminando l'elaborazione quando si raggiunge
il valore dell'errore e visualizzando sullo schermo il numero delle iterazioni che sono state Iatte.
4 Scrivi un programma che acquisisca dall'utente il valore della precisione EFS desiderata compresa tra 0,1
e 0,000001 (veriIcando la correttezza dell'inserimento) ed il valore del numero a > 10
6
del quale si vuole
calcolare la radice, veriIcando che sia positivo e rispetti la condizione desiderata.
Esegui il calcolo della radice mediante entrambi gli algoritmi conIrontando i valori per ogni ordine di grandezza
dell'errore.
5 ModiIca l'esercizio precedente in modo che esegua automaticamente la ricerca della radice di un numero
a > 10
6
con entrambi i metodi descritti al variare del valore della precisione EFS desiderata a partire da 0,1 In
ad arrivare a 0,0000001, ogni volta diminuendo EFS di 10 volte.
Costruisci una tabella visualizzando le sette coppie di valori ottenuti.
Ripeti l'elaborazione per almeno 10 volte: quali osservazioni si possono Iare?
UdA 1
8
CS AIgoritmi di caIcoIo numerico
LEZIONE 2
GENERARE NUMERI
PSEUDOCASUALI
IN QUESTA LEZIONE IMPAREREMO...
cosa sono i numeri pseudocasuali
a utilizzare le funzioni di libreria del C
a generare i numeri pseudocasuaIi con I'aIgoritmo LCG
Q Processi deterministici e pseudocasuali
Il funzionamento di un computer un oVio `iiminiiVo dettato da leggi rigide e completa-
mente determinato dalle condizioni iniziali e questo comporta che molto difcile ottenere vera
V>>liD (ossia eventi statisticamente non predicibili). In molte applicazioni, come:
Z esperimenti statistici;
Z analisi di algoritmi;
Z simulazione di sistemi stocastici;
Z analisi numerica basata su metodi Monte Carlo;
Z algoritmi probabilistici;
Z computer games;
Z crittograa;
Z protocolli di comunicazione sicuri;
Z gambling machines;
Z virtual casino;
di fondamentale importanza la generazione di numeri casuali (anche chiamati RNG, random
number generator).
Un esempio di V>>liD lo si ottiene dal l>nVio `i n `>`o: limprevedibilit del numero ottenu-
to come punteggio, compreso tra 1 e 6, conferisce allo stesso una forma di V>>liD.
Lidea di utilizzare un calcolatore per generare un nmio V>>li, quindi imprevedibile, sembra
costituire una sda impossibile ma viene superata facendo generare al calcolatore numeri quasi
casuali detti numeri pseudocasuali, ottenuti da algoritmi numerici deterministici in grado di supe-
rare una serie di test statistici che conferiscono a tali numeri una apparente casualit.
ini>i nmii i`oV>>li U CS Lezione 2
9
Un processo pseudocasuale pi facile da produrre di uno completamente casuale e pu essere
usato per ricreare molte volte la stessa sequenza di numeri, che trova anche una utile applicazione
proprio a favore dei programmatori, per effettuare il collaudo del software con sequenze di numeri
di input come dati di prova.
Lalgoritmo che genera i numeri pseudocasuali, anche detto pseudo-random numbers generator, ha
per una caratteristica: la successione di numeri generati da questo algoritmo inizier a ripetersi
prima o poi ed il numero di elementi della sequenza prima che intervenga una ripetizione detto
periodo della sequenza.
Maggiore la lunghezza di tale periodo e maggiore la bont del generatore di numeri
pseudocasuali.
Inoltre la sequenza non veramente casuale ma completamente determinata da un piccolo insieme
di valori iniziali e da un singolo valore davvero casuale chiamato seme (seed) della sequenza, che a
volte viene considerato come primo elemento della sequenza.
Usando due volte lo stesso seme si ottiene la stessa sequenza di numeri!
Quindi lunico elemento puramente aleatorio il seme, che pu essere inserito manualmente dallu-
tente oppure ottenuto dai dati casuali presenti nella macchina, come il numero di le presenti, il
numero di battute della tastiera, lora di sistema ecc.
Q Numeri pseudocasuali in C
Il linguaggio C mette a disposizione due funzioni di libreria per generare sequenze di numeri pseu-
docasuali:
Z la funzione srand(int seme)per inizializzare la sequenza;
Z la funzione rand()per generare un numero della sequenza.
Il seguente esempio (V>>liV) genera un numero casuale a partire dal seme 69:
PROCESSO PSEUDOCASUALE
Un processo pseudocasuale un processo che sembra essere casuale ma non lo .
Una sequenza pseudocasuale sembra possedere V>>liD >iiV> anche se viene ge-
nerata da un processo interamente deterministico.
UdA 1 CS U l}oimi `i V>lVolo nmiiVo
10
Possiamo generare casualmente il seme prendendo dallorologio di sistema il numero di secondi
trascorsi dalla mezzanotte del 1/1/1970 (data presa come Epoca di riferimento per i PC) allora cor-
rente mediante la funzione imi (con argomento NULL).
Il codice memorizzato nel le V>>liV riportato di seguito:
Dobbiamo ricordarci di includere la libreria imih.
Mandando in esecuzione il programma pi volte viene generato sempre un numero diverso (se
aspettiamo qualche secondo a rimandare in esecuzione il programma!).
Modica il programma facendo generare una sequenza di numeri leggendo il valore da input in
modo da ottenere un output simile al seguente.
Confronta la tua soluzione con il codice riportato nel le iiViioV
Prova adesso!
Numero casuale in un range
Come visto nellesercizio precedente i numeri casuali hanno valori abbastanza grandi: nelle nostre
applicazioni spesso per sono richiesti numeri piccoli (ad esempio la generazione dei numeri per la
tombola, della roulette, di un mazzo di carte) e compresi in un dato intervallo (range).
Utilizziamo loperazione di modulo % per restringere il range, ricordando che loperatore % restitui-
sce il resto della divisione tra interi.
ini>i nmii i`oV>>li U CS Lezione 2
11
Generazione dei numeri causali per la tombola
Generiamo i numeri per la tombola, che devono avere un range [1, 90].
Con
rand() % 90
si denisce lintervallo dei numeri nel range [0, 89]; ora se aggiungiamo un offset ottenendo:
(rand() % 90) + 1
si denisce lintervallo dei numeri nel range [1, 90].
Vediamo ora il codice completo che denisce numeri compresi tra 50 e 149:
Il codice memorizzato nel le V>>liV.
Scrivere un programma che chieda allutente ampiezza e offset di un range e poi stampi 3 nu-
meri casuali in quel range.
Confronta la tua soluzione con il codice riportato nel le esercizio2.c
Nota che srand() va usato una sola volta, prima del primo utilizzo di rand().
Prova adesso!
ESEMPIO 2
UdA 1 CS U l}oimi `i V>lVolo nmiiVo
12
Q Algoritmi che generano le sequenze
Non tutti gli algoritmi che generano sequenze di numeri sono buoni algoritmi da utilizzarsi nelle
nostre applicazioni.
I requisiti richiesti a un buon algoritmo di generazione che i numeri generati:
Z siano uniformemente distribuiti;
Z non siano correlati;
e che lalgoritmo:
Z sia riproducibile;
Z sia portabile;
Z abbia un lungo periodo;
Z sia computazionalmente veloce.
Tra tutti i parametri i pi signicativi utilizzati per valutare la bont sono la casualit della
sequenza e il periodo del generatore.
La valutazione del periodo viene semplicemente misurata in termini di lunghezza, mentre pi
complesso stabilire se i numeri sono generati con buona casualit.
Vediamo un esempio che ci conferma la difcolt di valutazione di questo parametro: prendiamo
come esempio due serie di 1 e 0.
0, 1, 0, 1, 0, 1, 0, 1, 0, 1...
1, 1, 0, 1, 0, 1, 1, 0, 0, 1, ...
A intuito, la seconda serie sembrerebbe migliore della prima in quanto in questa si riconosce una
certa periodicit che invece non viene riscontrata nella seconda, quindi la disposizione nella prima
sequenza prevedibile mentre nella seconda quindi pi casuale.
Ma nessuno esclude che la prima serie potrebbe essere generata dallalternanza del rosso e del nero
in una roulette o dal lancio di una moneta oppure da un algoritmo!
necessario introdurre dei criteri oggettivi che permettano la valutazione della casualit; i pi
utilizzati sono quelli di Turing e di von Neumann.
Vediamo come possibile avere questa indicazione mediante listogramma delle frequenze.
Istogrammi di frequenza
Utilizziamo un generatore di numeri pseudocasuali con valore compreso tra 0 e 1 e suddividiamo linter-
vallo di variabilit ad esempio in M = 50 sotto intervalli di pari ampiezza (range/nr. intervalli = 1/50 = 0,2).
CRITERI DI CASUALIT
Z Criterio di Turing:
se una sequenza numerica generata da estrazioni meccaniche apparentemente indi-
stinguibile da quella generata da un algoritmo, allora anche questultima pu conside-
rarsi casuale.
Z Criterio di von Neumann:
si basa su procedimenti matematici che determinano la distribuzione dei numeri generati in quan-
to lipotesi che ogni numero casuale sia equiprobabile e dunque lestrazione di N numeri diversi
deve dare come risultato una distribuzione uniforme.
ini>i nmii i`oV>>li U CS Lezione 2
13
Calcoliamo ora il numero di valori che cadono in ciascun intervallo con la generazione di un nu-
mero elevato di numeri casuali, ad esempio N=10000.
Teoricamente, in caso di equidistribuzione, si dovrebbe avere una frequenza costante pari al rap-
porto tra il numero di lanci e il numero di intervalli, cio
" " " " valoreteorico
Nr lanci
Nr intervalli
N
M
.
.
10000
50
200
Riportando gracamente i risultati ottenia-
mo ad esempio la situazione di gura:
Dal confronto dei graci possibile indi-
viduare lalgoritmo che pi si avvicina al
valore teorico e quindi risulta avere una
maggior equiprobabilit nella generazione
dei numeri.
Correlazione
Non dobbiamo per trascurare anche la possibilit di correlazione tra sequenze o parti di sequenze
generate: infatti necessario che due numeri consecutivi non abbiano nessun legame tra loro, cio
non siano dipendenti e quindi la casualit sia completa e anche questa richiesta deve essere soddi-
sfatta da un buon algoritmo di generazione.
Un semplice graco ci permette di valutare la correlazione tra due numeri adiacenti: sempre in rife-
rimento a un insieme di numeri N ad esempio di range [0; 1] consideriamo un piano dove le coppie
di numeri adiacenti sono utilizzate come ascissa e ordinata di un punto P
i
(x
n
, x
n+1
).
Abbiamo quindi un insieme di punti di coordinate P
i
(x
n
,x
n+1
)
In questo graco non dovranno comparire linee, forme o altre strutture regolari ma punti
distribuiti omogeneamente a caso nel piano.
Osserviamo le gure seguenti dove sono presenti 1000 punti:
0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1
250
200
150
100
50
0
valore teorico
UdA 1 CS U l}oimi `i V>lVolo nmiiVo
14
Il primo graco rappresenta un generatore con distribuzione ottimale mentre il secondo, dato che i
punti sono disposti su rette, sicuramente produce sequenze correlate e prevedibili.
Questi due graci sono ottenuti dal medesimo algoritmo generatore, lLCG che sar di se-
guito descritto: la differenza tra le due situazioni dovuta ai parametri di settaggio della
formula generatrice.
Q Linear Congruential Generator (LCG)
Uno dei pi noti algoritmi per la generazione di numeri pseudocasuali il metodo congruenziale
proposto dal matematico D.H. Lemer nel 1948: prende il nome di generatore lineare congruenziale
o pi brevemente LCG che a tuttoggi ancora utilizzato.
Il metodo LCG ha bisogno di un seme per inizializzare la sequenza di numeri secondo la seguente
regola
x
n
= (ax
n1
+ c) mod m
Dove:
1 x
n
ln-esimo numero casuale generato;
x
n1
il seme o il valore di partenza.
2 a, c, ed m sono costanti (m > ; < a < m; < c < m; x
0
< m); tipicamente m 2
32
oppure 2
64
Esistono delle relazioni tra di essi:
Z c ed m sono primi fra loro;
Z a q divisibile per tutti i fattori primi di m;
Z a q un multiplo di 4 se m un multiplo di 4.
Calcolo di 16 numeri con il metodo LCG
Vediamo un esempio utilizzando i seguenti valori: LCG (a, c, m, x
0
) = LCG(5,1,16,1)
Il primo termine il seme della sequenza; calcoliamo i successivi termini.
x
2
= (ax
1
+ c) % m = (5x
1
+ 1) % 16 = 6
x
3
= (5x
2
+ 1) % 16 = 15
x
4
= (5x
3
+ 1) % 16 = 12
E via di seguito no a ottenere i seguenti 16 numeri:
seme iniziale = 1
sequenza
9
1
1
9
2
3
4
5
6
7
8 10
11
12
13
14
15
16
14 8
11 7
4 2
5 13
12 10
3 15
0 6
ESEMPIO 3
ini>i nmii i`oV>>li U CS Lezione 2
15
Lalgoritmo il seguente
Il codice memorizzato nel le V>>li{V.
Mandandolo in esecuzione con i parametri prima indicati otteniamo:
1 Scrivi un algoritmo che, leggendo a, c ed m (m > 10), visualizzi i primi 10 termini generati
ripetendo la medesima generazione con seme compreso tra 1 e 5.
Loutput che ottieni con a = 1, c = 1 e m = 10 il seguente:
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
Prova adesso!
UdA 1 CS U l}oimi `i V>lVolo nmiiVo
16
Il problema della scelta dei migliori valori per a, c ed m quindi il punto cruciale del metodo.
Alcuni studiosi analizzando le sequenze generate hanno individuato alcuni valori per a, c ed m per
i quali il metodo funziona particolarmente bene:
Z Knuth: m = 2
31
; a = int(10
8
); c = 453806245
Z Goodman e Miller m = 2
31
1; a = 7
5
; c = 0 (terna di valori migliori e pi utilizzata)
Z Gordon m = 2
31
; a = 5
13
; c = 0
Z Leormont e Lewis m = 2
31
; a = 2
16
+ 3; c = 0
possibile osservare come tutti utilizzano per m lo stesso valore di 2
31
: questo garantisce un
periodo di 2
31
2 = 2.147.483.646 ossia oltre 2 miliardi di numeri pseudocasuali!
Si pu dimostrare che il seme deve essere un numero primo per ottenere il massimo periodo.
Il primo diagramma di correlazione riportato in precedenza stato ottenuto con i parametri di Goodman
mentre il secondo con la terna m = 31, a = 13 e c = 0.
NUMERI RANDOM IN C++
La famiglia dei generatori >n`{n (di cui fa parte la funzione `>n`{n) genera numeri pseudo-
casuali usando un algoritmo LCG che lavora su interi di 48 bit.
La formula utilizzata quella descritta precedentemente, cio
r
n
= ar
n1
+ c mod m
che genera un numero pseudocasuale r
n
.
Vengono generalmente utilizzati i seguenti valori:
Z i valori di default per le tre costanti sono:
a 0x5deece66d (25214903917)
c 0xb (11)
m 248
Z il primo valore, cio il seme, r(0), e viene passato come parametro.
imio
`>n`{n restituisce un numero pseudo casuale
>n`{nlong seed) assegna il seed r(0)
Zoom su...
2 Osserva che tutti i 10 numeri (valore di m) sono stati generati: la sequenza con questi para-
metri non proprio casuale, ma modicando i parametri, per esempio con a = 1, c = 7 e
m = 10, si ottiene:
7 4 1 8 5 2 9 6 3 0
8 5 2 9 6 3 0 7 4 1
9 6 3 0 7 4 1 8 5 2
0 7 4 1 8 5 2 9 6 3
1 8 5 2 9 6 3 0 7 4
Qual la funzione del seme?
ini>i nmii i`oV>>li U CS Lezione 2
17
Verichiamo le competenze
g
Esercizi
1 Un algoritmo proposto da Knuth nel 181 pu essere visto come una variante del metodo lineare congruenziale:
i termini pseudocasuali si ottengono dalla seguente espressione:
x
n+1
= (ax
2
n
+ bx
n
+ c) % m
La presenza di termini con esponente 2 d al metodo il nome di congruenza quadratica.
Scrivi un programma con i seguenti parametri iniziali: x
0
= 2, a = 2, b = 3, c = 1, m = 10 e conIronta i primi 10
termini con quelli generati dal metodo lineare.
2 Scrivi un programma che, utilizzando il metodo lineare congruenziale, distribuisca le carte per un torneo di
tresette, assegnando ad ogni smazzata un numero identiIcativo in modo che questa possa successivamente
essere rigiocata da un altro tavolo.
(Nel gioco del tresette ogni giocatore riceve 10 carte e le suddivide per seme e quindi le dispone in ordine
decrescente secondo la seguente regola: 3,2,1,K,O,J,7,,5,4).
Visualizza a schermo le carte in mano ai quattro giocatori.
3 Scrivi un programma che, utilizzando il metodo lineare congruenziale, eIIettui la simulazione del lancio di un
dado per N = 10000 e visualizzi l'istogramma delle Irequenze in almeno 3 terne diverse di valori dei coeIIcienti.
Osservando i risultati, quali osservazioni possono essere Iatte sui semi e sul coeIIciente a?
Ripeti ora l'esecuzione del programma ponendo c = 0 in ogni situazione: quali osservazioni puoi Iare?
4 Crea un vettore di 20 elementi di valori random usando il metodo di congruenza lineare con m = 2
31
1 a = 75 c = 0.
Considerando che ogni numero pu essere permutato con qualsiasi altro numero con probabilit uniIorme,
eIIettua n = 15 permutazioni e conIronta a video i risultati.
5 Scrivere un programma che eIIettui la simulazione del lancio contemporaneo di due dadi e riportare in una
tabella come la seguente i risultati ottenuti al variare del numero di lanci.
Probabilit
con N = 500
Probabilit
con N = 3000
Probabilit
con N = 10.000
Probabilit
con N = 50.000
Probabilit
con N = 1.00000
2
3

12
Traccia per la soluzione
EIIettuando il lancio di due dadi e sommando successivamente i risultati si ottengono le seguenti combinazioni:
1 2 3 4 5 6
1 2 3 5 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 8
4 5 6 7 8 9 10
5 6 7 8 9 10 11
6 7 8 9 10 11 12
UdA 1 CS U l}oimi `i V>lVolo nmiiVo
18
La somma con valore 2 e con valore 12 presente una sola volta, dato che sono ottenute dall'unica possibile
combinazione (1 + 1) e ( + ) senza altre possibilit, mentre sulla diagonale vediamo che il valore 7 ha il maggior
numero di combinazioni dato che si ottiene con + 1, 5 + 2, 4 + 3, 3 + 4, 2 + 5, 1 + .
ll numero totale di eventi possibili 3 e riportando in una tabella la probabilit espressa come rapporto tra casi
Iavorevoli e casi possibili:
probabilit =
casi_Iavorevoli
casi_possibili
per ciascuna combinazione possiamo calcolare le probabilit teoriche dei singoli eventi.
Valore 2 3 4 5 6 7 8 9 10 11 12
Frobabilit 1/36 2/36 3/36 4/36 5/36 6/36 5/36 4/36 3/36 2/36 1/36
Frob. % 2,77% 5,55% 8,33% 11,11% 13,88% 16,66% 13,88% 11,11% 8,33% 5,55% 2,77%
L'algoritmo che deve eIIettuarne a simulazione abbastanza semplice da realizzare: si simulino i due dadi
mediante dei generatori standard equiprobabili NUM1 e NUM2 di range [0, 1] e si sommino il risultati con una
espressione simile alla seguente:
N
TOT
= N
D1
+ N
D2
= (lNTERO(NUM1*)+1) + (lNTERO(NUM2*)+1)