Fondamenti di Informatica I - iet.unipi.it · Fondamenti di Informatica I ... Elementi di Strutture...
-
Upload
truongdien -
Category
Documents
-
view
235 -
download
12
Transcript of Fondamenti di Informatica I - iet.unipi.it · Fondamenti di Informatica I ... Elementi di Strutture...
Materiale didattico di supporto alle lezioni del corso di
Fondamenti di Informatica I
Corso di Laurea in Ingegneria Informatica
Prof. Cinzia Bernardeschi
Ing. Marco Cococcioni
Dipartimento di Ingegneria dell’Informazione
Anno Accademico 2015-2016
Il corso è composto da due moduli da 6 CFU:
• Fondamenti di Informatica (titolare Prof. Bernardeschi)
• Programmazione ad Oggetti (titolare Ing. Cococcioni)
Libri di testo:
• Paolo Corsini
Il calcolatore didattico DC86.32
Edizioni ETS, Pisa, 2011.
Acquistabile presso le principali librerie della città
• Andrea Domenici, Graziano Frosini
Introduzione alla Programmazione ed
Elementi di Strutture Dati con il Linguaggio C++
Milano: Franco Angeli.
(va bene dalla quinta edizione in poi)
Acquistabile presso le principali librerie della città
• Raccolta di lucidi delle lezioni: scaricabili dal sito del corso
http://www.iet.unipi.it/c.bernardeschi/FondamentiDiInformatica.html
Modalità di esame: prova pratica e prova orale.
1
Argomenti del corso
Rappresentazione dell’informazione.
Architettura del calcolatore. Linguaggio Assembler
Concetti di base della programmazione
Concetto di algoritmo. Il calcolatore come esecutore di algoritmi. Linguaggi di programmazione ad
alto livello. Sintassi e semantica di un linguaggio di programmazione. Metodologie di
programmazione strutturata. Principi fondamentali di progetto e sviluppo di semplici algoritmi.
Programmare in C
Tipi fondamentali. Istruzioni semplici, strutturate e di salto. Funzioni. Ricorsione. Riferimenti e
puntatori. Array. Strutture e unioni. Memoria libera. Visibilità e collegamento. Algoritmi di ricerca e di
ordinamento.
Concetti di base della programmazione a oggetti
Limitazioni dei tipi derivati. Il concetto di tipo di dato astratto.
Programmare in C++
Classi. Operatori con oggetti classe. Altre proprietà delle classi. Classi per l’ingresso e per l’uscita.
Progettare ed implementare tipi di dato astratti
Alcuni tipi di dato comuni con le classi: Liste, Code, Pile.
2
Rappresentazione dell’Informazione (1/2)
L’informazione è qualcosa di astratto. Per poterla manipolare bisogna rappresentarla.
In un calcolatore i vari tipi di informazione (testi, figure, numeri, musica,…) si rappresentano per mezzo di sequenze di bit (cifre binarie).
Bit è l’abbreviazione di Binary digIT, numero binario.
Il bit è l'unità di misura elementare dell'informazione, ma anche la base del sistema numerico utilizzato dai computer. Può assumere soltanto due valori: 0 o 1.
Byte è l’unità di misura dell'informazione che corrisponde ad 8 bit.
3
Rappresentazione dell’Informazione (2/2)
Quanta informazione può essere contenuta in una sequenza di n bit? L’informazione corrisponde a tutte le possibili disposizioni con ripetizionedi due oggetti (0 ed 1) in n caselle (gli n bit), ossia 2n
Esempio: n=2.00011011
ATTENZIONE: Una stessa sequenza di bit può rappresentare informazione differente.
Per esempio 01000001 rappresenta– l’intero 65– il carattere ‘A’– il colore di un puntino sullo schermo
4
Calcolatore e Informazione
testodisegni
immagininumerimusica
...
Calcolatore
sequenzedi bit
dispositivi di conversione
OUT
IN
5
Rappresentazione del testo (1/2)
Sequenze00110000
00110001
00110010
...
00111001
...
01000001
01000010
01000011
...
01100001
01100010
...
Caratteri0
1
2
...
9
...
A
B
C
...
a
b
...
Caro amico,
01000011
01100001
01110010
01101111
00100000
01100001
01101110
01101001
01100011
01101111
00101100
Codifica ASCII (American Standard Code for Information Interchange) Standard su 7 bit (il primo bit del byte sempre 0)
6
Rappresentazione del testo (2/2)
Codifica ASCII – Tabella di corrispondenza
4 cifre meno significative
3 cifre più significative
7
Base dieci
� Cifre: 0, 1, 2, 3, 4, 6, 7, 8, 9
� Rappresentazione posizionale
(123)dieci significa 1×102 + 2×101 + 3×100
Base due
� Cifre: 0, 1
� Rappresentazione posizionale
(11001)due significa 1×24 + 1×23 + 0×22 + 0×21 + 1×20 (= 25)dieci
Rappresentazione dei numeri naturali (1/11)
8
Data una base β ≥ due
Ogni numero naturale N minore di β (N < β) è associato ad un simbolo elementare detto cifra
Rappresentazione dei numeri naturali (2/11)
BASE CIFRE due 0 1 cinque 0 1 2 3 4 otto 0 1 2 3 4 5 6 7 sedici 0 1 2 3 4 5 6 7 8 9 A B C D E F
9
I numeri naturali maggiori o uguali a β possono essere rappresentati da una sequenza di cifre secondo la rappresentazione posizionale
Se un numero naturale N ≥ β è rappresentato in base β dalla sequenza di cifre:
allora N può essere espresso come segue:
dove a0 è detta «cifra meno significativa» e ap-1 «cifra più significativa»
Rappresentazione dei numeri naturali (3/11)
p -1 p - 2 1 0a a … a a
∑p-1
i p-1 p-2 2
i p-1 p-2 2 1 0i=0
Ν= = + +...+ + +β β β β βa a a a a a
10
Data una sequenza di cifre in base β, a quale numero naturale corrisponde?
Rappresentazione dei numeri naturali (4/11)
Sequenzedi simboli(in base β)
Sequenzedi simboli
(in base 10)
N ?
6568
A0316
11012
6 ·8 2 + 5 ·8 1 + 6 · 8 0
10 ·16 2 + 0 ·16 1 + 3 ·16 0
1 ·2 3 + 1 ·2 2 + 0 ·2 1 + 1 ·2 0
430 256313
p -1 p - 2 1 0a a … a a
11
Data la base β ed un numero naturale N, trovare la sequenza di cifre che rappresenta N in base β
Rappresentazione dei numeri naturali (5/11)
Sequenzedi simboli(in base β)
Sequenzedi simboli
(in base 10)
Np -1 p - 2 1 0a a … a a
12
Esempio: da base 10 a base 2
Rappresentazione dei numeri naturali (6/11)
inizio
fine
div 2
div 2
div 2
div 2
QUOZIENTE RESTO Rappresentazione 23 - 11 1 11*2+1 5 1 ((5*2)+1)*2+1 2 1 ((((2*2)+1)*2)+1)*2+1 1 0 (((((1*2)+0)*2)+1)*2)+1)*2+1 0 1 (((((0*2+1)*2+0)*2+1)*2+1)*2)+1
(10111)duea4a3a2a1a0
N = 23
che in base dieci vale 1*24+…+1=(23)dieci, cvd
13
Sia mod il resto e div il quoziente della divisione intera
Procedimento mod/div
Se N = 0 porre a0 = 0; => fine
Altrimenti: porre q0 = N e poi eseguire la seguente procedura iterativa:
q1 = q0 div β a0 = q0 mod β
q2 = q1 div β a1 = q1 mod β
...
qp-1 = qp-2 div β ap-1 = qp-2 mod β
fino a che qp è uguale a 0;
Il procedimento si arresta quando qp = 0 (più precisamente
subito dopo aver calcolato ap-1). p è proprio il numero di cifre
necessario per rappresentare N in base β
Rappresentazione dei numeri naturali (7/11)
Esempio:23 div 2 = 1123 mod 2 = 1
NB: Il risultatodella mod è sempreuna cifra valida in base β,
perché restituisce sempreun numero fra 0 e β -1(estremi inclusi).
14
Rappresentazione dei numeri naturali (8/11)
Inizio q0 = N
fine
div β
div β
div β
div β
div β
QUOZIENTE RESTO q0 = N - q1 = q0 / β a0 q2 = q1 / β a1 q3 = q2 / β a2 q4 = q3 / β a3 q5 = q4 / β a4 q6 = q5 / β a5 q7 = 0 a6
div β
N = a6 ·β 6 + a5 ·β 5 + a4 ·β 4 + a3 ·β 3 + a2 ·β 2 + a1 ·β 1 + a0 ·β 0
p
11…11 (= 2p-1)
p
00…00 00…01
p
0 1 2p-1… N
Intervallo di rappresentabilità con p bit
15
Rappresentazione dei numeri naturali (9/11)
Potenza della base: 2p ↔ (100…00)due
p
p Intervallo [0, 2p-1] 8 [0, 255] 16 [0, 65535] 32 [0, 4294967295]
NB: per la generica base β,
l’intervallo di rappresentabilità con p cifre è [0, β p
-1]
16
Calcolatore lavora con un numero finito di bit
� Supponiamo che p = 16 bit
� A = 0111011011010101 (30421)B = 1010100001110111 (43127)
� Poiché A + B (73552) è maggiore di 2p-1(65535), quindi non è rappresentabile su p bit, si dice che la somma ha dato luogo ad overflow
� In generale, ci vogliono p+1 bit per la somma di due numeri di p bit
A = 1111111111111111 (65535)B = 1111111111111111 (65535)
11111111111111110 (131070)
Rappresentazione dei numeri naturali (10/11)
17
Somma fra due numeri naturali espressi in binario.
Per sommare 10011 e 101101, basta metterli in colonna allineandoli a destra (come si fa con i numeri in base 10) e poi tenere presenti le seguenti regole:
Esempio: calcolare la somma di 101100 e 111010
11 ← riporti generati
101100 +
111010 =
1101110
Rappresentazione dei numeri naturali (11/11)
0 +0 =
0 +1 =
1 +0 =
11 +1 =
111+1=
0 1 1 10 11
genera
un riporto
genera
un riporto
eventuale riporto
generatosi
precedentemente
18
Numeri naturali - Cambio di base (1/2)
1
NumeriNaturali
Rappresentazionibase X
Rappresentazionibase Y
2
Trovare la rappresentazione in base 9 di (1023)cinque
1) Trasformo in base 10 ed ottengo 1382) Applico il procedimento mod/div ed ottengo (163)nove
Da base X a base Y
19
Casi particolari (potenze di 2)
Numeri naturali - Cambio di base (2/2)
β =16
(657)otto
( 110 101 111 )due
(A03)sedici
(1010 0000 0011)due
(FFE4)sedici
(1111 1111 1110 0100)due
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
β = 16
0
1
2
3
4
5
6
7
000
001
010
011
100
101
110
111
β = 8
β =2β =8
20
Numeri Interi (1/14)
Sia a (es. a=+3, a=-3, …) il numero intero che si vuole rappresentare in modulo e segno su su p bit. La rappresentazione A (es. 0011, 1011, ...) di a è data da:
A = ap-1,…,a0 = (segno_a, ABS_a)
dove ABS_a è la rappresentazione (come numero naturale) del valore assoluto di asu p-1 bit (in particolare ABS_a è rappresentato mediante i bit ap-2,…,a0),e segno_a è un unico bit che vale 0 se a >= 0 e 1 se a <= 0).NB: ad a=0 corrispondono due rappresentazioni: +zero (0,00..0) e -zero (1,00..0)
Ad esempio, per p = 4 si ha:
a=+3 => segno_a = 0, ABS_a = 011 (naturale 3 rappresentato su 3 cifre) => A=0011a= -3 => segno_a = 1, ABS_a = 011 (naturale 3 rappresentato su 3 cifre) => A=1011
Prima rappresentazione: rappresentazione in modulo e segno
Trasformazione a => A
21
Numeri Interi (2/14)
Data una rappresentazione A di un intero in modulo e segno su p bit, come si risale all’intero a da esso rappresentato?La rappresentazione A va vista come composta di due parti: A=(ap-1, ap-2…a0)dopodiché:
a = (ap-1 == 0) ? +ABS_a : -ABS_a
dove ABS_a è il naturale corrispondente ad ap-2…a0
Ad esempio, per p = 4 si ha:
A=0011 => viene visto come (0,011) => a = +011 (+tre)A=1011 => viene visto come (1,011) => a = -011 (-tre)
NB: 0000 rappresenta +zero, mentre 1000 rappresenta –zero.
Prima rappresentazione: rappresentazione in modulo e segno
Trasformazione A => a
22
Numeri Interi (3/14)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
+0
+1
+2
+3
+4
+5
+6
+7
-0
-1
-2
-3
-4
-5
-6
-7
numero negativo ⇔ bit più significativo della rappresentazione uguale a 1
(zero rappresentato due volte)
A a{ }4
0,1
Rappresentazione di interi
in modulo e segno su
calcolatore con p=4 bit
23
Numeri Interi (4/14)
Intervallo di rappresentabilità in modulo e segno su p bit (doppia rappresentazione dello zero)
[-(2p-1-1),+2p-1-1]
•p = 4 [-7,+7]•p = 8 [-127,+127]•p = 16 [-32767,+32767]
NB: prima di applicare l’algoritmo per a=>A occorre verificare che a sia rappresentabile su p bit, altrimenti l’algoritmo conduce a risultati sbagliati. Ad esempio:tentando di rappresentare a=-9 su p=4 bit, si ottiene:A=(segno_a, ABS_a), dove segno_a=1 e ABS_a = 9ma il naturale 9 (1001) non è rappresentabile su 3 bit!!
24
Numeri Interi (5/14)
Sia a (es. a=+3, a=-3, …) il numero intero che si vuole rappresentare in complemento a 2 su p bit. La rappresentazione A (es. 0011, 1101, …) di a è data da:
A = ap-1…a0 = (a >= 0) ? ABS_a : (duep-ABS_a)
dove sia ABS_a che (duep-ABS_a) sono rappresentati in base due come numeri naturali su p bit.
Ad esempio, per p = 4 si ha:
a = 0 => ABS_a = 0, e il naturale 0 ha rappr. 0000 su 4 bit => A = 0000
a = 1 => ABS_a = 1, e il naturale 1 ha rappr. 0001 su 4 bit => A = 0001
a = 7 => ABS_a = 7, e il naturale 7 ha rappr. 0111 su 4 bit => A = 0111
a = -1 => ABS_a = 1, 16-1=15, dove il naturale 15 ha rappr. 1111 su 4 bit => A = 1111
a = -2 => ABS_a = 2, 16-2=14, dove il naturale 14 ha rappr. 1110 su 4 bit => A = 1110
a = -8 => ABS_a = 8, 16-8=8, dove il naturale 8 ha rappr. 1000 su 4 bit => A = 1000
NB: La rappresentazione in complemento a 2 è anche detta in complemento alla base. Infatti lo
stesso procedimento può essere generalizzato per rappresentare interi in basi diverse da due.
Seconda rappresentazione: rappresentazione in complemento a 2
Trasformazione a => A
25
Numeri Interi (6/14)
Data una rappresentazione A = ap-1…a0 di un intero in complemento a due su p bit, come si risale all’intero a da esso rappresentato?
a = (ap-1 == 0) ? +A : -(duep-A)
dove sia A che (duep-A) vengono visti come naturali su p bit.
Ad esempio, per p = 4 si ha:
A = 0000 => a = 0 (zero) A = 0001 => a = +1 (+uno)A = 0111 => a = +7 (+sette)A = 1000 => 16-8 = 8 => a = -8 (-otto)A = 1001 => 16-9 = 7 => a = -7 (-sette)A = 1111 => 16-15=1 => a = -1 (-uno)
Seconda rappresentazione: rappresentazione in complemento a 2
Trasformazione A => a
26
Numeri Interi (7/14)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
+1
+2
+3
+4
+5
+6
+7
-8
-7
-6
-5
-4
-3
-2
-1
Anche in questo caso:
numero negativo ⇔ bit più significativo della rappresentazione uguale a 1
Inoltre, a differenza della rappresentazione in modulo e segno,
non viene sprecata nessuna rappresentazione (lo zero è
rappresentato una volta sola)
A a{ }4
0,1
Rappresentazione di interi
in complemento a due su
calcolatore con p=4 bit
27
Numeri Interi (8/14)
Intervallo di rappresentabilità in complemento a 2 su p bit
[-2p-1,+2p-1-1]
• p = 4 [-8,+7]• p = 8 [-128,+127]• p = 16 [-32768,+32767]
NB: prima di applicare l’algoritmo per a=>A occorre verificare che a sia rappresentabile su p bit, altrimenti l’algoritmo conduce a risultati sbagliati. Ad esempio, tentando di rappresentare a=-9 su p=4 bit, si ottiene:A=(due4-9)=16-9 = 7 =>0111,ma è sbagliato! Infatti -9 non è rappresentabile su 4 bit, ne servono almeno 5!Che il risultato fosse sbagliato si poteva dedurre dal fatto che la rappresentazione del negativo -9 iniziava per 0 (0111 è infatti la rappresentazione di a=+7 su 4 bit!).
(su 5 bit, a=-9 ha rappresentazione (due5-9)=23 => A=10111)
Numeri Interi (9/14)
Terza Rappresentazione: rappresentazione con biasTrasformazione a => A
Sia a (es. a=+3, a=-3, …) il numero intero che si vuole rappresentare in rappresentazione con bias su p bit. La rappresentazione A (es. 1010, 0100, …) di a è data da:
A = ap-1…a0 = a+(2p-1 - 1)
dove a+(2p-1 - 1) è supposto essere non negativo e dunque viene rappresentato comeun naturale su p bit. La quantità (2p-1 - 1) è detta bias.
Ad esempio, per p = 4 si ha:
a = 0 => 0+(24-1-1) = 7, e il naturale 7 ha rappr. 0111 su 4 bit => A = 0111a = 1 => 1+(24-1-1) = 8, e il naturale 8 ha rappr. 1000 su 4 bit => A = 1000a = 8 => 8+(24-1-1) = 15, e il naturale 15 ha rappr. 1111 su 4 bit => A = 1111a = -1 => -1+(24-1-1) = 6, e il naturale 6 ha rappr. 0110 su 4 bit => A = 0110a = -2 => -2+(24-1-1) = 5, e il naturale 5 ha rappr. 0101 su 4 bit => A = 0101a = -7 => -7+(24-1-1) = 0, e il naturale 0 ha rappr. 0000 su 4 bit => A = 0000
NB1: questa rappresentazione è anche detta rappresentazione con polarizzazione o rappresentazione con traslazione
NB2: come si vedrà nelle prossime slides, questa rappresentazione vieneutilizzata nella rappresentazione dei numeri reali in virgola mobile
28
29
Terza Rappresentazione: rappresentazione con biasTrasformazione A => a
Sia A (es. 1010, 0100, …) il numero intero che si vuole rappresentare in rappresentazione con bias su p bit. La rappresentazione a (es. a=+3, a=-3, …) di a è data da:
a = A-(2p-1 - 1)
dove A viene visto come numero naturale su p bit.
Ad esempio, per p = 4 si ha:
A = 0111 => 7-(24-1-1) = 0 => a = 0A = 1000 => 8-(24-1-1) = 1 => a = 1A = 1111 => 15-(24-1-1) = 8 => a = 8 A = 0110 => 6-(24-1-1) = -1 => a = -1 A = 0101 => 5-(24-1-1) = -2 => a = -2 A = 0000 => 0-(24-1-1) = -7 => a = -7
NB: Lo zero viene rappresentato una sola volta (come accade in compl. a 2).
Numeri Interi (10/14)
30
Numeri Interi (11/14)
Intervallo di rappresentabilità nella rappresentazione con bias
[-2(p-1)-1, +2(p-1)], ossia [-bias, bias+1]
• p = 4 [-7,+8] (bias=7)• p = 5 [-15,+16] (bias=15)• p = 7 [-127,+128] (bias=127)• p = 10 [-1023,+1024] (bias=1027)• p = 14 [-16383,+16384] (bias=16383)
NB: prima di applicare l’algoritmo per a=>A occorre verificare che a sia rappresentabile su p bit, altrimenti l’algoritmo conduce a risultati sbagliati.
Ad esempio, tentando di rappresentare a=-9 su p=4 bit, si ottiene:A=-9+(24-1-1)=-9+7 = -2, che non è un numero naturale!
31
Rappresentazioni degli interi su p=5 bit
messe a confronto
Osservazione:In complemento a due, a=-1è sempre rappresentazione dalla sequenza di p bit a 1 (11….11), qualunque sia il
valore di p.
Numeri Interi (12/14)
A {0,1}5 ams ac2 abias
0 00000 +0 0 -15
1 00001 +1 +1 -14
2 00010 +2 +2 -13
3 00011 +3 +3 -12
4 00100 +4 +4 -11
5 00101 +5 +5 -10
6 00110 +6 +6 -9
7 00111 +7 +7 -8
8 01000 +8 +8 -7
9 01001 +9 +9 -6
10 01010 +10 +10 -5
11 01011 +11 +11 -4
12 01100 +12 +12 -3
13 01101 +13 +13 -2
14 01110 +14 +14 -1
15 01111 +15 +15 0
16 10000 -0 -16 +1
17 10001 -1 -15 +2
18 10010 -2 -14 +3
19 10011 -3 -13 +4
20 10100 -4 -12 +5
21 10101 -5 -11 +6
22 10110 -6 -10 +7
23 10111 -7 -9 +8
24 11000 -8 -8 +9
25 11001 -9 -7 +10
26 11010 -10 -6 +11
27 11011 -11 -5 +12
28 11100 -12 -4 +13
29 11101 -13 -3 +14
30 11110 -14 -2 +15
31 11111 -15 -1 +16
32
Numeri Interi (13/14)
-2
+1
-1
1110
0001compl.a due
Sommatore pernaturali
1111
Operazioni su numeri
Operazioni sulle rappresentazioni
QUESTO è il motivo per cui i calcolatori rappresentano gli interi in complemento a due: non occorre una nuova circuiteria per sommare e
sottrarre numeri interi, viene utilizzata la stessa dei numeri naturali!
33
Numeri Interi (14/14)
Sommando due numeri interi si verifica un overflow quando i due numeri hanno lo stesso segno ed il risultato ha segno diverso
7+5=120111 +
0101
----------------
1100 => -4
7-1=60111 +
1111
----------------
10110 => 6
Overflow Ok
NB: L’1 più significativo viene scartato.
0110 su 4 bit è il risultato corretto cercato
34
Numeri Reali
Sottoinsiemediscreto dei Numeri
Razionali
Sequenzedi bit
0
Densità che dipende dal numero di bit usati
Overflow OverflowUnderflow
35
Numeri Reali – Virgola fissa (1/5)
� Si usa un numero fisso di bit per la parte intera ed un numero fisso di bit per la parte frazionaria.
� Sia r un numero reale da rappresentare. Di seguito, indichiamo con I(r) la parte intera e con F(r) la parte frazionaria di r
� Siano p i bit per rappresentare r: f per la parte frazionaria e (p-f) i bit la parte intera:
R = ap-f-1…a0 a-1...a-f
Esempio: +1110.01 in base due vale +14.25 in base dieci
� NB: La virgola non si rappresenta
� La parte intera I(r) si rappresenta con le tecniche note
� Per la parte frazionaria si usa il procedimento seguente:
0 1
...f−−
≅ + + +∑p-f-1
p-f-1i
i 0 -1 -fp-f-1i=-f
r = +...+a β ββ β βa a a a
parte
frazionaria
36
Numeri Reali – Virgola fissa(2/5)
Si usa la così detta procedura parte frazionaria-parte intera:
f0 = F(r) Se f0 ≠ 0 eseguire la seguente procedura iterativa:
f-1 = F( f0 * 2 ) a-1 = I( f0 * 2 )f-2 = F( f-1 * 2 ) a-2 = I( f-1 * 2 )
...fino a che f-j è uguale a zero oppure si è raggiunta la precisione desiderata
Esempio:p = 16 e f = 5r = +331,6875
37
Numeri Reali – Virgola fissa(3/5)
• Dalla rappresentazione dei numeri naturali: 331 ⇔ 101001011;
QUOZIENTE RESTO 331 - 165 1 82 1 41 0 20 1 10 0 5 0 2 1 1 0 0 1
38
Numeri Reali – Virgola fissa(4/5)
• r = +10100101110110 ⇒ R = 0010100101110110• Parte frazionaria ->
1* 2-1 + 0*2-2 + 1*2-3 + 1*2--4 -> 0,5 + 0,125 + 0,0625 -> 0,6875
• Dall’algoritmo precedente: 0,6875 ⇔ 0,1011
• r = (+101001011,1011) base due
F I f-1=F(0.6875*2=1.375)=0.375 a-1=I(1.375)=1
f-2=F(0.375*2=0.75)=0.75 a-2=I(0.75)=0 f-2=F(0.75*2=1.5)=0.5 a-3=I(1.5)=1 f-3=F(0.5*2=1.0)=0 a-4=I(1.0)=1
39
Numeri Reali – Virgola fissa(5/5)
ERRORE DI TRONCAMENTO
Rappresentare r = 2.3 con f = 6.
Per esprimere r sono necessarie un numero infinito di cifre!
(10.0 1001 1001 1001… = 10.01001 dove 1001 è la parte periodica)
Ne abbiamo a disposizione solo 6. Quindi si opera un troncamento alla 6a cifra dopo la virgola.
Quindi, in realtà si rappresenta non r ma il numero r’
r’ = 10.010011r’ = 2 + 2-2 + 2-5 + 2-6 = 2 + 0.25 + 0.03125 + 0.015625 = 2.296875
L’errore di troncamento è (2.3-2.296875)=0,00312499 ( < 2-6 = 0.015625 )
F I f-1=F(0.3*2=0.6)=0.6 a-1=I(0.6)=0
f-2=F(0.6*2=1.2)=0.2 a-2=I(1.2)=1 f-3=F(0.2*2=0.4)=0.4 a-3=I(0.4)=0 f-4=F(0.4*2=0.8)=0.8 a-4=I(0.8)=0 f-5=F(0.8*2=1.6)=0.6 a-5=I(0.6)=0 f-6=F(0.6*2=1.2)=0.2 a-6=I(0.8)=1
40
Numeri Reali – Virgola mobile(1/10)
CALCOLO DI FISICA ASTRONOMICA
me = 9 × 10-28 gr; msole = 2 × 10+33 gr ⇒ Intervallo di variazione ≈ 10+60.
Sarebbero quindi necessarie almeno 62 cifre, di cui 28 per la parte frazionaria.
Si hanno tante cifre perché l’intervallo da rappresentare è grande ⇒ si separa l’intervallo di rappresentabilità dalla precisione, cioè dal numero di cifre.
Notazione Scientifica
β= ± ⋅ er m m = mantissa; e = esponente
L’intervallo di rappresentabilità è fissato dal numero di cifre dell’esponente.
La precisione è fissata dal numero di cifre della mantissa.
Diverse rappresentazioni
3.14 0.314 10+1 31.4 10-1
Si fissa una forma standard
41
Numeri Reali – Virgola mobile(2/10)
Rappresentazione di un numero binario in virgola mobile:
+1110.01 numero reale binario in virgola fissa
esponenti espressi in binario
+1.11001·due+11 … … +111001·due-10
(alcune possibili rappresentazioni in virgola mobile)
Numeri reali normalizzati:
- mantissa con parte intera costituita da un solo bit di valore 1
- rappresentazione è una tripla costituita da tre numeri naturali
42
Numeri Reali – Virgola mobile(3/10)
, ,r R s E F↔ = Standard IEEE 754-1985
La rappresentazione R è composta da tre naturali (s, E ed F), dove:
s = codifica del segno (1 bit)
F = codifica della parte frazionaria della mantissa su G bit
E = codifica dell’esponente su K bit
r = (s == 0)? [+(1+f) · duee)] : [-(1+f) · duee)]
f = F/2G è la parte frazionaria della mantissa (m=1+f= 1+F/2G)
e = +E – (2K-1 – 1) è l’esponente rappresentato dal numero
naturale E (rappresentazione con polarizzazione)
Conseguenza dell’ “uno implicito” ⇒ lo zero non è rappresentabile!
43
Numeri Reali – Virgola mobile(4/10)
Half precision: 16 bit, K = 5 e G = 10. Esempi di trasformazione R => r
Esempio 1
R = {1,10011,1110100101} rappresenta il numero reale negativo con:
f = F/2G = F/2dieci = 0.1110100101
e = E -(2K-1 - 1) = +10011 – (+01111) = +100 (bias=quindici)
r = -1.1110100101 · due+quattro = -11110.100101
r = -30.578125 in base dieci
Esempio 2
R = {0,01111,0000000001} rappresenta il numero reale positivo:
f = F/2M = 1/2G = due-dieci=0.0009765625
e = E -(2K-1 - 1) = 01111-01111 = 15-15=0
r = +1.0000000001 · due+zero = 2.0009765625 · due+zero =2.0009765625
r = + 2.0009765625 in base dieci
44
Numeri Reali – Virgola mobile(5/10)
Half precision, esempi di trasformazione r => R
Esempio A – Rappresentare r=2 in half precision
La rappresentazione di r= 2 è R = {0,10000,0000000000}. Infatti,
decodificando:
f = F/2G = 0
e = E -(2K-1 - 1) = 10000-01111 = 1
r = +1.0000000000 · due+1 = 2 in base dieci
Esempio B – Rappresentare r=0.5 in half precision
La rappresentazione di r = 0.5 è R = {0,01110,0000000000}. Infatti,
decodificando:
f = F/2G = 0
e = E -(2K-1 - 1) = 01110-01111 = -1
r = +1.0000000000 · due-1 = 0.5 in base dieci
45
Half precision, esempi di trasformazione r => R
Esempio C – Rappresentare r=2.3 in half precision
Sapendo che r ha rappresentazione in virgola fissa 10.01001,
iniziamo a portarlo in forma normalizzata: 1.001001 · due+1
Ora ci servono 10 cifre per la parte frazionaria della mantissa, le
restanti verranno scartate, provocando il consueto errore di
troncamento:
1.00 1001 1001 1001 1001… · due+1
A questo punto la rappresentazione è immediata (per trovare E si
faccia riferimento all’esempio A: R={0,10000,0010011001}
Numeri Reali – Virgola mobile(6/10)
F (prime 10 cifre a destra della virgola. Le altre vengono ignorate)
46
Numeri Reali – Virgola mobile(7/10)
Esempio (numeri con modulo massimo, i cosiddetti ± ∞):
R={0,11111,1111111111} (massimo numero rappresentabile, +∞)
R={1,11111,1111111111} (minimo numero rappresentabile, -∞)
f = F/2G = F/2dieci = 0.1111111111
e = + E -(2K-1 - 1) = +11111 – (+01111) = +10000 (+sedici)
|r| = 1.1111111111 · due+10000 < 2(2(K-1)+1)= 2bias+2=217=131072|r| = 131008 ≅ 1.3 · 10+5 in base dieci
Riassumendo, nella rappresentazione half precision:il «+∞» corrisponde a ≅ 2+17
il « -∞» corrisponde a ≅ -2+17
NB: L’intervallo di rappresentabilità [-∞, +∞] èapprossimabile dal seguente: [≅ -2bias+2, ≅ 2bias+2 ]
47
Numeri Reali – Virgola mobile(8/10)
Esempio (numeri con modulo minimo, i cosiddetti ± 0):
R={0, 00000,0000000000} (minimo numero positivo, +0)
R= {1,00000,0000000000} (massimo numero negativo, -0)
f = F/2G = F/2dieci = 0.0000000000
e = + E -(2K-1 - 1) = +00000 – (+01111) = –01111= -quindici
|r| = 1.0000000000 · due-01111 = 2-bias
|r| = 2-15 ≅ 0.31 · 10-4
Riassumendo, nella rappresentazione half precision:il «+0» corrisponde a 2-15 ≅ 0.31 · 10-4
il « -0» corrisponde a -2-15 ≅ -0.31 · 10-4
48
Numeri Reali – Virgola mobile(9/10)
Standard IEEE 754-1985 prevede:
Rappresentazione in single precision su 32 bit con K = 8 e G = 23Intervallo di rappresentabilità:
massimo modulo ≅2(bias+2) = 2+129 ≅ 6.8 · 10+38
minimo modulo =2-bias = 2-127 ≅ 0.58 · 10-38
Rappresentazione in double precision su 64 bit con K = 11 e G = 52Intervallo di rappresentabilità:
massimo modulo ≅2(bias+2) = 2+1025 ≅ 3.6 · 10+308
minimo modulo = 2-bias = 2-1023≅ 1.1 · 10-308
IEEE 754-2008 aggiunge:rappresentazione in quadruple precision su 128 bit con K = 15 e G = 112
massimo modulo ≅ 2(bias+2) = 2+16385 ≅ 1.2 · 10+4932
minimo modulo = 2-bias = 2-16383 ≅ 1.6 · 10-4932
Numeri Reali - Virgola mobile (10/10)
49
0
0+=2-15 +∞ ≅ 2+17
0+=2-127 +∞ ≅ 2+129
0
r1 r2
half precision
single precision
50
Architettura di von Neumann (1946)
Schema a blocchi di un semplice calcolatore
MEMORIA
PRINCIPALE
RETE di INTERCONNESSIONE
INTERFACCE
TRASDUTTORI
PROCESSORE
51
La memoria contiene dati e programmi (istruzioni) codificati in forma binaria
Il processore ripete all’infinito le azioni seguenti :
• preleva una nuova istruzione dalla memoria
• la decodifica
• la esegue
L’esecuzione di un’istruzione può comportare
» Elaborazione e/o Trasferimento (memoria ↔ processore, I/O ↔ processore)
Le periferiche permettono al calcolatore di interagire con il mondo esterno
Funzionamento
52
Struttura logica della memoria
OPERAZIONI
1. LETTURA di UNA cella
2. SCRITTURA di UNA cella...
012...
...2h-22h-1
k bit
• 2h celle di k bit ognuna• Ogni cella ha un indirizzo
53
Struttura logica del processore (1)
CLOCK
Spazio di I/OSpazio di Memoria
01
216-2
216-1
01
65534232-1
ALU
232-2
EIP
EF
Registri di stato
ESP
Puntatore di pila
ALAH
EAX
AX
BLBH
EBX
BX
CLCH
ECX
CX
DLDH
EDX
DX
EBP
ESI
EDI
BP
SI
DI
Registri generali
54
Esistono linguaggi a vari livelli di astrazione
Linguaggio macchina sequenze di bit (difficile da leggere e capire)
0001001000110100
Linguaggio Assembler istruzioni macchina espresse con nomi
simbolici (dipendente dalla macchina)
MOV $35, %AL
Linguaggi ad Alto livello indipendenti dalla macchina
int main()
{
…
}
Livelli di astrazione dei Linguaggi
55
Istruzioni MOV e JMP
L’istruzione MOV del processore DP.86.32 permette di:
• Copiare un valore (immediato) in un registro
Es: MOV $0x64, %AL
• Copiare il contenuto di una cella di memoria in un registro:
Es: MOV (5544FA04), %BH
• Copiare il contenuto della cella puntata da un registro a 32 bit
in un altro registro a 8 bit:
Es: MOV (%EBX), %CH
• Copiare il contenuto delle 2 celle consecutive di cui la prima è puntata
da un registro a 32 bit in un altro registro a 16 bit:
Es: MOV (%EDX), %DX
• Copiare il contenuto delle 4 celle consecutive di cui la prima è puntata
da un registro a 32 bit in un altro registro a 32 bit:
Es: MOV (%ECX), %EAX
L’istruzione JMP del processore DP.86.32 permette di saltare all’indirizzo
(sempre a 32 bit) specificato:
Es: JMP 5544FA0B
56
... ...
(5544FA04) 00010001
(5544FA05) 01000010
(5544FA06) 10100101
(5544FA07) 00000101
(5544FA08) 11100101
(5544FA09) 01011010
(5544FA0A) 01100101
(5544FA0B) 10001011
(5544FA0C) 01110100
(5544FA0D) 10001011
(5544FA0E) 01100100
(5544FA0F) 00000001
(5544FA10) 01010100
(5544FA11) 10011011
(5544FA12) 01010101
(5544FA13) 01000100
(5544FA14) 11111010
(5544FA15) 00001011
... ...
(5544FE05) 01001101
... ...
← istruzione di salto (JMP)
indirizzo a cui saltare (32 bit)
Parte dati del programma
Parte codicedel programma
eseguibile
Esempio di programma in memoria
← istruzione di fineprogramma (RET )
← identificativo del registro %AL
← immediato 64 (in esadecimale)
← istruzione MOV (imm. 8 bit su reg. 8 bit)
57
Lo spazio di ingresso/uscita
memoria
cpu I/O
bus
... ...
(C1CF) 10010001
(C1D0) 01110000
(C1D1) 10100101
(C1D2) 00100101
(C1D3) 01000001
(C1D4) 01011010
... ...
← Porta di IN
← Porta di OUT
← Porta di OUT
← Porta di OUT
← Porta di IN
← Porta di OUTtastiera
video
IN (C1D3), %AL # carica in AL l’esad. 41, ossia ‘A’ (cfr cod. ASCII)OUT $0x70, (C1D0) # stampa a video 0x70, ossia il carattere ‘p’
A‘p’
10001011 01100100 00000001
58
Le istruzioni sono codificate come sequenze di bit.
Formato delle istruzioni (1/2)
codice operativo
operandi
Stringa di bit
MOV %ALimmediato 0x64
Codice Operativo Operandi
Esempio
59
OPCODEsize source destination
OPCODEsize source
OPCODEsize destination
Dove size può essere:
B (byte): 8 bitW (word): 16 bitL (Long): 32 bit
Esempi:
MOVB (%EBX), %ALMOVW (%EBX), %AXMOVL (%EBX), %EAX
Formato delle istruzioni (2/2)
60
Esempio di programma in lunguaggio assembler
3F0D0100 00000000 Dato da elaborare (una WORD)3F0D0102 00000000 Risultato (un BYTE)3F0D0103......40B1A200 MOV $0, %AL Azzera il contatore AL40B1A203 MOV (3F0D0100), %DX Copia in DX il dato da elaborare40B1A207 CMP %DX, $0 Confronta il contenuto di DX con 040B1A211 JE 40B1A232 Salta se uguale40B1A215 SHL %DX Trasla a sinistra il contenuto di DX40B1A217 JC 40B1A225 Salta se CF è settato all’indirizzo 22540B1A221 JMP 40B1A207 Salta incondizionatamente a 20740B1A225 ADD $1, %AL Incrementa il contatore AL40B1A228 JMP 40B1A207 Salta incondizionatamente40B1A232 MOV %AL, (3F0D0102) Memorizza il risultato40B1A236 HLT ALT…
61
Istruzioni per il trasferimento di datiMOV Movimento (ricopiamento)IN Ingresso datiOUT Uscita datiPUSH Immissione di una word nella pilaPOP Estrazione di una word dalla pila
Istruzioni aritmeticheADD Somma (fra interi oppure naturali) SUB Sottrazione (fra interi oppure naturali) CMP Confronto (fra interi oppure naturali) MUL Moltiplicazione (fra naturali) DIV Divisione (fra naturali) IMUL Moltiplicazione (fra interi) IDIV Divisione (fra interi)
Istruzioni operative (1)
62
Istruzioni logicheNOT Not logico bit a bitAND And logico bit a bitOR Or logico bit a bit
Istruzioni di traslazione/rotazioneSHL Traslazione a sinistraSHR Traslazione a destraROL Rotazione a sinistraROR Rotazione a destra
Istruzioni operative (2)
63
Istruzioni di salto
JMP Salto incondizionato
Jcond Salto sotto condizione
Istruzioni per la gestione dei sottoprogrammi
CALL Chiamata di sottoprogramma
RET Ritorno da sottoprogramma
Istruzione di alt
HLT Alt
Istruzioni di controllo
64
Registri di stato:
Extended Instruction Pointer EIP: registro che contiene l’indirizzo
della prossima istruzione da eseguire
Extended Flag register EF
Controllo del flusso: salto condizionato e registro dei flag
Carry Flag CF, Zero Flag ZF
SignFlag SF, Overflow Flag OF
Esempio di test del contenuto dei flag:
Es1: CMP $0, %AL
JZ indirizzo_di_memoria
Es2: ADD %AL,%BL
JO indirizzo_di_memoria
NB:
Alcune istruzioni influenzano i flag, altre no
Ad esempio: la ADD influenza sia CF che OF, ma
• CF va testato nel caso si lavori sui naturali
• OF va testato nel caso si lavori sugli interi
65
Labels
Ogni istruzione assembler inizia ad un certo indirizzo in memoria (l’indirizzodella cella contenente il primo byte dell’istruzione)
L’indirizzo assoluto di una istruzione sarà noto solo a tempo di esecuzione,quando il programma assembler, reso eseguibile dall’assemblatore e dal linker,verrà caricato in memoria.
Il programmatore può creare delle etichette (dette labels), che possono essereutilizzate dal programmatore per indicare l’indirizzo di una istruzione. Saràcompito dell’assemblatore e del linker sostituire l’etichetta con l’indirizzo fisicoassoluto.
Esempio di un programma che stampa 5 asterischi a video (il sottoprogrammaoutchar stampa a video il carattere la cui codifica ASCII si trova in %AL):
_main: MOV $5, %AH
MOV $’*’, %AL
label: CALL outchar # label conterrà l’indirizzo dell’istruzione
DEC %AH # CALL outchar
JNZ label
RET
.INCLUDE "utility"
66
Le direttive .BYTE, .FILL e .ASCII
In assembler si può allocare memoria «statica» per delle «variabili». Si trattadell’equivalente C/C++ delle variabili globali.
Una «variabile» assembler è una etichetta (che corrisponde all’indirizzo dellaprima cella di memoria in cui inizia la «variabile») seguita da una direttivaassembler che riserva area di memoria.
v1: .BYTE 0x6F,‘k’ # alloca un vettore di 2 byte ad "ok"
v2: .FILL 12, 1 # alloca un vettore di 12 byte (1=byte)
v3: .FILL 25, 2 # alloca un vettore di 25 word (2=word = 2byte)
v4: .FILL 10, 4 # alloca un vettore di 10 long (4=long = 4byte)
str: .ASCII "Ciao Mondo"
_main:
MOV $str, %EBX # copia l’indirizzo di str in EBX
MOV $10, %CX
CALL outmess
RET
NB: Le direttive .BYTE e .ASCII calcolano il numero di celle di memoria da allocareed inoltre provvedono anche alla loro inizializzazione. La .FILL non inizializza.
67
Lo Stack (1/7)
• Lo STACK è un’area di memoria a disposizione dei programmi (sia Assembler che C/C++)
• Viene gestita mediante strategia FIFO (first in-first out): un nuovo dato può essere immesso oppure prelevato dalla cima allo STACK
• Sfrutta una registro speciale del processore, l’Extended Stack Pointer (ESP)
• L’ESP punta sempre alla prima locazione libera dello STACK
68
Lo Stack (2/7)
Lo STACK cresce verso indirizzi più
bassi ↑
Parte Dati Staticistr: .ASCII "Ciao mondo!"
vett: .FILL 14, 4
←ESP (punta alla prima cellavuota)
Parte Codice_main: MOV %BX,%AX
…
RET
Parte Dati Dinamici(nota comunemente come HEAP: la
vedremo in azione nel linguaggio C++)
(memoria non ancora utilizzata dallo STACK/HEAP)
Parte Dati Automatici(nota comunemente nota STACK)
Struttura di un programma eseguibile in memoria
69
• L’istruzione PUSH salva il contenuto di un registro a 32 bit nelle 4 celle in cima allo STACK e decrementa ESP di 4
Esempio:
PUSH %EAX
• L’istruzione POP recupera il contenuto delle 4 locazioni in cima allo STACK, lo salva in un registro a 32 bit e incrementa ESP di 4
Esempio
POP %EBX
Le istruzioni PUSH e POP
Lo Stack (3/7)
70
…
cella vuota ←ESP+3
cella vuota ←ESP+2
cella vuota ←ESP+1
cella vuota ←ESP
cella piena ←ESP-1
cella piena ←ESP-2
cella piena ←ESP-3
cella piena ←ESP-4
cella piena
…
STACK
Le 4 celle interessate da una eventuale
POP
Le 4 celle interessate da una eventuale
PUSH
Funzionamento delle istruzioni PUSH e POP
Lo Stack (4/7)
71
L’istruzione CALL
• L’istruzione CALL permette di andare ad eseguire un sottoprogramma
• Esempio di chiamata del sottoprogramma inchar:
04AAFFB3 CALL inchar
04AAFFB8 INC %EAX
...
• Concettualmente la CALL equivale alle seguenti istruzioni:
PUSH %EIP # salva 04AAFFB8 sullo STACK
JMP 1E22AF0C # se inchar inizia a 1E22AF0C
NB: la PUSH %EIP non si può fare esplicitamente in quanto non fa parte del set delle istruzioni del processore!
← quando si arriva ad eseguire la CALL
in EIP ci sarà indirizzo dell’istruzione
INC (ad esempio, 04AAFFB8)
Lo Stack (5/7)
72
L’istruzione RET
• L’istruzione RET permette di tornare ad eseguire il sottoprogramma chiamante a partire dall’istruzione successiva alla CALL
Esempio:
1E22AF0C inchar: IN (0AFB), %AL
...
RET
• Concettualmente, effettua le seguenti operazioni:POP %EIP
JMP %EIP
Lo Stack (6/7)
73
Lo Stack (7/7)
Sintetizzando, le istruzioni che utilizzano lo STACK sono:
CALL, PUSH, POP, e RET
NB:
•Tutte modificano l’ESP
•Alcune modificano anche l’EIP (CALL e RET)
74
Sottoprogrammi (1/2)
Qualunque blocco di istruzioni assembler consecutive che inizia con una labele termina con una RET.
Esempio di un sottoprogramma che stampa a video un asterisco:
subprog: PUSHAD # salva il contenuto di tutti i registri gen.
MOV ‘*’, %AL
CALL outchar
POPAD # ripristina il contenuto di tutti i reg. gen.
RET
Le informazioni fra il sottoprogramma chiamante (ad esempio il _main) e
quello chiamato avviene tramite registri.
subprog: CALL outchar # stampa il carattere messo in %AL dal chiamante
CALL inchar # legge un nuovo carattere e lo restituisce in %AL
RET
75
Sottoprogrammi (2/3)
Il sottoprogramma principale: _main
Ogni programma Assembler deve prevedere un sottoprogrammaprincipale, denominato _main.
Quando il file ascii (con estensione .s) viene compilato pergenerare il file oggetto file.o e poi linkato in un .exe, la primaistruzione assembler che verrà eseguita sarà quella che si trovaall’indirizzo dell’etichetta _main
76
Sottoprogrammi (3/3)
Alcuni sottoprogrammi di utilità, contenuti nel file assembler "utility"
Input ed output di caratteri e stringheinchar aspetta un carattere dalla tastiera e mette il suo codice ASCII in ALoutchar stampa a video il carattere contenuto in %ALoutmess stampa a video gli N caratteri che si trovano in memoria a partire
dall’indirizzo contenuto in EBX. N è il naturale contenuto in CX.
Input ed output di naturali e interi su 8 bitinbyte aspetta che vengano inseriti due caratteri (entrambi fra 0-9 o A-F)
e poi, interpretandoli come cifre esadecimali,assegna gli 8 bit di %AL. Esempio ‘E3’ => in AL ci finisce 11100011
outbyte stampa a video i due caratteri ASCII corrispondenti alle due
cifre esadecimali associate al corrente contenuto di %AL.Esempio: se il contenuto di AL è 01101010 a video vienestampata la stringa "6A"
newline Porta il cursore all’inizio della linea seguente(CALL newline equivale al cout<<endl)
77
Informatica (definizione informale): è la scienza della rappresentazione e dell’elaborazione dell’informazione
Informatica (definizione formale dell’Association for Computing Machinery -ACM): è lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione, la loro teoria e analisi, il loro progetto, e la loro efficienza, realizzazione e applicazione.
Algoritmo: sequenza precisa e finita di operazioni, comprensibili e perciò eseguibili da uno strumento informatico, che portano alla realizzazione di un compito.
Esempi di algoritmi:
• Istruzioni di montaggio di un elettrodomestico• Somma in colonna di due numeri• Bancomat
Definizione di informatica
78
Calcolatore elettronico come risolutore di problemi
Compito dell’esperto informatico: data la descrizione di un problema, produrre algoritmi (cioè capire la sequenza di passi che portano alla soluzione del problema) e codificarli in programmi.
-La descrizione di un problema non fornisce in generale un modo per risolverlo.
- La descrizione del problema deve essere chiara e completa.
Calcolatori Elettronici come esecutori di algoritmi: gli algoritmi vengono descritti tramite programmi, cioè sequenze di istruzioni scritte in un opportuno linguaggio comprensibile al calcolatore.
79
Algoritmo: sequenza precisa (non ambigua) e finita di operazioni, che portanoalla realizzazione di un compito.
Le operazioni utilizzate appartengono ad una delle seguenti categorie:
1. Operazioni sequenziali
Realizzano una singola azione. Quando l’azione è terminata passano all’operazionesuccessiva.
2. Operazioni condizionali
Controllano una condizione. In base al valore della condizione, selezionanol’operazione successiva da eseguire.
3. Operazioni iterative
Ripetono l’esecuzione di un blocco di operazioni, finchè non è verificata unadeterminata condizione.
Algoritmo (1)
80
L’esecuzione delle azioni nell’ordine specificato dall’algoritmo consente di risolvere il problema.
Risolvere il problema significa produrre risultati a partire da dati in ingresso
L’algoritmo deve essere applicabile ad un qualsiasi insieme di dati in ingresso appartenenti al dominio di definizione dell’algoritmo (se l’algoritmo si applica ai numeri interi deve essere corretto sia per gli interi positivi che per gli interi negativi)
Algoritmo (2)
datirisultati
algoritmo
esecutore
81
Calcolo equazione ax+b = 0- leggi i valori di a e di b
- calcola –b
- dividi quello che hai ottenuto per a e chiama x il risultato
- stampa x
Calcolo del massimo fra due numeri
- leggi i valori di a e di b
- se a > b stampa a altrimenti stampa b
Algoritmo (3)
82
Calcolo del massimo di un insieme
- scegli un elemento come massimo provvisorio max- per ogni elemento i dell’insieme:
se i>max eleggi i come nuovo massimo provvisorio max- il risultato è max
Stabilire se una parola P precede alfabeticamente una parola Q. Ipotesi: P e Q di uguale lunghezza > = 1
leggi P e Q; inizializza trovato a 0
- ripeti finché (trovato vale 0 e lettere non finite)
se prima lettera di P < prima lettera di Qallora scrivi vero; trovato = 1;
altrimenti se prima lettera di P > prima lettera di Q
allora scrivi falso; trovato = 1;
altrimenti togli da P e da Q la prima lettera- se trovato vale 0 allora scrivi falso
Algoritmo (4)
83
Eseguibilità: ogni azione deve essere eseguibile dall’esecutore in un tempo finito
Non-ambiguità: ogni azione deve essere univocamente interpretabile dall’esecutore
Finitezza: il numero totale di azioni da eseguire, per ogni insieme di dati in ingresso, deve essere finito
Algoritmi equivalenti
� hanno lo stesso dominio di ingresso
� hanno lo stesso dominio di uscita
� in corrispondeza degli stessi valori del dominio di ingressso producono gli stessi valori del dominio di uscita
� Due algoritmi equivalenti – Forniscono lo stesso risultato, ma possono avere diversa efficienza e possono
essere profondamente diversi
Algoritmo (5)
84
Esempio: calcolo del Massimo Comun Divisore (MCD) fra due interi M e N
Algoritmo 1• Calcola l’insieme A dei divisori di M
• Calcola l’insieme B dei divisori di N
• Calcola l’insieme C dei divisori comuni
• il massimo comun divisore è il massimo divisore contenuto in C
Algoritmo (6)
85
Algoritmo 2 (di Euclide)
Se due numeri, m e n, sono divisibili per un terzo numero, x, allora anche la loro differenza è divisibile per x.
Per dimostrarla, si può utilizzare la proprietà distributiva. Supponiamo m>n.m=kxn=hxm-n=kx-hx=x(k-h)Dunque si può dire che: MCD(m,n) = MCD((m-n),n)
Algoritmo• ripeti finché (M != N):
� se M > N, sostituisci a M il valore M-N
� altrimenti sostituisci a N il valore N-M
- il massimo comun divisore corrisponde a M (o a N)
Algoritmo (6bis)
86
Algoritmo (7)
Proprietà essenziali degli algoritmi:
Correttezza:
– un algoritmo è corretto se esso perviene alla soluzione del compito cui è preposto, senza difettare in alcun passo fondamentale.
Efficienza:
– un algoritmo è efficiente se perviene alla soluzione del compito cui è preposto nel modo più veloce possibile, compatibilmente con la sua correttezza.
87
La formulazione testuale di un algoritmo in un linguaggio comprensibile ad uncalcolatore è detta PROGRAMMA.
Ricapitolando, per risolvere un problema:
- Individuazione di un procedimento risolutivo
- Scomposizione del procedimento in un insieme ordinato di azioni –ALGORITMO
- Rappresentazione dei dati e dell’algoritmo attraverso un formalismo comprensibile al calcolatore: LINGUAGGIO DI PROGRAMMAZIONE
Programmazione
88
Perché non usare direttamente il linguaggio naturale?
Il LINGUAGGIO NATURALE è un insieme di parole e di regole per combinaretali parole che sono usate e comprese da una comunità di persone
- non evita le ambiguità
- non si presta a descrivere processi computazionali automatizzabili
Occorre una nozione di linguaggio più precisa.
Un LINGUAGGIO di programmazione è una notazione formale che può essereusata per descrivere algoritmi.
Si può stabilire quali sono gli elementi linguistici primitivi, quali sono le frasilecite e se una frase appartiene al linguaggio.
Linguaggi di Programmazione (1)
89
Un linguaggio è caratterizzato da:
SINTASSI - insieme di regole formali per la scrittura di programmi, che fissano le modalità per costruire frasi corrette nel linguaggio
SEMANTICA - insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio
- a parole (poco precisa e ambigua)- mediante azioni (semantica operazionale)- mediante funzioni matematiche (semantica denotazionale)- mediante formule logiche (semantica assiomatica)
Linguaggi di Programmazione (2)
90
Definizione di linguaggio
Alfabeto V (lessico)- insieme dei simboli con cui si costruiscono le frasi
Universo linguistico V*- insieme di tutte le frasi (sequenze finite) di elementi di V
Linguaggio L su alfabeto V- un sottoinsieme di V*
Come definire il sottoinsieme di V* che definisce il linguaggio?
Specificando in modo preciso la sintassi delle frasi del linguaggio TRAMITE una grammatica formale
91
Grammatica G = <V, VN, P, S>
V insieme finito di simboli terminali
VN insieme finito di simboli non terminali
P insieme finito di regole di produzione
S simbolo non terminale detto simbolo iniziale
Data una grammatica G, si dice Linguaggio LG generato da G l’insieme delle frasi di V
- Derivabili dal simbolo iniziale S
- Applicando le regole di produzione P
Le frasi di un linguaggio di programmazione vengono dette programmi di tale linguaggio.
Grammatiche
92
GRAMMATICA BNF (Backus-Naur Form) è una grammatica le cui regole di produzione sono della forma
X ::= A
X simbolo non terminaleA sequenza di simboli (terminali e non terminali)
Una grammatica BNF definisce quindi un linguaggio sull’alfabeto terminale V mediante un meccanismo di derivazione (riscrittura)
A deriva da X se esiste una sequenza di derivazioni da X ad A
X ::= A1
A2 unica regola che indica l’alternativa fra A1, …, An
…An
Grammatica BNF (1)
93
G = <V, VN, P, S>
V = {lupo, canarino, bosco, cielo, mangia, vola, canta, ., il, lo}
VN = {frase, soggetto, verbo, articolo, nome }S = frase
Produzioni Pfrase ::= soggetto verbo .soggetto ::= articolo nome
articolo ::= il lo
nome ::= lupocanarinobosco cielo
verbo ::= mangiavolacanta
Esempio: derivazione della frase
“il lupo mangia.”
frase -> soggetto verbo.
-> articolo nome verbo.
-> il nome verbo.
-> il lupo verbo.
-> il lupo mangia.
derivazione left-most
Grammatica BNF (2)
94
Albero sintattico
frase
soggetto verbo
articolo nome
mangialupoil
Albero sintattico: albero che esprime il processo di derivazione di una frase usando una data grammatica
Esistono programmi per generare analizzatori sintattici per linguaggi descritti con BNF
.
95
Scrivere un programma sintatticamente corretto non implica che il programma faccia quello per cui è stato scritto
La frase “il lupo vola” è sintatticamente corretta ma non è semanticamente corretta (non è significativa)
// Somma di due numeri interi inseriti da tastiera
int main() {
int a, b;cout << “immettrere due numeri” << endl;cin >> a; cin >> b;int c = a + a; �cout << “Somma: “ << c << endl;return 0;
}
Sintassi e semantica
96
Sviluppo di un programma (approccio compilato):
- editing: scrivere il testo e memorizzarlo su supporti di memoria permanenti
- compilazione
- linking
- esecuzione
Compilatore: traduce il programma sorgente in programma oggetto
� ANALISI programma sorgente
analisi lessicale
analisi sintattica
� TRADUZIONE
generazione del codice
ottimizzazione del codice
Esempi: C, C++, Pascal…
Approccio compilato
97
Sviluppo di un programma (approccio interpretato):
- editing: scrivere il testo e memorizzarlo su supporti di memoria permanenti
- interpretazione
� ANALISI programma sorgente
analisi lessicale
analisi sintattica
� ESECUZIONE
ESEMPIO: Basic, Java
Approccio Interpretato
•P
er
defi
nir
es
inta
ss
ie
sem
an
tic
ad
iu
nlin
gu
ag
gio
oc
co
rre
uti
lizza
reu
na
ltro
lin
gu
ag
gio
,o
ss
iau
nm
eta
lin
gu
ag
gio
•M
eta
lin
gu
ag
gio
pe
rla
sin
tas
siC
++
:
–in
sie
me
di
no
tazio
ni
(no
na
mb
igu
e),
ch
ep
os
so
no
es
se
res
pie
ga
tec
on
po
ch
ep
aro
led
ellin
gu
ag
gio
na
tura
le.
•M
eta
lin
gu
ag
gio
pe
rla
se
ma
nti
ca
C+
+:
–ri
su
lta
as
sai
co
mp
les
so
,p
er
cu
is
iri
co
rre
dir
ett
am
en
tea
llin
gu
ag
gio
na
tura
le.
•N
ota
zio
ne
uti
lizza
tap
er
las
inta
ss
iC
++
:
–d
eri
va
tad
alc
las
sic
ofo
rma
lis
mo
diB
ac
ku
se
Na
ur
(BN
F,B
ac
ku
s-N
au
rF
orm
).
2.1
Lin
gu
ag
gio
di
Pro
gra
mm
azio
ne C
++
(I) 9
8
NO
TA
ZIO
NE
UT
ILIZ
ZA
TA
basata
su
lla
gra
mm
ati
ca
BN
F;
term
ino
log
iain
gle
se;
risp
ett
oall
asin
tassi
uff
icia
le,
reg
ole
sem
pli
ficate
,
cara
tteri
zzate
dalp
refi
sso
basic
;
div
ers
ao
rgan
izzazio
ne
dell
ecate
go
rie
sin
tatt
ich
e.
Re
go
le-
un
are
go
lad
escri
ve
un
acate
go
ria
sin
tatt
ica,
uti
lizzan
do
alt
recate
go
rie
sin
tatt
ich
e,
co
str
utt
id
im
eta
lin
gu
ag
gio
,sim
bo
lite
rmin
ali
-le
form
ealt
ern
ati
ve
po
sso
no
sta
resu
rig
he
sep
ara
te,
op
pu
reessere
ele
ncate
do
po
ilsim
bo
lod
elm
eta
lin
gu
ag
gio
on
eo
f.
Ca
teg
ori
es
inta
ttic
he
:–
scri
tte
inco
rsiv
o.
Co
str
utt
id
im
eta
lin
gu
ag
gio
:–
scri
tti
co
nso
tto
lin
eatu
ra.
Sim
bo
lite
rmin
ali:
–scri
tti
co
ncara
tteri
norm
ali.
2.1
Meta
lin
gu
ag
gio
per
il C
++
(I)
99
•E
se
mp
iofr
ase
so
gg
ett
overb
o.
so
gg
ett
o
art
ico
lon
om
e
art
ico
lo
on
eo
f
illo
no
me
on
eo
f
lupo
canarino
bosco
cie
loscoia
ttolo
verb
o on
eo
f
mangia
vola
canta
•F
ras
is
inta
ttic
am
en
tec
orr
ett
e(s
ec
on
do
las
em
plic
es
inta
ss
iin
tro
do
tta
)il
can
ari
no
vo
la.
illu
po
man
gia
.
illu
po
can
ta.
ilsco
iatt
olo
vo
la.
•A
TT
EN
ZIO
NE
:
Un
as
inta
ss
ic
orr
ett
an
on
imp
lic
au
na
se
ma
nti
ca
co
rre
tta
.
2.1
Meta
lin
gu
ag
gio
per
il C
++
(II
)
100
Ele
me
nti
diu
na
ca
teg
ori
as
inta
ttic
a:
–p
osso
no
essere
op
zio
nali
:
»ven
go
no
co
ntr
ass
eg
nati
co
nil
su
ffis
so
|op
t(s
imb
olo
dim
eta
lin
gu
ag
gio
).
–p
osso
no
essere
rip
etu
tip
iùvo
lte:
»p
er
far
qu
esto
,ven
go
no
intr
od
ott
ecate
go
rie
sin
tatt
ich
eag
giu
nti
ve.
Ca
teg
ori
e s
inta
ttic
he
ag
giu
nti
ve
1.
Seq
uen
za d
i u
n q
ualu
nq
ue g
en
ere
di ele
men
ti:
so
me-e
lem
en
t-seq
so
me-e
lem
en
t
so
me-e
lem
en
t
so
me-e
lem
en
t-seq
2.
Lis
ta d
i u
n q
ualu
nq
ue g
en
ere
di ele
men
ti (
sep
ara
ti d
a
vir
go
la):
so
me-e
lem
en
t-li
st
so
me-e
lem
en
t
so
me-e
lem
en
t
,so
me-e
lem
en
t-li
st
2.1
Meta
lin
gu
ag
gio
per
il C
++
(II
I)
101
2.1
Meta
lin
gu
ag
gio
per
il C
++
(IV
)
so
me-e
lem
en
t-seq
so
me-e
lem
en
tso
me-e
lem
en
t-seq
so
me-e
lem
en
tso
me-e
lem
en
t-seq
so
me-e
lem
en
t
1
2
3
Alb
ero
di d
eri
vazio
ne p
er
la s
eq
uen
za:
1 2
3
so
me-e
lem
en
t
on
eo
f0
1 2
3
4 5
6
7 8
9
102
•P
rog
ram
ma
C+
+:
–co
sti
tuit
od
aseq
uen
ze
dip
aro
le(t
oken
);
–le
paro
lep
osso
no
essere
deli
mit
ate
da
sp
azi
bia
nch
i(w
hit
esp
ace).
•P
aro
le:
–co
sti
tuit
ed
ai
seg
uen
ticara
tteri
:
token
-ch
ara
cte
r
dig
it
lett
er
sp
ecia
l
dig
it on
eo
f
01
23
45
67
89
lett
er
on
eo
f
_a
b..
.z
AB
...
Z
sp
ecia
l
on
eo
f
!%
^..
./
2.2
Sin
tassi C
++
(I)
103
•S
pa
zib
ian
ch
i:–
cara
ttere
sp
azio
;
–cara
tteri
tab
ula
zio
ne
(ori
zzo
nta
lee
vert
icale
);
–cara
tteri
nu
ova
rig
ae
rito
rno
carr
ell
o.
•C
om
me
nti
:–
seq
uen
ze
di
paro
lee
sp
azi
bia
nch
ira
cch
iuse
fra
icara
tteri
/*e
*/,
op
pu
refr
ai
cara
tteri
//e
lafi
ne
dell
ari
ga;
–h
an
no
losco
po
di
do
cu
men
tare
un
pro
gra
mm
a;
–p
osso
no
esse
rein
seri
tili
bera
men
ten
el
testo
en
on
han
no
alc
un
eff
ett
osu
ll’e
secu
zio
ne
del
pro
gra
mm
a.
•S
pa
zib
ian
ch
ie
co
mm
en
ti:
–co
sti
tuis
co
no
lesp
azia
ture
.
2.2
Sin
tassi C
++
(II
)
104
•C
ate
go
rie
sin
tatt
ich
ee
lem
en
tari
(ele
me
nti
les
sic
ali):
–o
pp
ort
un
eseq
uen
ze
di
cara
tte
ri(t
oken
-ch
ara
cte
ro
wh
itesp
ace);
–n
on
po
sso
no
inclu
dere
sp
azia
ture
(ag
giu
nti
ve)
fra
un
cara
ttere
eu
nalt
ro.
•E
lem
en
tile
ss
ica
li:
–id
en
tifi
cato
ri(i
den
tifi
er)
;
–p
aro
lech
iave
(keyw
ord
);
–esp
ressio
ni
lett
era
li(l
itera
l);
–o
pera
tori
(op
era
tor)
;
–sep
ara
tori
(sep
ara
tor)
.
2.2
Sin
tassi C
++
(II
I)
105
•E
nti
tàu
sa
tein
un
pro
gra
mm
a:
–d
evo
no
po
ssed
ere
no
mi;
–in
om
ip
osso
no
essere
iden
tifi
cato
ri:
iden
tifi
er
lett
er
lett
er
iden
tifi
er-
ch
ar-
seq
iden
tifi
er-
ch
ar
lett
er
dig
it
•Il
ca
ratt
ere
dis
ott
olin
ea
tura
_è
un
ale
tte
ra.
–la
do
pp
iaso
tto
lin
eatu
raall
'in
tern
od
eg
liid
en
tifi
cato
riè
sco
nsig
liata
,p
erc
hé
riserv
ata
all
eim
ple
men
tazio
nied
all
eli
bre
rie.
•Il
C+
+d
isti
ng
ue
fra
ma
ius
co
lee
min
us
co
le(è
ca
se
se
ns
itiv
e).
•E
se
mp
i:
iden
t
_id
en
t
Iden
t
2.2
.1 Id
en
tifi
cato
ri
106
•N
ota
:–
ite
rmin
in
om
ee
iden
tifi
cato
resp
esso
ve
ng
on
ou
sati
inte
rca
mb
iab
ilm
en
te,
ma
èn
ece
ssari
od
isti
ng
uerl
i:
»u
nn
om
ep
uò
essere
un
iden
tifi
cato
re,
op
pu
reu
nid
en
tifi
cato
rec
on
alt
risim
bo
liag
giu
nti
vi.
•P
aro
lec
hia
ve
:–
sim
bo
lico
sti
tuit
id
ap
aro
lein
gle
si
(fo
rmate
da
seq
uen
ze
di
lett
ere
),il
cu
isig
nif
icato
èsta
bil
ito
dalli
ng
uag
gio
:
keyw
ord
on
eo
f
and
...
while
•U
nid
en
tifi
cato
ren
on
pu
òessere
ug
uale
ad
un
ap
aro
lach
iave.
•E
sp
res
sio
nile
tte
rali:
–ch
iam
ate
sem
pli
cem
en
tele
ttera
li;
–d
en
ota
no
valo
rico
sta
nti
(co
sta
nti
sen
za
no
me);
»n
um
eri
inte
ri(p
er
es.
10);
»n
um
eri
reali
(per
es.
–12.5
);
»le
ttera
licara
ttere
(per
es.
‘a’)
;
»le
ttera
listr
ing
a(p
er
es.
“in
form
ati
ca”).
2.2
.2 P
aro
le C
hia
ve e
Esp
ressio
ni L
ett
era
li 107
•O
pe
rato
ri:
–cara
tteri
sp
ecia
lie
loro
co
mb
inazio
ni;
–serv
on
oa
den
ota
reo
pera
zio
ni
nel
calc
olo
dell
eesp
ressio
ni;
–esem
pi:
�cara
ttere
+
�cara
ttere
-
�…
•S
ep
ara
tori
:–
sim
bo
lid
iin
terp
un
zio
ne,
ch
ein
dic
an
oil
term
ine
di
un
ais
tru
zio
ne,
sep
ara
no
ele
men
tid
ili
ste
,ra
gg
rup
pan
ois
tru
zio
ni
oesp
ressio
ni,
eccete
ra;
–esem
pi:
�cara
ttere
;
�co
pp
iad
icara
tteri
()
�…2.2
.4O
pera
tori
e s
ep
ara
tori
108
–p
os
izio
ne
ris
pett
oai
su
oi
op
era
nd
i(o
arg
om
en
ti):
�p
refi
sso
:se
pre
ced
eg
liarg
om
en
ti
�o
parg
do
ve
op
e’l’
op
era
tore
earg
e’l’
arg
om
en
to
Esem
pio
:+
5
�p
ostf
isso
:se
seg
ue
gli
arg
om
en
ti
�arg
op
Esem
pio
:x+
+(o
pera
tore
incre
men
to)
�in
fisso
:in
tutt
ig
lialt
ricasi;
�arg
1o
parg
2
Esem
pio
:4
+5
–n
um
ero
dia
rgo
me
nti
(oa
rie
tà):
Es
em
pio
:o
parg
(ari
età
1)
arg
1o
parg
2(a
rietà
2)
2.2
.4P
rop
rietà
deg
li o
pera
tori
(I)
109
–p
rec
ed
en
za
(op
rio
rità
)n
ell’o
rdin
ed
ie
se
cu
zio
ne
:
�g
lio
pera
tori
co
np
rio
rità
più
alt
ave
ng
on
oeseg
uit
ip
er
pri
mi;
Esem
pio
:
arg
1+
arg
2*
arg
3
(op
era
tore
pro
do
tto
pri
ori
tàm
ag
gio
red
ell
’op
era
tore
so
mm
a)
–a
ss
oc
iati
vit
à(o
rdin
ein
cu
ive
ng
on
oe
se
gu
iti
op
era
tori
de
lla
ste
ss
ap
rio
rità
):
�o
pera
tori
as
so
cia
tivi
asin
istr
a:
ven
go
no
eseg
uit
id
asin
istr
aa
destr
a;
Esem
pio
:arg
1+
arg
2+
arg
3
(arg
1+
arg
2)
+arg
3
�o
pera
tori
ass
ocia
tivi
ad
estr
a:
ven
go
no
eseg
uit
id
ad
estr
aa
sin
istr
a.
Esem
pio
:arg
1=
arg
2=
arg
3
arg
1=
(arg
2=
arg
3)
2.2
.4P
rop
rietà
deg
li o
pera
tori
(II
)
110
Il p
iù s
em
plic
e p
rog
ram
ma
C+
+
int
main
(){
}
Un
pa
ss
o a
va
nti
#in
clu
de <
cstd
lib
>//
dirett
ive p
er
il pre
pocessore
usin
g n
am
esp
ace s
td;
/*dirett
iva c
he indic
a a
l com
pila
tore
che t
utt
i i nom
iusati n
el pro
gra
mm
a s
i rife
riscono a
llo s
tandard
A
NS
I-C
++
*/
int
main
()//
dic
hia
razio
ne d
ella
funzio
ne m
ain
{
syste
m("
PA
US
E")
;/*
consente
di blo
ccare
l’e
secuzio
ne in a
ttesa c
he
l’ute
nte
dig
iti un t
asto
*/
retu
rn 0
; // r
estitu
isce 0
ovverr
o t
utt
o O
K!!!!
}
3.
Un
sem
pli
ce p
rog
ram
ma
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
111
3.1
Og
gett
i (I
)
Og
ge
tto
: g
rup
po
di ce
lle c
on
se
cu
tive
ch
e v
en
go
no
co
nsid
era
te d
al p
rog
ram
ma
tore
co
me
un
’un
ica
ce
lla
info
rma
tiva
.
Att
rib
uti
di u
n o
gg
etto
:In
dir
izzo
de
lla p
rim
a c
ella
Va
lore
(co
nte
nu
to d
i tu
tte
le
ce
lle)
Ce
lla
Og
ge
tto
Ind
iriz
zo
Va
lore
Me
mo
ria
: in
sie
me
di c
elle
.C
ella
: in
ge
ne
re d
ime
ns
ion
e d
i u
n b
yte
(8
bit
) 112
•O
gg
ett
ic
osta
nti
(co
sta
nti
co
nn
om
e)
eo
gg
ett
iva
ria
bili:
–l’
ind
iriz
zo
co
mu
nq
ue
no
ncam
bia
;
–il
valo
ren
on
pu
òo
pu
òsu
bir
em
od
ific
he,
risp
ett
ivam
en
te.
•P
rog
ram
ma
tore
:–
si
rife
risce
au
no
gg
ett
om
ed
ian
teu
nn
om
e(c
aso
part
ico
lare
din
om
e:
iden
tifi
cato
re).
•O
gg
ett
o:
–h
au
nti
po
.
•T
ipo
diu
no
gg
ett
o:
–in
sie
me
di
va
lori
(dett
iele
men
tio
co
sta
nti
del
tip
o);
–in
sie
me
di
op
era
zio
ni
defi
nit
esu
gli
ele
men
ti(c
on
risu
ltato
ap
part
en
en
teall
oste
sso
tip
oo
ad
un
alt
roti
po
).
•A
ss
oc
iare
un
tip
oa
un
og
ge
tto
:–
perm
ett
ed
iri
leva
rein
man
iera
au
tom
ati
ca
valo
rich
en
on
sia
no
co
mp
resi
nell
’in
sie
me
di
defi
niz
ion
ee
op
era
zio
nin
on
co
nsen
tite
.
3.1
Og
gett
i (I
I)
113
•C
os
tru
ttic
he
intr
od
uc
on
on
uo
ve
en
tità
:–
dic
hia
razio
ni;
–d
efi
niz
ion
i.
•D
ich
iara
zio
ni:
–en
tità
acu
iil
co
mp
ilato
ren
on
asso
cia
locazio
ni
dim
em
ori
ao
azio
nieseg
uib
ili;
–esem
pio
:d
ich
iara
zio
nid
iti
po
.
•D
efi
niz
ion
i:–
en
tità
acu
iil
co
mp
ilato
reasso
cia
locazio
ni
di
mem
ori
ao
azio
nieseg
uib
ili;
–esem
pio
:d
efi
niz
ion
id
iva
riab
ili
od
ico
sta
nti
(co
nn
om
e).
•N
om
en
cla
tura
co
ns
en
tita
inC
++
:–
sp
esso
no
nè
sem
pli
ce
né
co
nven
ien
tetr
att
are
sep
ara
tam
en
ted
ich
iara
zio
nie
defi
niz
ion
i;
–co
nd
ich
iara
zio
ne
si
pu
òin
ten
dere
sia
un
ad
ich
iara
zio
ne
ve
rae
pro
pri
asia
un
ad
efi
niz
ion
e(l
ed
ich
iara
zio
nico
mp
ren
do
no
led
efi
niz
ion
i).
3.2
Dic
hia
razio
ni e D
efi
niz
ion
i
114
Tip
i:T
ipifo
nd
am
en
tali
Tip
id
eri
va
ti
•T
ipifo
nd
am
en
tali:
–ti
pip
red
efi
nit
i;
–ti
pien
um
era
zio
ne.
Tip
ip
red
efi
nit
i:–
tip
oin
tero
(in
t)e
tip
on
atu
rale
(un
sig
ned
);
–ti
po
reale
(do
ub
le);
–ti
po
bo
ole
an
o(b
oo
l);
–ti
po
cara
ttere
(ch
ar)
.
•I
tip
ifo
nd
am
en
tali
so
no
ch
iam
ati
an
ch
eti
pi
ari
tmeti
ci.
•Il
tip
oin
tero
eil
tip
ore
ale
so
no
dett
iti
pi
nu
meri
ci.
•Il
tip
oin
tero
,il
tip
ob
oo
lean
o,
ilti
po
cara
ttere
ed
iti
pien
um
era
tiso
no
dett
iti
pid
iscre
ti.
•T
ipid
eri
va
ti:
–si
ott
en
go
no
ap
art
ire
daiti
pip
red
efi
nit
i;
–p
erm
ett
on
od
ico
str
uir
estr
utt
ure
dati
più
co
mp
lesse.3.2
Tip
i d
el
C+
+
115
3.3
Tip
o i
nte
ro (
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;
int
i1 =
7;
int
i2(7
);
int
i3 =
0, i4
, i5
= 6
;
i1 =
-7;
// i1 =
-7 (
cam
bia
mento
di segno)
i2 =
i1 +
3;
// i2 =
-4 (
som
ma)
i2 =
i1 -
1;
// i2 =
-8 (
sott
razio
ne)
i2 =
i1 *
2;
// i2 =
-14 (
moltip
licazio
ne)
i4 =
1 /
2;
// i4 =
0 (
quozie
nte
)
i5 =
1 %
2;
// i5 =
1 (
resto
)
i3 =
1 /
2 *
2 +
1 %
2;
// i3 =
1 (
a=
(a/b
)*b +
a%
b)
co
ut
<<
i3 <
< e
nd
l;
syste
m("
PA
US
E")
;
retu
rn 0
;
} 1 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
116
3.3
Tip
o i
nte
ro (
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
// tip
o s
hort
int
sh
ort
in
t s1 =
1;
// lett
era
le int
sh
ort
s2 =
2;
// tip
o long int
lon
g in
t ln
1 =
6543;
// lett
era
le int
lon
g ln
2 =
6543L
;//
lett
era
le long int
(suff
isso L
)lo
ng
ln
3 =
6543l;
//
lett
era
le long int
(suff
isso l)
// lett
era
le int
ott
ale
, pre
fisso 0
(zero
)in
t o
tt =
011;
// o
tt =
9 (
lett
era
le inte
ro o
ttale
)
// lett
era
le int
esadecim
ale
, pre
fisso 0
x o
0X
int
esad
1 =
0xF
;//
esad1 =
15
int
esad
2 =
0X
F;
// esad2 =
15
co
ut
<<
ott
<<
en
dl <
< e
sad
1 <
< e
nd
l;co
ut
<<
esad
2 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 9 15
15
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
117
3.3
Tip
o i
nte
ro (
III)
De
fin
izio
ne
di
un
in
tero
co
n i
l fo
rma
lis
mo
di
Ba
ck
us
e N
au
r
basic
-in
t-d
efi
nit
ion
int
int-
sp
ecif
ier-
list
;
int-
sp
ecif
ier-
list
int-
sp
ecif
ier
int-
sp
ecif
ier,
int-
sp
ecif
ier-
list
int-
sp
ecif
ier
iden
tifi
er
int-
init
iali
zer|
op
t
int-
init
iali
zer
=exp
ressio
n
( exp
ressio
n
)
Osserv
azio
ni:
•se
Nè
iln
um
ero
di
bit
imp
ieg
ati
per
rap
pre
sen
tare
gli
inte
ri,ivalo
rivan
no
da
-2**
(N-1
)a
2**
(N-1
)-1;
•valo
reti
pic
od
iN
:32.
118
3.3
Tip
o I
nte
ro(I
V)
int-
sp
ecif
ier-
list
basic
-in
t-d
efi
nit
ion
iden
tifi
er
int-
sp
ecif
ier
Alb
ero
di d
eri
vazio
ne p
er
la d
efi
niz
ion
e:
in
t i
= 1
, j =
2;
int
int-
sp
ecif
ier-
list
;
,
=exp
ressio
nin
t-sp
ecif
ier
iden
tifi
er
=exp
ressio
n
i
j
lett
er
lett
er
dig
it
1
lite
ral
dig
it
2
lite
ral
119
3.3
.1 T
ipo
un
sig
ned
(I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
// tip
o u
nsig
ned int
un
sig
ned
in
t u
1 =
1U
; //
lett
era
le u
nsig
ned,
suff
isso U
un
sig
ned
u2 =
2u
; /
/ le
ttera
le u
nsig
ned,
suff
isso u
// tip
o u
nsig
ned s
hort
int
un
sig
ned
sh
ort
in
t u
3 =
3;
un
sig
ned
sh
ort
u4 =
4;
// tip
o u
nsig
ned long int
un
sig
ned
lo
ng
in
t u
5 =
5555;
un
sig
ned
lo
ng
u6 =
6666U
L;
un
sig
ned
lo
ng
u7 =
7777L
U;
// lett
era
le u
nsig
ned long,
suff
isso U
L (
ul)
un
sig
ned
sh
ort
in
t u
8 =
-0X
0001;
// W
arn
ing
co
ut
<<
u1 <
< '\t
' <
< u
2 <
< e
nd
l;co
ut
<<
u3 <
< '\t
' <
< u
4 <
< e
nd
l;co
ut
<<
u5 <
< '\t
' <
< u
6 <
< '\t
' <
< u
7 <
< e
nd
l;co
ut
<<
u8 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 1
2
3
4
5555
6666
7777
65535
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
120
3.3
.1 T
ipo
un
sig
ned
(II
)
Osserv
azio
ni:
•se N
è i
l n
um
ero
di b
it im
pie
gati
per
rap
pre
sen
tare
g
li in
teri
, i valo
ri v
an
no
da 0 a
2**
N -
1;
•Il
tip
o u
nsig
ned
èu
tili
zzato
pri
ncip
alm
en
te p
er
op
era
zio
ni a b
asso
liv
ell
o:
–il
co
nte
nu
to d
i alc
un
e c
ell
e d
i m
em
ori
a n
on
è
vis
to c
om
e u
n v
alo
re n
um
eri
co
, m
a c
om
e u
na
co
nfi
gu
razio
ne d
i b
it.
Op
era
tori
bit
a b
it:
|
OR
bit
a b
it
&
AN
D b
it a
bit
^ O
R e
sclu
siv
o b
it a
bit
~ co
mp
lem
en
to b
it a
bit
<<
tr
asla
zio
ne a
sin
istr
a
>>
tr
asla
zio
ne a
destr
a
121
3.3
.1 T
ipo
un
sig
ned
(II
)
ab
|&
^~
00
00
01
01
10
11
10
10
10
11
11
00
122
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
un
sig
ned
sh
ort
a =
0xF
FF
9;
// 1
111 1
111 1
111 1
001 (
65529)
un
sig
ned
sh
ort
b =
~a;
// 0
000 0
000 0
000 0
110 (
6)
un
sig
ned
sh
ort
c =
0x0013;
// 0
000 0
000 0
001 0
011 (
19)
un
sig
ned
sh
ort
c1,
c2,
c3;
c1 =
b |
c;
// 0
000 0
000 0
001 0
111 (
23)
c2 =
b &
c;
// 0
000 0
000 0
000 0
010 (
2)
c3 =
b ^
c;
// 0
000 0
000 0
001 0
101 (
21)
un
sig
ned
sh
ort
b1, b
2;
b1 =
b <
< 2
;//
0000 0
000 0
001 1
000 (
24)
b2 =
b >
> 1
;//
0000 0
000 0
000 0
011 (
3)
co
ut
<<
a <
< '\t
' <
< b
<<
'\t
' <
< c
<<
en
dl;
co
ut
<<
c1 <
< '\t
' <
< c
2 <
< '\t
' <
< c
3 <
< e
nd
l;co
ut
<<
b1 <
< '\t
' <
< b
2 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 65529
6
19
23
2
21
24
3P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
. . .
3.3
.1 T
ipo
un
sig
ned
(II
I)
123
3.4
Tip
o r
eale
(I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
// tip
o d
ouble
d
ou
ble
d1 =
3.3
;d
ou
ble
d2 =
-12.1
4e-3
, d
3 =
1.5
1;
// tip
o f
loat
flo
at
f =
-2.2
;fl
oat
g =
f -
12.1
2F
;//
lett
era
le f
loat,
suff
isso F
(f)
lon
g d
ou
ble
h =
+0.1
;lo
ng
do
ub
le k
= 1
.23e+
12L
;//
lett
era
le long d
ouble
, suff
isso L
(l)
co
ut
<<
d1 <
< '\t
' <
< d
2 <
< '\t
' <
< d
3 <
< e
nd
l;co
ut
<<
f <
< '\t
' <
< g
<<
en
dl;
co
ut
<<
h <
< '\t
' <
< k
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 3.3
-
0.0
1214
1.5
1-2
.2
-1
4.3
20.1
1
.23e+
012
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
124
3.4
Tip
o r
eale
(II
)
Le
tte
rale
re
ale
(fo
rma
es
tes
a):
10 .
56 E
-3
•la
part
e i
nte
ra o
la p
art
e f
razio
nari
a,
se v
alg
on
o z
ero
,
po
sso
no
essere
om
esse.
Le
op
era
zio
ni s
ug
li in
teri
e s
ui re
ali s
i in
dic
an
o
co
n g
li s
tes
si s
imb
oli (
so
vra
pp
os
izio
ne
o
ov
erl
oa
din
g),
ma
so
no
op
era
zio
ni d
ive
rse
.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
1,
j =
2;
int
z =
i / j;
// 0
flo
at
f1 =
1.0
/ 2
.0;
// 0
.5fl
oat
f2 =
1 /
2;
// 0
flo
at
f3 =
(fl
oat)
i / j;
// 0
.5co
ut
<<
z <
< '\t
' <
< f
1 <
< '\t
' <
< f
2 <
< '\t
' <
< f
3 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 0
0
.5
0
0
.5P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
Pa
rte
In
tera
Pa
rte
Fra
zio
na
ria
Co
mp
on
en
te in
vir
go
la fis
sa
125
3.5
Tip
o b
oo
l (I
)
Tip
ob
oo
l:
valo
ri:
co
sta
nti
pre
defi
nit
e f
als
ee t
rue
(co
dif
icati
co
n g
li in
teri
0 e
1,
risp
ett
ivam
en
te).
Op
era
zio
ni:
|| O
R l
og
ico
o d
isg
iun
zio
ne
&&
A
ND
lo
gic
o o
co
ng
iun
zio
ne
!
NO
T lo
gic
o o
neg
azio
ne
p
q
p ||q
p&
&q
!p--
----
----
----
----
----
----
----
----
----
----
----
----
----
--fa
lse
fals
efa
lse
fals
etr
ue
fals
e
tru
etr
ue
fals
etr
ue
tru
e
fals
etr
ue
fals
efa
lse
tru
e
tru
etr
ue
tru
efa
lse
126
#in
clu
de
<c
std
lib
>
#in
clu
de
<io
str
ea
m>
us
ing
na
me
sp
ac
e s
td;
int
ma
in()
{
bo
ol b
1 =
tru
e,
b2
= f
als
e;
bo
ol b
3 =
b1
&&
b2
;
//
b3
= f
als
e
bo
ol b
4 =
b1
||
b2
;
// b
4 =
tru
e
bo
ol b
5 =
b1
||
b2
&&
fa
lse
;
// b
5 =
tru
e (
AN
D p
rece
de
nza
ma
gg
iore
di O
R)
bo
ol b
6 =
!b
2||
b2
&&
fa
lse
;
// b
6 =
tru
e (
NO
T p
rec.
ma
gg
iore
di A
ND
e O
R)
co
ut
<<
b3
<<
'\t
' <
< b
4 <
< '\t
' <
< b
5;
co
ut
<<
'\t
' <
< b
6 <
< e
nd
l;
sys
tem
("P
AU
SE
");
retu
rn 0
;
} 0
1
1
1P
rem
ere
un
ta
sto
pe
r c
on
tin
ua
re .
. .
3.5
Tip
o b
oo
l (I
I)
127
3.5
Op
era
tori
di
co
nfr
on
to e
lo
gic
i (I
)
I ti
pi ari
tmeti
ci
po
sso
no
uti
lizzare
gli
op
era
tori
di
co
nfr
on
to:
==
u
gu
ale
!=
d
ivers
o
> m
ag
gio
re
>=
m
ag
gio
re o
ug
uale
< m
ino
re
<=
m
ino
re o
ug
uale
Op
era
tori
di co
nfr
on
to:
–il
ris
ult
ato
è u
n b
oo
lean
o, ch
e v
ale
fals
ese l
a
co
nd
izio
ne e
sp
ressa d
all
’op
era
tore
no
n è
veri
ficata
, tr
ue
alt
rim
en
ti;
–g
li o
pera
tori
di co
nfr
on
to s
i d
ivid
on
o i
n:
•o
pera
tori
di u
gu
ag
lian
za (
==
e
!
= )
;
•o
pera
tori
di re
lazio
ne;
–i p
rim
i h
an
no
un
a p
reced
en
za p
iù b
assa d
eg
li
alt
ri.
128
3.5
Op
era
tori
di
co
nfr
on
to e
lo
gic
i (I
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
bo
ol b
1,
b2, b
3, b
4,
b5;
int
i =
10;
flo
at
f =
8.0
;
b1 =
i >
3 &
& f
< 5
.0;
// fals
e
b2 =
i =
= f
< 5
.0;
// fals
e
b3 =
i =
= i;
// tru
e
b4 =
4 <
i <
7;
// tru
e ?
???
b5 =
4 <
i &
& i
< 7
;//
fals
e
co
ut
<<
b1 <
< '\t
' <
< b
2 <
< '\t
' <
< b
3 <
< e
nd
l;co
ut
<<
b4 <
< '\t
' <
< b
5 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 0
0
1
1
0
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
129
3.6
Tip
o c
ara
ttere
(I)
•in
sie
me
di va
lori
: cara
tteri
op
po
rtu
nam
en
te c
od
ific
ati
(g
en
era
lmen
te
un
cara
ttere
occu
pa u
n b
yte
).
•o
pe
razio
ni s
ui c
ara
tteri
:so
no
po
ssib
ili tu
tte l
e o
pera
zio
ni d
efi
nit
e s
ug
li
inte
ri, ch
e a
gis
co
no
su
lle lo
ro c
od
ific
he.
Co
dif
ica u
sata
:
–d
ipen
de d
all
’im
ple
men
tazio
ne;
–la
più
co
mu
ne è
qu
ell
a A
SC
II.
Lett
era
le c
ara
ttere
:
–cara
ttere
racch
iuso
fra
ap
ici;
–esem
pio
:
•Il le
tte
rale
'a
' ra
pp
rese
nta
il ca
ratte
re a
.
Cara
tteri
di co
ntr
oll
o:
–ra
pp
resen
tati
da c
om
bin
azio
ni sp
ecia
li c
he
iniz
ian
o c
on
un
a b
arr
a i
nvert
ita (
seq
uen
ze d
i escap
e).
Alc
un
i esem
pi:
–n
uo
va r
iga (
LF
)\n
–ta
bu
lazio
ne o
rizzo
nta
le
\t
–ri
torn
o c
arr
ell
o (
CR
)\r
–b
arr
a i
nvert
ita
\\
–ap
ice
\'
–vir
go
lett
e
\"
130
3.6
Tip
o c
ara
ttere
(II
)
Ord
inam
en
to:
–tu
tte l
e c
od
ific
he r
isp
ett
an
o l
'ord
ine a
lfab
eti
co
fr
a l
e l
ett
ere
, e l
'ord
ine n
um
eri
co
fra
le c
ifre
;
–la
rela
zio
ne f
ra l
ett
ere
maiu
sco
le e
lett
ere
m
inu
sco
le, o
fra
cara
tteri
no
n a
lfab
eti
ci,
no
n è
p
resta
bil
ita (
per
esem
pio
, in
AS
CII
si
ha 'A
' <
'a
').
Cara
ttere
:
–p
uò
essere
scri
tto
usan
do
il su
o v
alo
re n
ell
a
co
dif
ica a
do
ttata
dall
’im
ple
men
tazio
ne (
per
esem
pio
AS
CII
). I
l valo
re p
uo
’ essere
esp
resso
in
decim
ale
, o
ttale
ed
esad
ecim
ale
.
Valo
ri o
ttali
:
–fo
rmati
da c
ifre
ott
ali
pre
ced
ute
da u
na b
arr
a
invert
ita.
Valo
ri e
sad
ecim
ali
:
–fo
rmati
da c
ifre
esad
ecim
ali
pre
ced
ute
da u
na
barr
a i
nvert
ita e
dal cara
ttere
x (
no
n X
).
No
ta: –
le s
eq
uen
ze d
i escap
e e
le r
ap
pre
sen
tazio
ni
ott
ale
e e
sad
ecim
ale
di u
n c
ara
ttere
, q
uan
do
ra
pp
resen
tan
o u
n lett
era
le c
ara
ttere
, van
no
ra
cch
iuse f
ra a
pic
i;
–esem
pi:
–'\n
'
'\1
5'
131
3.6
Tip
o c
ara
ttere
(II
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>
usin
g n
am
esp
ace s
td;
int
main
(){
ch
ar
c1 =
'c', t
= '\t
', d
= '\n
';ch
ar
c2 =
'\x
63';
//
'c' (
in e
sadecim
ale
)ch
ar
c3 =
'\1
43';
//
'c' (
in o
ttale
)ch
ar
c4 =
99;
// 'c
' (in
decim
ale
)
co
ut
<<
c1 <
< t
<<
c2 <
< t
<<
c3 <
< t
<<
c4 <
< d
;
ch
ar
c5 =
c1 +
1;
// 'd
'ch
ar
c6 =
c1 -
2;
// 'a
'ch
ar
c7 =
4 *
d +
3;
// '+
' (!!!)
int
i =
c1 -
'a';
// 2
co
ut
<<
c5 <
< t
<<
c6 <
< t
<<
c7 <
< t
<<
i <
< d
;
bo
ol m
= 'a' <
'b
', n
= 'a' >
'c';
// m
= tru
e, n =
fals
e
co
ut
<<
m <
< '\n
' <
< n
<<
'\n
';syste
m("
PA
US
E")
;re
turn
0;
} c
c
c
c
d
a
+
21 0 P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
132
3.7
Tip
i en
um
era
zio
ne (
I)
Tip
i en
um
era
zio
ne (
o e
nu
mera
ti):
–co
sti
tuit
i d
a in
sie
mi
di co
sta
nti
in
tere
, d
efi
nit
e
dal p
rog
ram
mato
re,
cia
scu
na i
nd
ivid
uata
da u
n
iden
tifi
cato
re e
dett
a e
nu
mera
tore
;
–u
tili
zzati
per
vari
ab
ili
ch
e a
ssu
mo
no
so
lo u
n
nu
mero
lim
itato
di valo
ri;
–serv
on
o a
rap
pre
sen
tare
in
form
azio
ni n
on
n
um
eri
ch
e;
–n
on
so
no
pre
defi
nit
i, m
a d
efi
nit
i d
al
pro
gra
mm
ato
re.
No
ta: –
è p
ossib
ile e
ffett
uare
sep
ara
tam
en
te l
a
dic
hia
razio
ne d
i u
n t
ipo
en
um
era
zio
ne e
la
defi
niz
ion
e d
i vari
ab
ili
di q
uel ti
po
.
Op
era
zio
ni:
–ti
pic
am
en
te,
qu
ell
e d
i co
nfr
on
to;
–so
no
po
ssib
ili tu
tte l
e o
pera
zio
ni d
efi
nit
e s
ug
li
inte
ri, ch
e a
gis
co
no
su
lla c
od
ific
a d
eg
li
en
um
era
tori
.
133
3.7
Tip
i en
um
era
zio
ne (
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
en
um
Gio
rni {L
UN
,MA
R,M
ER
,GIO
,VE
N,S
AB
,DO
M};
Gio
rni o
gg
i =
MA
R;
og
gi =
ME
R;
int
i =
og
gi;
// 2
, convers
ione im
plic
ita
//o
gg
i =
ME
R-M
AR
; //
ER
RO
RE
! M
ER
-MA
R->
inte
ro//
og
gi =
3;
// E
RR
OR
E!
3 c
osta
nte
inte
ra//
og
gi =
i;
// E
RR
OR
E!
i e' u
n inte
ro
co
ut
<<
in
t(o
gg
i) <
< e
nd
l;//
2co
ut
<<
og
gi <
< e
nd
l;//
2,
conv.
implic
ita
en
um
{R
OS
SO
, G
IAL
LO
, V
ER
DE
} sem
afo
ro;
sem
afo
ro =
GIA
LL
O;
co
ut
<<
sem
afo
ro <
< e
nd
l;//
1
en
um
{IN
IZ1=
10, IN
IZ2, IN
IZ3=
9, IN
IZ4};
co
ut
<<
IN
IZ1 <
< '\t
' <
< IN
IZ2 <
< '\t
';co
ut
<<
IN
IZ3 <
< '\t
' <
< IN
IZ4 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 2 2 1 10
11
9
10
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
134
3.8
.1 C
on
vers
ion
i im
pli
cit
e (
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
10,
j;fl
oat
f =
2.5
, h
;d
ou
ble
d =
1.2
e+
1;
ch
ar
c =
'd
';
h =
f +
1;
// 3
.5co
ut
<<
h <
< '\t
';
j =
f +
3.1
;//
5co
ut
<<
j <
< e
nd
l;
d =
i +
1;
// 1
1co
ut
<<
d <
< '\t
';
d =
f +
d;
// 1
3.5
co
ut
<<
d <
< e
nd
l;
j =
c -
'a';
// 3
co
ut
<<
j <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} 3.5
5
11
13.5
3 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
135
3.8
.1 C
on
vers
ion
i im
pli
cit
e (
II)
Osserv
azio
ne:
•n
ell
a c
on
vers
ion
e d
a d
ou
ble
a i
nt
si
pu
ò a
vere
un
a
perd
ita d
i in
form
azio
ne, p
oic
hé a
vvie
ne u
n
tro
ncam
en
to d
ell
a p
art
e d
ecim
ale
;
•in
alc
un
i casi,
nell
a c
on
vers
ion
e d
a i
nt
a d
ou
ble
si
pu
ò v
eri
ficare
un
a p
erd
ita d
i p
recis
ion
e p
er
arr
oto
nd
am
en
to, p
oic
hé g
li in
teri
so
no
rap
pre
sen
tati
in f
orm
a e
satt
a e
d i
reali
so
no
rap
pre
sen
tati
in
fo
rma
ap
pro
ssim
ata
.
•E
sem
pi:
–il
reale
1588.5
co
nvert
ito
nell
’in
tero
1588;
–l’
inte
ro 0
X7F
FF
FF
F0
(2147483632)
convert
ito n
el re
ale
0X
80000000
(2147483648)
Co
nvers
ion
i p
iù s
ign
ific
ati
ve p
er
gli
op
era
tori
bin
ari
(a
ritm
eti
ci)
:
–se u
n o
pera
tore
ha e
ntr
am
bi
gli
op
era
nd
i in
teri
o
reali
, m
a d
i lu
ng
hezza d
ivers
a,
qu
ell
o d
i lu
ng
hezza m
ino
re v
ien
e c
on
vert
ito
al
tip
o d
i q
uell
o d
i lu
ng
hezza m
ag
gio
re;
–se u
n o
pera
tore
ha u
n o
pera
nd
o in
tero
ed
un
o
reale
, il
valo
re d
ell
’op
era
nd
o in
tero
vie
ne
co
nvert
ito
nell
a r
ap
pre
sen
tazio
ne r
eale
, ed
il
risu
ltato
dell
’op
era
zio
ne è
un
reale
.
136
3.8
.1 C
on
vers
ion
i im
pli
cit
e (
III)
Co
nvers
ion
i p
iù s
ign
ific
ati
ve p
er
l’asseg
nam
en
to:
–a u
na v
ari
ab
ile d
i ti
po
reale
pu
ò e
ssere
asseg
nato
un
valo
re d
i ti
po
in
tero
;
–a u
na v
ari
ab
ile d
i ti
po
in
tero
pu
ò e
ssere
asseg
nato
un
valo
re d
i ti
po
reale
, d
i ti
po
b
oo
lean
o, d
i ti
po
cara
ttere
o d
i u
n t
ipo
en
um
era
zio
ne;
–a u
na v
ari
ab
ile d
i ti
po
cara
ttere
pu
ò e
ssere
asseg
nato
un
valo
re d
i ti
po
in
tero
, d
i ti
po
b
oo
lean
o, o
di u
n t
ipo
en
um
era
zio
ne.
No
ta: –
a u
na v
ari
ab
ile d
i ti
po
bo
ole
an
o o
di u
n t
ipo
en
um
era
zio
ne n
on
pu
ò e
ssere
asseg
nato
un
valo
re c
he n
on
sia
del su
o t
ipo
.
Co
nvers
ion
i im
pli
cit
e in
seq
uen
za:
–esem
pio
: a u
na v
ari
ab
ile d
i ti
po
reale
pu
ò
essere
asseg
nato
un
valo
re d
i ti
po
cara
ttere
(c
on
vers
ion
e d
a c
ara
ttere
a i
nte
ro, q
uin
di d
a
inte
ro a
reale
).
137
3.8
.2 C
on
vers
ion
i esp
licit
e
Op
era
tore
sta
tic_cast:
–e
ffe
ttu
a u
na
co
nve
rsio
ne
di
tip
o q
ua
nd
o e
sis
te l
a
co
nve
rsio
ne
im
pli
cit
a i
nve
rsa
;
–p
uo
es
se
re u
sa
to p
er
eff
ett
ua
re c
on
ve
rsio
ni
di
tip
o
pre
vis
te d
all
a c
on
ve
rsio
ne
im
pli
cit
a.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
en
um
Gio
rni {L
UN
,MA
R,M
ER
,GIO
,VE
N,S
AB
,DO
M};
int
i; G
iorn
i g
1 =
MA
R,
g2, g
3;
i =
g1;
g1 =
sta
tic_cast<
Gio
rni>
(i);
g2 =
(G
iorn
i) i;
//
cast
g3 =
Gio
rni (i
);
// n
ota
zio
ne f
unzio
nale
co
ut
<<
g1 <
< '\t
' <
< g
2 <
< '\t
' <
< g
3 <
< e
nd
l;
int
j =
(in
t) 1
.1;
// c
ast,
1fl
oat
f =
flo
at(
2);
// n
ota
zio
ne f
unzio
nale
co
ut
<<
j <
< '\t
' <
< f
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 1
1
1
1
2
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
138
3.9
Dic
hia
razio
ni d
i o
gg
ett
i co
sta
nti
Og
gett
o c
osta
nte
:
–si
usa l
a p
aro
la c
on
st
nell
a s
ua d
efi
niz
ion
e;
–è r
ich
iesto
sem
pre
un
in
izia
lizzato
re.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
co
nst
lon
g in
t i =
0;
co
nst
do
ub
le e
1 =
3.5
;co
nst
lon
g d
ou
ble
e2 =
2L
* e
1;
co
ut
<<
i <
< '\t
' <
< e
1 <
< '\t
' <
< e
2 <
< e
nd
l;
//i =
3;
// E
RR
OR
E!
//co
nst
int
j;//
ER
RO
RE
!
syste
m("
PA
US
E")
;re
turn
0;
} 0
3
.5
7
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
139
3.1
0 O
pera
tore
siz
eo
f (I
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
co
ut
<<
"ch
ar
\t"
<<
siz
eo
f(ch
ar)
<<
en
dl;
// 1
co
ut
<<
"sh
ort
\t"
<<
siz
eo
f(sh
ort
) <
< e
nd
l;//
2co
ut
<<
"in
t \t
" <
< s
izeo
f(in
t) <
< e
nd
l;//
4co
ut
<<
"lo
ng
\t"
<<
siz
eo
f(lo
ng
) <
< e
nd
l;//
4
co
ut
<<
"u
nsig
ned
ch
ar
\t";
co
ut
<<
siz
eo
f(u
nsig
ned
ch
ar)
<<
en
dl;
// 1
co
ut
<<
"u
nsig
ned
sh
ort
\t"
;co
ut
<<
siz
eo
f(u
nsig
ned
sh
ort
) <
< e
nd
l;//
2co
ut
<<
"u
nsig
ned
in
t \t
";co
ut
<<
siz
eo
f(u
nsig
ned
in
t) <
< e
nd
l;//
4co
ut
<<
"u
nsig
ned
lo
ng
\t"
; co
ut
<<
siz
eo
f(u
nsig
ned
lo
ng
) <
< e
nd
l;//
4
co
ut
<<
"fl
oat
\t"
<<
siz
eo
f(fl
oat)
<<
en
dl;
// 4
co
ut
<<
"d
ou
ble
\t"
;co
ut
<<
siz
eo
f(d
ou
ble
) <
< e
nd
l;//
8co
ut
<<
"lo
ng
do
ub
le \t"
;co
ut
<<
siz
eo
f(lo
ng
do
ub
le)
<<
en
dl;
// 1
2
syste
m("
PA
US
E")
;re
turn
0;
}
140
3.1
0 O
pera
tore
siz
eo
f (I
I)
ch
ar
1
sh
ort
2
int
4lo
ng
4u
nsig
ned
ch
ar
1
un
sig
ned
sh
ort
2
un
sig
ned
in
t
4u
nsig
ned
lo
ng
4fl
oat
4
do
ub
le 8
lon
g d
ou
ble
12
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
141
3.1
0 O
pera
tore
siz
eo
f (I
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
co
ut
<<
"co
sta
nte
cara
ttere
";
co
ut
<<
siz
eo
f 'c
' <
< e
nd
l;//
1co
ut
<<
"co
sta
nte
cara
ttere
";
co
ut
<<
siz
eo
f('c
') <
< e
nd
l;//
1
ch
ar
c =
0;
co
ut
<<
"vari
ab
ile c
ara
ttere
" <
< s
izeo
f c <
< e
nd
l; //
1
//co
ut
<<
"ch
ar
" <
< s
izeo
f ch
ar
<<
en
dl;
ER
RO
RE
!
syste
m("
PA
US
E")
;re
turn
0;
} co
sta
nte
cara
ttere
1co
sta
nte
cara
ttere
1vari
ab
ile c
ara
ttere
1P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
142
4.1
Str
utt
ura
di
un
pro
gra
mm
a
ba
sic
-ma
in-p
rog
ram
int
ma
in ()
co
mp
ou
nd
-sta
tem
en
t
co
mp
ou
nd
-sta
tem
en
t
{s
tate
me
nt-
se
q}
sta
tem
en
t
de
cla
rati
on
-sta
tem
en
t
de
fin
itio
n-s
tate
me
nt
ex
pre
ss
ion
-sta
tem
en
t
str
uc
ture
d-s
tate
me
nt
jum
p-s
tate
me
nt
lab
ele
d-s
tate
me
nt
Istr
uzio
ni d
i d
ich
iara
zio
ne
/de
fin
izio
ne:
decla
rati
on
-sta
tem
en
t
defi
nit
ion
-sta
tem
en
t
ha
nn
o la
fo
rma
vis
ta in
pre
ce
de
nza
.
Sim
bo
li in
tro
do
tti d
al p
rog
ram
ma
tore
:
•d
evo
no
es
se
re d
ich
iara
ti/d
efi
nit
i p
rim
a d
i e
ss
ere
u
sa
ti;
•n
on
è n
ec
es
sa
rio
ch
e l
e d
ich
iara
zio
ni/
de
fin
izio
ni
pre
ce
da
no
le
alt
re i
str
uzio
ni.
143
4.2
Esp
ressio
ni d
i asseg
nam
en
to (
I)
Sin
tassi:
exp
ressio
n-s
tate
men
t
exp
ressio
n|o
pt
;
Esp
ressio
ne:
–fo
rmata
da lett
era
li,
iden
tifi
cato
ri, o
pera
tori
, ecc.,
e s
erv
e a
calc
ola
re u
n v
alo
re;
–o
pzio
nale
, p
erc
hé i
n c
ert
i casi
pu
ò e
ssere
u
tile
u
sare
un
a istr
uzio
ne v
uo
ta (
ch
e n
on
co
mp
ie
alc
un
a o
pera
zio
ne)
ind
ican
do
il so
lo c
ara
ttere
‘;
’ .
Esp
ressio
ne c
om
un
e:
–asseg
nam
en
to (
nu
ovo
valo
re a
un
a v
ari
ab
ile);
–sin
tassi:
basic
-assig
nm
en
t-exp
ressio
n
vari
ab
le-n
am
e=
exp
ressio
n
Eff
ett
o:
–calc
ola
re i
l valo
re d
ell
’esp
ressio
ne a
destr
a
dell
’op
era
tore
di asseg
nam
en
to (
‘=
‘);
–so
sti
tuir
lo a
l valo
re d
ell
a v
ari
ab
ile.
No
me a
sin
istr
a d
ell
’op
era
tore
di asseg
nam
en
to:
–in
div
idu
a u
na v
ari
ab
ile,
ossia
un
lvalu
e(l
eft
valu
e).
Esp
ressio
ne a
destr
a d
ell
’op
era
tore
di asseg
nam
en
to :
–ra
pp
resen
ta u
n v
alo
re,
ossia
un
rvalu
e(r
igh
t valu
e).
144
4.2
Esp
ressio
ni d
i asseg
nam
en
to (
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
0,
j =
1, k;
i =
3;
co
ut
<<
i <
< e
nd
l;
// 3
j =
i;
co
ut
<<
j <
< e
nd
l;//
3
k =
j =
i =
5;
// a
ssocia
tivo a
destr
aco
ut
<<
i <
< '\t
' <
< j <
< '\t
' <
< k
<<
en
dl;
// 5
5 5
k =
j =
2 *
(i =
3);
co
ut
<<
i <
< '\t
' <
< j <
< '\t
' <
< k
<<
en
dl;
// 3
6 6
//k =
j +
1 =
2 *
(i
= 1
00);
// E
RR
OR
E!
(j =
i)
= 1
0;
co
ut
<<
j <
< e
nd
l;
// 10 (
restitu
isce u
n l-v
alu
e)
syste
m("
PA
US
E")
;re
turn
0;
} 3 3 5
5
5
3
6
6
10
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
145
4.2
.1 A
ltri
op
era
tori
di
asseg
nam
en
to
ba
sic
-re
cu
rre
nc
e-a
ss
ign
me
nt
va
ria
ble
-na
me
= v
ari
ab
le-n
am
e ⊕
ex
pre
ss
ion
ba
sic
-co
mp
ou
nd
-as
sig
nm
en
tv
ari
ab
le-n
am
e ⊕
= e
xp
res
sio
n
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
0,
j =
5;
i +
= 5
;//
i =
i +
5co
ut
<<
i <
< e
nd
l;//
5
i *=
j +
1;
// i =
i *
(j +
1);
co
ut
<<
i <
< e
nd
l;//
30
i -
= j -
= 1
;//
associa
tivo a
destr
a;
co
ut
<<
i <
< e
nd
l;//
26
(i +
= 1
2)
= 2
;co
ut
<<
i <
< e
nd
l; /
/ re
stitu
isce u
n l-v
alu
e
syste
m("
PA
US
E")
;re
turn
0;
} 5 30
26
2 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
146
4.2
.2 In
cre
men
to e
decre
men
to
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i, j;
i =
0;
j =
0;
++
i; -
-j;
// i +
= 1
; j -=
1;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
1 -
1
i =
0;
j =
++
i;//
i +
= 1
; j =
i;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
1 1
i =
0;
i++
;co
ut
<<
i <
< e
nd
l;//
1
i =
0;
j =
i+
+;
// j =
i;
i +
= 1
;co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
1 0
//j =
++
i++
;//
ER
RO
RE
!j =
(+
+i)
++
;//
j =
i+
++
+;
// E
RR
OR
E!
int
k =
++
++
i;co
ut
<<
i <
< '\t
' <
< j <
< '\t
' <
< k
<<
en
dl;
// 5
2 5
syste
m("
PA
US
E")
;re
turn
0;
}
147
4.3
Esp
ressio
ni ari
tmeti
ch
e e
lo
gic
he (
I)
Calc
olo
dell
e e
sp
ressio
ni:
–ven
go
no
ris
pett
ate
le p
reced
en
ze e
le
asso
cia
tivit
à d
eg
li o
pera
tori
ch
e v
i co
mp
aio
no
;
Pre
ced
en
za:
–p
er
pri
mi ven
go
no
valu
tati
i f
att
ori
, calc
ola
nd
o i
valo
ri d
ell
e f
un
zio
ni e a
pp
lican
do
gli
op
era
tori
u
nari
(p
rim
a i
ncre
men
to e
decre
men
to
po
stf
issi,
po
i in
cre
men
to e
decre
men
to
pre
fissi,
NO
T lo
gic
o (
! )
, m
en
o u
nari
o (
-)
e p
iù
un
ari
o (
+))
;
–p
oi ven
go
no
valu
tati
i t
erm
ini,
ap
pli
can
do
gli
o
pera
tori
bin
ari
nel seg
uen
te o
rdin
e:
•q
uell
i m
olt
ipli
cati
vi
( *,
/ , %
);
•q
uell
i ad
dit
ivi
( +
, -
);
•q
uell
i d
i re
lazio
ne (
<, …
);
•q
uell
i d
i u
gu
ag
lian
za (
==
, !=
)
•q
uell
i lo
gic
i (n
ell
’ord
ine, &
&,
|| )
;
•q
uell
i d
i asseg
nam
en
to (
= , …
);
Pare
nte
si
ton
de (
co
pp
ia d
i sep
ara
tori
):
–fa
nn
o d
iven
tare
qu
alu
nq
ue e
sp
ressio
ne u
n
fatt
ore
, ch
e v
ien
e q
uin
di calc
ola
to p
er
pri
mo
.
148
4.3
Esp
ressio
ni ari
tmeti
ch
e e
lo
gic
he (
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
2,
j;j =
3 *
i +
1;
co
ut
<<
j <
< e
nd
l;//
7
j =
3 *
(i
+ 1
);co
ut
<<
j <
< e
nd
l;//
9
syste
m("
PA
US
E")
;re
turn
0;
} 7 9 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
149
4.3
Esp
ressio
ni ari
tmeti
ch
e e
lo
gic
he (
III)
Asso
cia
tivit
à:
•g
li o
pera
tori
ari
tmeti
ci
bin
ari
so
no
asso
cia
tivi
a
sin
istr
a;
•g
li o
pera
tori
un
ari
so
no
asso
cia
tivi
a d
estr
a;
•g
li o
pera
tori
di asseg
nam
en
to s
on
o a
sso
cia
tivi
a
destr
a.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
8,
j =
4, z;
z =
i / j /
2;
co
ut
<<
z <
< e
nd
l;//
1
z =
i / j *
2;
co
ut
<<
z <
< e
nd
l;//
4
z =
i / (
j *
2 )
;co
ut
<<
z <
< e
nd
l;//
1
z =
j *
2 /
i;
co
ut
<<
z <
< e
nd
l;//
1
syste
m("
PA
US
E")
;re
turn
0;
} 1 4 1 1 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
150
4.3
Esp
ressio
ni ari
tmeti
ch
e e
lo
gic
he (
IV)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
bo
ol k;
int
i =
0,
j =
5;
k =
i >
= 0
&&
j <
= 1
;//
(i >
= 0
) &
& (
j <
= 1
)co
ut
<<
k <
< e
nd
l;//
0
k =
i &
& j
|| !k
;
// (
i &
& j)
|| (
!k)
co
ut
<<
k <
< e
nd
l;//
1
k =
0 <
j <
4;
// A
TT
EN
ZIO
NE
!co
ut
<<
k <
< e
nd
l;//
1
k =
0 <
j &
& j
< 4
;co
ut
<<
k <
< e
nd
l;//
0
syste
m("
PA
US
E")
;re
turn
0;
} 0 1 1 0 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
151
4.3
Esp
ressio
ni ari
tmeti
ch
e e
lo
gic
he (
V)
Op
era
tori
&&
e |
|:•
so
no
asso
cia
tivi
a s
inis
tra;
•il
calc
olo
di u
n'e
sp
ressio
ne l
og
ica c
on
ten
en
te q
uesti
o
pera
tori
term
ina a
pp
en
a s
i p
uò
decid
ere
se
l'esp
ressio
ne è
, ri
sp
ett
ivam
en
te,
fals
a o
vera
.
// C
ort
oc
irc
uit
o
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
bo
ol k;
int
i =
0;
k =
(i >
= 0
) ||
(i+
+);
co
ut
<<
k <
< '\t
' <
< i <
< e
nd
l;//
1 0
k =
(i >
0)
|| (
i++
);co
ut
<<
k <
< '\t
' <
< i <
< e
nd
l;
// 0
1
k =
(i >
= 0
) &
& (
i <
= 1
00);
co
ut
<<
k <
< e
nd
l;//
1
k =
(i !=
0)
&&
(10 /
i >
= 1
0);
// O
Kco
ut
<<
k <
< e
nd
l;k =
(10 /
i >
= 1
0)
&&
( i !
= 0
);//
NO
!co
ut
<<
k <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
}
152
4.4
Op
era
tore
co
nd
izio
nale
(I)
e1 ?
e2
: e3
e1
esp
ressio
ne l
og
ica
Se e
1 è
vera
, il
valo
re r
esti
tuit
o d
all
’op
era
tore
co
nd
izio
nale
è i
l valo
re d
i e2,
alt
rim
en
ti d
ie3.
// L
eg
ge d
ue i
nte
ri e
sta
mp
a s
u u
scit
a s
tan
dard
il m
ino
re
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i, j, m
in;
co
ut
<<
"In
seri
sci
du
e n
um
eri
in
teri
" <
< e
nd
l;
cin
>>
i >
> j;
// 2
4
min
= (
i <
j ?
i :
j);
co
ut
<<
"Il
nu
mero
min
ore
e':
" <
< m
in <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e n
um
eri
in
teri
2 4 Il n
um
ero
min
ore
e':
2P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
153
4.4
Op
era
tore
co
nd
izio
nale
(II
)
// L
eg
ge t
re i
nte
ri e
d i
ncre
men
ta i
l m
ino
re
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i, j, z, m
in;
co
ut
<<
"In
seri
sci
tre n
um
eri
in
teri
" <
< e
nd
l;cin
>>
i >
> j >
> z
;
// 2
3 4
min
= i <
j ?
(i<
z ?
i+
+ :
z+
+)
: (j
< z
? j
++
: z
++
);co
ut
<<
"Il
nu
mero
min
ore
e':
" <
< m
in <
< e
nd
l;co
ut
<<
i <
< '\t
' <
< j <
< '\t
' <
< z
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
tre n
um
eri
in
teri
2 3 4 Il n
um
ero
min
ore
e':
23
3
4
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
154
6.
Istr
uzio
ni
str
utt
ura
te
Istr
uzio
ni s
tru
ttu
rate
:–
co
nsen
ton
o d
i sp
ecif
icare
azio
ni co
mp
lesse.
str
uctu
red
-sta
tem
en
t
co
mp
ou
nd
-sta
tem
en
t
sele
cti
on
-sta
tem
en
t
itera
tio
n-s
tate
men
t
Istr
uzio
ne
co
mp
os
ta:
–g
ià e
sam
inata
nell
a s
inta
ssi
di p
rog
ram
ma;
–co
nsen
te,
per
mezzo
dell
a c
op
pia
di
deli
mit
ato
ri {
e
} ,
di tr
asfo
rmare
un
a
qu
alu
nq
ue s
eq
uen
za d
i is
tru
zio
ni in
un
a
sin
go
la istr
uzio
ne.
–o
vu
nq
ue l
a s
inta
ssi
pre
ved
a u
n'istr
uzio
ne, si
pu
ò m
ett
ere
un
a s
eq
uen
za c
om
un
qu
e
co
mp
lessa d
i is
tru
zio
ni ra
cch
iusa t
ra i
du
e
deli
mit
ato
ri.
Istr
uzio
ni c
on
diz
ion
ali:
sele
cti
on
-sta
tem
en
t
if-s
tate
men
t
sw
itch
-sta
tem
en
t
if-s
tate
men
t
if (
co
nd
itio
n )
sta
tem
en
t
if (
co
nd
itio
n )
sta
tem
en
t e
lse
sta
tem
en
t 155
6.3
.1 Istr
uzio
ne i
f (I
)
// T
rova i
l m
ag
gio
re t
ra d
ue in
teri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
a,
b, m
ax;
cin
>>
a >
> b
;//
46
if (
a >
b)
max =
a;
els
e max =
b;
co
ut
<<
max <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} 4 6 6 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
156
6.3
.1 Istr
uzio
ne i
f (I
I)
// In
cre
men
ta o
decre
men
ta
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
a,
b;
cin
>>
a >
> b
;if
(a >
= b
) {
a+
+;
b+
+;
} els
e
{a--
; b
--;
} co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 4 6 3
5
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
157
6.3
.1 Istr
uzio
ne i
f (I
II)
// V
alo
re a
sso
luto
(if
sen
za p
art
e e
lse)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
a;
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
a;
if (
a <
0)
a =
-a;
co
ut
<<
"Il
valo
re a
sso
luto
e' ";
co
ut
<<
a <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
-4 Il v
alo
re a
sso
luto
e' 4
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
158
6.3
.1 Istr
uzio
ne i
f (I
V)
// L
eg
ge u
n n
um
ero
, in
cre
men
ta i
l n
um
ero
e//
lo
scri
ve s
e è
div
ers
o d
a 0
// (
if s
en
za e
sp
ressio
ne r
ela
zio
nale
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
i;
if (
i++
) co
ut
<<
"N
um
ero
in
cre
men
tato
" <
< i <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
2 Nu
mero
in
cre
men
tato
3P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
Inseri
sci
un
nu
mero
in
tero
0 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
N.B
.: L
’esp
ressio
ne n
ell
a c
on
diz
ion
e p
uò
resti
tuir
e u
n
valo
re a
ritm
eti
co
: se i
l valo
re è
0,
la c
on
diz
ion
e è
fa
lsa;
alt
rim
en
ti è
vera
.
159
6.3
.1 Istr
uzio
ne i
f (V
)
// If
in c
ascata
// if
(a >
0 )
if
( b
> 0
) a
++
; els
e b
++
;
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
a,
b;
co
ut
<<
"In
seri
sci
du
e n
um
eri
in
teri
" <
< e
nd
l;cin
>>
a >
> b
;if
(a >
0)
if (
b >
0)
a+
+;
els
e b+
+;
co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e n
um
eri
in
teri
3 5 4
5
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
NO
TA
BE
NE
la p
art
e e
lse
si ri
feri
sc
e a
lla
co
nd
izio
ne
più
vic
ina
(n
ell’e
se
mp
io, a
lla
co
nd
izio
ne
b
> 0
); 160
6.3
.1 Istr
uzio
ne i
f (V
I)
// S
cri
ttu
ra f
uo
rvia
nte
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
a,
b;
co
ut
<<
"In
seri
sci
du
e n
um
eri
in
teri
" <
< e
nd
l;cin
>>
a >
> b
;if
(a >
0)
if (
b >
0)
a+
+;
els
e b+
+;
co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e n
um
eri
in
teri
5 7 6
7
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
161
6.3
.1 Istr
uzio
ni
if (
VII
)
// S
cri
ve a
ste
risch
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
i;
if (
i =
= 1
)co
ut
<<
'*'
;els
e if (
i =
= 2
)co
ut
<<
"**
";els
e if (
i =
= 3
)co
ut
<<
"**
*";
els
e co
ut
<<
'!'
;co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?2 ** P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
162
6.3
.1 Istr
uzio
ne i
f (V
III)
// E
qu
azio
ne d
i seco
nd
o g
rad
o#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>#in
clu
de <
cm
ath
>u
sin
g n
am
esp
ace s
td;
int
main
(){
do
ub
le a
, b
, c;
co
ut
<<
"C
oeff
icie
nti
? "
<<
en
dl;
cin
>>
a >
> b
>>
c;
if (
(a =
= 0
) &
& (
b =
= 0
))co
ut
<<
"E
qu
azio
ne d
eg
en
ere
" <
< e
nd
l;els
e if (
a =
= 0
) {
co
ut
<<
"E
qu
azio
ne d
i p
rim
o g
rad
o"
<<
en
dl;
co
ut
<<
"x:
" <
< -
c /
b <
< e
nd
l;} els
e
{d
ou
ble
delt
a =
b *
b -
4 *
a *
c;
if (
delt
a <
0)
co
ut
<<
"S
olu
zio
ni im
mag
inari
e"
<<
en
dl;
els
e
{d
elt
a =
sq
rt(d
elt
a);
co
ut
<<
"x1:
" <
< (
-b +
delt
a)
/ (2
* a
) <
< e
nd
l;co
ut
<<
"x2:
" <
< (
-b -
delt
a)
/ (2
* a
) <
< e
nd
l;}
}
syste
m("
PA
US
E")
;re
turn
0;
}
163
6.3
.1 Istr
uzio
ne i
f (I
X)
Co
eff
icie
nti
?1 6 9 x1:
-3x2:
-3P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
164
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
I)
Sin
tassi:
sw
itch
-sta
tem
en
t
sw
itch
(co
nd
itio
n)
sw
itch
-bo
dy
sw
itch
-bo
dy
{ a
ltern
ati
ve-s
eq
}
alt
ern
ati
ve
case-l
ab
el-
seq
sta
tem
en
t-seq
case-l
ab
el
case
co
nsta
nt-
exp
ressio
n:
defa
ult
:
Co
nd
izio
ne:
–co
mu
nem
en
te c
osti
tuit
a d
a u
n’e
sp
ressio
ne,
ch
e p
rod
uce u
n r
isu
ltato
di ti
po
dis
cre
to;
Eti
ch
ett
e (
case-l
ab
el)
:
–co
nte
ng
on
o (
olt
re a
lla p
aro
la c
hia
ve c
ase)
esp
ressio
ni
co
sta
nti
il cu
i valo
re d
eve e
ssere
d
el ti
po
del ri
su
ltato
dell
’esp
ressio
ne;
–in
div
idu
an
o l
e v
ari
e a
ltern
ati
ve n
el
co
rpo
d
ell
’istr
uzio
ne s
wit
ch
;
–i valo
ri d
ell
e e
sp
ressio
ni
co
sta
nti
devo
no
essere
dis
tin
ti.
Alt
ern
ati
va c
on
eti
ch
ett
a d
efa
ult
:
–se p
resen
te,
deve e
ssere
un
ica.
165
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
II)
Esecu
zio
ne d
ell
’istr
uzio
ne s
wit
ch
:
–vie
ne v
alu
tata
l’e
sp
ressio
ne;
–vie
ne e
seg
uit
a l
'alt
ern
ati
va c
on
l’e
tich
ett
a i
n c
ui
co
mp
are
il valo
re c
alc
ola
to (
og
ni alt
ern
ati
va
pu
ò e
ssere
in
div
idu
ata
da p
iù e
tich
ett
e);
–se n
essu
na a
ltern
ati
va h
a u
n'e
tich
ett
a in
cu
i co
mp
are
il valo
re c
alc
ola
to, all
ora
vie
ne
eseg
uit
a,
se e
sis
te,
l’alt
ern
ati
va c
on
eti
ch
ett
a
defa
ult
;
•in
mancan
za d
i etichett
a d
efa
ult
l'esecuzi
on
e
dell’
istr
uzio
ne s
witch
term
ina.
Alt
ern
ati
va:
–fo
rmata
da u
na o
più
istr
uzio
ni (e
ven
tualm
en
te
vu
ote
o s
tru
ttu
rate
).
Term
inazio
ne:
–p
uò
essere
ott
en
uta
co
n l’i
str
uzio
ne b
reak
(rie
ntr
a n
ell
a c
ate
go
ria d
ell
e istr
uzio
ni d
i salt
o):
bre
ak-s
tate
men
t
bre
ak
;
Att
en
zio
ne:
•S
e l
’ult
ima
is
tru
zio
ne
di
un
’alt
ern
ati
va
no
n f
a
term
ina
re l
’is
tru
zio
ne
sw
itc
h,
e s
e l
’alt
ern
ati
va
n
on
e’
l’u
ltim
a,
vie
ne
es
eg
uit
a l
’alt
ern
ati
va
s
uc
ce
ss
iva
.
166
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
III)
// S
cri
ve a
ste
risch
i (u
so
istr
uzio
ne b
reak)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
i;
sw
itch
(i)
{
case 1
:co
ut
<<
'*'
;b
reak;
case 2
:co
ut
<<
"**
";b
reak;
case 3
:co
ut
<<
"**
*";
bre
ak;
defa
ult
:co
ut
<<
'!'
;} co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?2 ** P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
167
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
IV)
// S
cri
ve a
ste
risch
i (i
n c
ascata
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
i;
sw
itch
(i)
{
case 3
://
in c
ascata
co
ut
<<
'*'
;case 2
://
in c
ascata
co
ut
<<
'*'
;case 1
:co
ut
<<
'*'
;b
reak;
defa
ult
:co
ut
<<
'!'
;} co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?2 ** P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
168
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
V)
// C
reazio
ne m
en
ù//
Sele
zio
ne t
ram
ite c
ara
tteri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
co
ut
<<
"S
ele
zio
na u
n'a
ltern
ati
va"
<<
en
dl;
co
ut
<<
"A
-P
rim
a A
ltern
ati
va"
<<
en
dl;
co
ut
<<
"B
-S
eco
nd
a A
ltern
ati
va"
<<
en
dl;
co
ut
<<
"C
-T
erz
a A
ltern
ati
va"
<<
en
dl;
co
ut
<<
"Q
uals
iasi alt
ro t
asto
per
uscir
e"
<<
en
dl;
ch
ar
c;
cin
>>
c;
sw
itch
(c)
{case 'a':
case 'A
':
co
ut
<<
"P
rim
a a
ltern
ati
va"
<<
en
dl;
b
reak;
case 'b
': c
ase 'B
':
co
ut
<<
"S
eco
nd
a a
ltern
ati
va"
<<
en
dl;
bre
ak;
case 'c':
case 'C
':
co
ut
<<
"T
erz
a a
ltern
ati
va"
<<
en
dl;
//
Manca il caso d
i defa
ult
// S
e n
on è
una d
elle
altern
ative,
non s
crive n
iente
}
syste
m("
PA
US
E")
;re
turn
0;
}
169
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
VI)
// C
reazio
ne m
en
ù//
Sele
zio
ne t
ram
ite c
ara
tteri
Sele
zio
na u
n'a
ltern
ati
va
A -
Pri
ma A
ltern
ati
va
B -
Seco
nd
a A
ltern
ati
va
C -
Terz
a A
ltern
ati
va
Qu
als
iasi alt
ro t
asto
per
uscir
eB S
eco
nd
a a
ltern
ati
va
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
170
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
VII
)
// S
cri
ttu
ra d
i en
um
era
zio
ni
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
en
um
{R
OS
SO
, G
IAL
LO
, V
ER
DE
} co
lore
;ch
ar
c;
co
ut
<<
"S
ele
zio
na u
n c
olo
re "
<<
en
dl;
co
ut
<<
"R
-ro
sso
" <
< e
nd
l;co
ut
<<
"G
-g
iall
o "
<<
en
dl;
co
ut
<<
"V
-verd
e "
<<
en
dl;
cin
>>
c;
sw
itch
(c)
{case 'r'
: case 'R
':
co
lore
= R
OS
SO
;b
reak;
case 'g
': c
ase 'G
':
co
lore
= G
IAL
LO
;b
reak;
case 'v':
case 'V
':
co
lore
= V
ER
DE
;} /*
...
*/
171
6.3
.2 Istr
uzio
ni
sw
itch
e b
reak (
VII
I)
// S
cri
ttu
ra d
i en
um
era
zio
ni
(co
nti
nu
a)
sw
itch
(co
lore
) {
case R
OS
SO
: co
ut
<<
"R
OS
SO
";
bre
ak;
case G
IAL
LO
: co
ut
<<
"G
IAL
LO
";
bre
ak;
case V
ER
DE
: co
ut
<<
"V
ER
DE
";
} co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Sele
zio
na u
n c
olo
reR
-ro
sso
G -
gia
llo
V -
verd
ev V
ER
DE
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
172
6.4
.1 Istr
uzio
ne r
ipeti
tive
Sin
tassi:
ite
rati
on
-sta
tem
en
t
wh
ile
-sta
tem
en
t
do
-sta
tem
en
t
for-
sta
tem
en
t
wh
ile
-sta
tem
en
t
wh
ile
(
co
nd
itio
n)
s
tate
me
nt
// S
cri
ve n
aste
risch
i, c
on
n d
ato
(i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n, i =
0;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
n;
wh
ile (
i <
n)
{co
ut
<<
'*'
; i+
+;
}//
n c
onserv
a il valo
re iniz
iale
co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?6 **
****
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
173
6.4
.1 Istr
uzio
ne w
hil
e (
I)
// S
cri
ve n
aste
risch
i, c
on
n d
ato
(ii
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
n;
wh
ile (
n >
0)
{co
ut
<<
'*'
; n
--;
}//
al te
rmin
e,
n v
ale
0co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?6 **
****
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
174
6.4
.1 Istr
uzio
ne w
hil
e (
II)
// S
cri
ve n
aste
risch
i, c
on
n d
ato
(ii
i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
n;
wh
ile (
n--
> 0
) co
ut
<<
'*'
;//
al te
rmin
e,
n v
ale
-1
co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} //~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~//
// S
cri
ve n
aste
risch
i, c
on
n d
ato
(iv
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
n;
wh
ile (
n--
) //
non t
erm
ina s
e n
< 0
co
ut
<<
'*';
co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
}
175
6.4
.1 Istr
uzio
ne w
hil
e (
III)
// L
eg
ge, ra
dd
op
pia
e s
cri
ve i
nte
ri n
on
neg
ati
vi
// T
erm
ina a
l p
rim
o n
eg
ati
vo
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
i;
wh
ile (
i >
= 0
) {
co
ut
<<
2 *
i <
< e
nd
l;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
i;
} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
1 2 Inseri
sci
un
nu
mero
in
tero
3 6 Inseri
sci
un
nu
mero
in
tero
-2 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
176
6.4
.1 Istr
uzio
ne w
hil
e (
IV)
// C
alc
ola
il m
assim
o m
tale
ch
e l
a s
om
ma d
ei p
rim
i//
m i
nte
ri p
osit
ivi
e`
min
ore
o u
gu
ale
ad
un
dato
in
tero
//
po
sit
ivo
n
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
un
sig
ned
in
t so
mm
a =
0,
m =
0,
n;
co
ut
<<
"In
seri
sci
n "
<<
en
dl;
cin
>>
n;
wh
ile (
so
mm
a <
= n
)so
mm
a +
= +
+m
;m
--;
co
ut
<<
m <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
n8 3 P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
177
6.4
.1 Istr
uzio
ne w
hil
e (
V)
// C
alc
ola
il m
assim
o t
erm
ine d
ell
a s
uccessio
ne d
i //
Fib
on
acci m
ino
re o
ug
uale
al d
ato
in
tero
po
sit
ivo
n//
Seri
e d
i F
ibo
nacci:
Cu
rio
sit
à:
da d
ove n
asce l
a s
eri
e d
i F
ibo
nacci?
Su
pp
on
iam
o d
i avere
un
a c
op
pia
di co
nig
li (
masch
io e
fem
min
a).
I c
on
igli
so
no
in
gra
do
di ri
pro
du
rsiall
'età
di
un
mese.
Su
pp
on
iam
o c
he i
no
str
i co
nig
lin
on
mu
oia
no
mai
e c
he l
a f
em
min
a p
rod
uca s
em
pre
un
a n
uo
va
co
pp
ia (
un
masch
io e
d u
na f
em
min
a)
og
ni m
ese d
al
seco
nd
o m
ese i
n p
oi.
Il p
rob
lem
a p
osto
da F
ibo
nacci fu
:
qu
an
te c
op
pie
ci
sara
nn
o d
op
o u
n a
nn
o?
Il n
um
ero
dell
e c
op
pie
di co
nig
li a
ll'in
izio
di cia
scu
n
mese s
arà
1,
1, 2,
3,
5, 8,
13,
21,
34,
...
178
6.4
.1 Istr
uzio
ne w
hil
e (
V)
// C
alc
ola
il m
assim
o t
erm
ine d
ell
a s
uccessio
ne d
i //
Fib
on
acci m
ino
re o
ug
uale
al d
ato
in
tero
po
sit
ivo
n//
Seri
e d
i F
ibo
nacci:
//a
n =
an
-1 +
an
-2
//a
1 =
1
//a
0 =
0
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
0,
j =
1, s,
n;
// i =
a0,
j =
a1,
s =
a2
co
ut
<<
"In
seri
sci
n "
<<
en
dl;
cin
>>
n;
if (
n<
=0)
co
ut
<<
"V
alo
re n
on
co
nsis
ten
te"
<<
en
dl;
els
e{
wh
ile (
(s =
j +
i)
<=
n)
{i =
j;
j =
s;
} co
ut
<<
j <
< e
nd
l;} s
yste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
n7 5 P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
179
6.4
.1 Istr
uzio
ne w
hil
e (
V)
// C
alc
ola
il m
assim
o t
erm
ine d
ell
a s
uccessio
ne d
i //
Fib
on
acci m
ino
re o
ug
uale
al d
ato
in
tero
po
sit
ivo
n//
Seri
e d
i F
ibo
nacci:
//S
olu
zio
ne c
on
du
e v
ari
ab
ili
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i =
0,
j =
1,n
;
//
i =
a0,
j =
a1
co
ut
<<
"In
seri
sci
n "
<<
en
dl;
cin
>>
n;
if (
n<
=0)
co
ut
<<
"V
alo
re n
on
co
nsis
ten
te"
<<
en
dl;
els
e{
wh
ile (
((i =
j+
i)<
= n
)&&
((j =
j+
i)<
=n
));
if (
j<i)
co
ut
<<
j <
< e
nd
l;els
e c
ou
t <
< i <
< e
nd
l;} s
yste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
n7 5 P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
180
6.4
.2 Istr
uzio
ne d
o (
I)
do
-sta
tem
en
t
do
sta
tem
en
tw
hile
( e
xp
res
sio
n)
;
Es
ec
uzio
ne
de
ll’is
tru
zio
ne
do
:
–vie
ne e
seg
uit
a l
'istr
uzio
ne r
acch
iusa t
ra d
oe
wh
ile
(co
rpo
del d
o);
–vie
ne v
alu
tata
l'e
sp
ressio
ne;
–se q
uesta
ris
ult
a v
era
l'istr
uzio
ne d
ovie
ne
rip
etu
ta;
–se q
uesta
ris
ult
a f
als
a l
'istr
uzio
ne d
ote
rmin
a.
No
ta: –
il c
orp
o d
ell
’istr
uzio
ne d
ovie
ne e
seg
uit
o
alm
en
o u
na v
olt
a,
pri
ma d
ell
a v
alu
tazio
ne d
ell
a
co
nd
izio
ne d
i te
rmin
azio
ne.
181
6.4
.2 Istr
uzio
ne d
o (
II)
// C
alc
ola
il m
assim
o t
erm
ine d
ell
a s
uccessio
ne d
i //
Fib
on
acci m
ino
re o
ug
uale
al d
ato
in
tero
po
sit
ivo
n
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i, j =
0,
s =
1,
n;
co
ut
<<
"In
seri
sci
n "
<<
en
dl;
cin
>>
n;
if (
n<
=0)
co
ut
<<
"V
alo
re n
on
co
nsis
ten
te"
<<
en
dl;
els
e{
do
{
i =
j;
j =
s;
} w
hil
e (
(s =
j +
i)
<=
n);
co
ut
<<
j <
< e
nd
l;} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
n7 5 P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
182
6.4
.3 Istr
uzio
ne f
or
(I)
for-
sta
tem
en
tfo
r (
init
iali
zati
on
co
nd
itio
n-s
pecif
icati
on
ste
p)
sta
tem
en
t
init
iali
zati
on
exp
ressio
n-s
tate
men
td
efi
nit
ion
-sta
tem
en
t
co
nd
itio
n-s
pecif
icati
on
exp
ressio
n|o
pt
;
ste
pexp
ressio
n|o
pt
Istr
uzio
ne
for:
–vie
ne e
seg
uit
a c
om
e s
e f
osse s
cri
tta n
el
seg
uen
te m
od
o:
{in
izia
lizzazio
ne
wh
ile (
esp
ressio
ne c
on
diz
ion
ale
)
{//
corp
o d
el fo
r
istr
uzio
ne
passo
;
}
}
183
6.4
.3 Istr
uzio
ne f
or
(II)
// S
cri
ve n
aste
risch
i, c
on
n d
ato
(i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
n;
for
(in
t i =
0;
i <
n;
i++
) co
ut
<<
'*'
;//
al te
rmin
e,
i vale
nco
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?6 **
****
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
184
6.4
.3 Istr
uzio
ne f
or
(III
)
// S
cri
ve n
aste
risch
i, c
on
n d
ato
(ii
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
<<
en
dl;
cin
>>
n;
for
(; n
> 0
; n
--)
co
ut
<<
'*'
;//
al te
rmin
e,
n v
ale
0co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i?6 **
****
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
185
6.4
.3 Istr
uzio
ne f
or
(IV
)
// S
cri
ve a
ste
risch
i e p
un
ti e
scla
mati
vi
(I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n;
co
ut
<<
"Q
uan
ti?
" <
< e
nd
l;cin
>>
n;
for
(in
t i =
0;
i <
n;
i++
)co
ut
<<
'*'
;co
ut
<<
en
dl;
for
(in
t i =
0;
i <
n;
i++
) //
vis
ibili
ta’ i lim
itata
co
ut
<<
'!'
; //
blo
cco f
or
co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti?
6 ****
**!!
!!!!
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
186
6.4
.3 Istr
uzio
ne f
or
(V)
// S
cri
ve a
ste
risch
i e p
un
ti e
scla
mati
vi
(II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
n,i
;co
ut
<<
"Q
uan
ti?
" <
< e
nd
l;cin
>>
n;
for
(i =
0;
i <
n;
i++
)co
ut
<<
'*'
;co
ut
<<
en
dl;
for
(i =
0;
i <
n;
i++
) co
ut
<<
'!'
; co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti?
6 ****
**!!
!!!!
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
187
6.4
.3 Istr
uzio
ne f
or
(VI)
// S
cri
ve u
na m
atr
ice d
i aste
risch
i fo
rmata
da r
rig
he
// e
c c
olo
nn
e, co
n r
e c
dati
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
r, c
; co
ut
<<
"N
um
ero
di ri
gh
e?
" <
< e
nd
l;cin
>>
r;
co
ut
<<
"N
um
ero
di co
lon
ne?
" <
< e
nd
l;cin
>>
c;
for
(in
t i =
0;
i <
r;
i++
) {
for
(in
t j =
0;
j <
c;
j++
)co
ut
<<
'*'
;co
ut
<<
en
dl;
} syste
m("
PA
US
E")
;re
turn
0;
} Nu
mero
di ri
gh
e?
3 Nu
mero
di co
lon
ne?
4 ****
****
****
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
188
6.5
Istr
uzio
ni
di
salt
o
jum
p-s
tate
men
t
bre
ak-s
tate
men
t
co
nti
nu
e-s
tate
men
t
go
to-s
tate
men
t
retu
rn-s
tate
men
t
•Is
tru
zio
ne
bre
ak
(già
vis
ta):
–salt
oall
'istr
uzio
ne
imm
ed
iata
men
tesu
cc
essiv
aal
co
rpo
del
cic
loo
dell’i
str
uzio
ne
sw
itch
ch
eco
nte
ng
on
ol’
istr
uzio
ne
bre
ak:
wh
ile
(..
.)
{..
.
bre
ak;
...
} sw
itch
(..
..)
{..
.. bre
ak;
...
}
189
6.5
.1 Istr
uzio
ne b
reak (
I)
// L
eg
ge e
scri
ve i
nte
ri n
on
neg
ati
vi
// T
erm
ina a
l p
rim
o n
eg
ati
vo
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
j;fo
r (;
;)
// c
iclo
infinito;
altra
form
a: w
hile
(1)
{co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
j;
if (
j <
0)
bre
ak;
co
ut
<<
j <
< e
nd
l;} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
3 3 Inseri
sci
un
nu
mero
in
tero
5 5 Inseri
sci
un
nu
mero
in
tero
-1 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
190
6.5
.1 Istr
uzio
ne b
reak (
II)
// L
eg
ge e
scri
ve a
l p
iu`
cin
qu
e in
teri
no
n n
eg
ati
vi
// T
erm
ina a
l p
rim
o n
eg
ati
vo
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
co
nst
int
N =
5;
for
(in
t i =
0,
j; i <
N;
i++
) {
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
j;
if (
j <
0)
bre
ak;
co
ut
<<
j <
< e
nd
l;} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
3 3 Inseri
sci
un
nu
mero
in
tero
5 5 Inseri
sci
un
nu
mero
in
tero
-1 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
191
6.5
.2 Istr
uzio
ne c
on
tin
ue (
I)
co
nti
nu
e-s
tate
men
t
continue
;
–p
rovo
ca l
a t
erm
inazio
ne d
i u
n'ite
razio
ne d
el
cic
lo c
he l
a c
on
tien
e;
–salt
a a
lla p
art
e d
el
cic
lo c
he v
alu
ta d
i n
uo
vo
la
co
nd
izio
ne d
i co
ntr
oll
o:
wh
ile (
...
)
wh
ile (
….)
{
...
{ …
co
nti
nu
e;
sw
itch
(…)
...
{ …
}co
nti
nu
e;
} ….
}
No
ta: –
le i
str
uzio
ni b
reak e
co
nti
nu
e s
i co
mp
ort
an
o in
m
od
o d
ivers
o r
isp
ett
o a
l ti
po
di is
tru
zio
ne
str
utt
ura
ta i
n c
ui ag
isco
no
;
–l'is
tru
zio
ne c
on
tin
ue “
ign
ora
” la p
resen
za d
i u
n
even
tuale
istr
uzio
ne s
wit
ch
.
Istr
uzio
ne s
wit
ch
:
–q
uan
do
è l
'ult
ima d
i u
n c
iclo
, n
ell
e a
ltern
ati
ve s
i p
uò
usare
l'istr
uzio
ne c
on
tin
ue in
vece c
he
l'is
tru
zio
ne b
reak.
192
6.5
.2 Istr
uzio
ne c
on
tin
ue (
II)
// L
eg
ge c
inq
ue in
teri
e s
cri
ve i
so
li n
on
neg
ati
vi
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
co
nst
int
N =
5;
for
(in
t i =
0,
j; i <
N;
i++
) {
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
j;
if (
j <
0)
co
nti
nu
e;
co
ut
<<
j <
< e
nd
l;} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
1 1 Inseri
sci
un
nu
mero
in
tero
2 2 Inseri
sci
un
nu
mero
in
tero
-2 Inseri
sci
un
nu
mero
in
tero
-3 Inseri
sci
un
nu
mero
in
tero
4 4 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
193
5.1
Co
ncett
o d
i str
eam
(I)
Pro
gra
mm
a:
–co
mu
nic
a c
on
l'e
ste
rno
tra
mit
e u
no
o p
iù f
lussi
(str
eam
);
Str
eam
:
–str
utt
ura
log
ica
co
sti
tuit
ad
au
na
seq
uen
za
di
casell
e(o
cell
e),
cia
scu
na
di
un
byte
,ch
ete
rmin
aco
nu
na
marc
ad
ifi
ne
str
eam
(il
nu
mero
dell
ecasell
eè
illi
mit
ato
);
≅c
ba
int m
ain
(){
ch
ar
c;
cin
>>
c;
….
}
po
siz
ion
e c
asell
aco
invo
lta
nell
a lett
ura
accesso
seq
uen
zia
le 194
5.2
Co
ncett
o d
i str
eam
(II
)
Gli s
tre
am
pre
de
fin
iti s
on
o t
re:
–cin
, co
ut
e c
err
;
Fu
nzio
ni c
he
op
era
no
su
qu
es
ti s
tre
am
:–
si
tro
van
o i
n u
na l
ibre
ria d
i in
gre
sso
/uscit
a,
e
per
il lo
ro u
so
occo
rre i
nclu
dere
il fi
le d
i in
testa
zio
ne <
iostr
eam
>.
Os
se
rva
zio
ne
:–
qu
an
to v
err
à d
ett
o p
er
lo s
tream
co
ut
vale
an
ch
e p
er
lo s
tream
cerr
.
Str
ea
m d
i in
gre
ss
o s
tan
da
rd (
cin
):–
per
pre
levarv
i d
ati
, si
usa l
'istr
uzio
ne d
i le
ttu
ra
(o d
i in
gre
sso
):
basic
-in
pu
t-exp
ressio
n-s
tate
men
t
inp
ut-
str
eam
>>
vari
ab
le-n
am
e
;
Azio
ni:
•p
reli
evo
dall
o s
tream
di u
na s
eq
uen
za d
i cara
tteri
, co
nsis
ten
te c
on
la s
inta
ssi
dell
e c
osta
nti
asso
cia
te
al
tip
o d
ell
a v
ari
ab
ile (
tip
o in
tero
: even
tuale
seg
no
e
seq
uen
za d
i cif
re,
e c
osì
via
);
•la
co
nvers
ion
e d
i ta
le s
eq
uen
za i
n u
n v
alo
re c
he
vie
ne a
sseg
nato
all
a v
ari
ab
ile.
195
5.2
Op
era
tore
di
Lett
ura
Op
era
tore
di le
ttu
ra d
efi
nit
o p
er:
•sin
go
li c
ara
tteri
;•
nu
meri
in
teri
;•
nu
meri
reali
;•
seq
uen
ze d
i cara
tteri
(co
sta
nti
str
ing
a).
Esecu
zio
ne d
el p
rog
ram
ma:
•q
uan
do
vie
ne i
nco
ntr
ata
un
'istr
uzio
ne d
i le
ttu
ra, il
p
rog
ram
ma s
i arr
esta
in
att
esa d
i d
ati
;
•i cara
tteri
ch
e v
en
go
no
batt
uti
su
lla t
asti
era
van
no
a
riem
pir
e l
o s
tream
cin
;
•p
er
co
nsen
tire
even
tuali
co
rrezio
ni,
i c
ara
tteri
batt
uti
co
mp
aio
no
an
ch
e i
n e
co
su
l vid
eo
;
•ta
li c
ara
tteri
van
no
eff
ett
ivam
en
te a
far
part
e d
i cin
so
lo q
uan
do
vie
ne b
att
uto
il ta
sto
di ri
torn
o c
arr
ell
o.
Rid
irezio
ne:
•co
l co
man
do
di esecu
zio
ne d
el p
rog
ram
ma,
lo
str
eam
cin
pu
ò e
ssere
rid
irett
o s
u u
n f
ile f
ile.i
nre
sid
en
te s
u m
em
ori
a d
i m
assa;
•co
man
do
DO
S/W
ind
ow
s (l
eg
gi.
exe
è u
n f
ile
eseg
uib
ile):
leg
gi.
exe <
fil
e.i
n
196
5.2
Lett
ura
di
Cara
tteri
(I)
ch
ar
c;
cin
>>
c;
Azio
ne:
•se i
l cara
ttere
co
nte
nu
to n
ell
a c
asell
a s
ele
zio
nata
dal
pu
nta
tore
no
n è
un
o s
pazio
bia
nco
:
–vie
ne p
rele
vato
;
–vie
ne a
sseg
nato
all
a v
ari
ab
ile c
;
–il
pu
nta
tore
si
sp
osta
su
lla c
asell
a s
uccessiv
a;
•se i
l cara
ttere
co
nte
nu
to n
ell
a c
asell
a s
ele
zio
nata
dal
pu
nta
tore
è u
no
sp
azio
bia
nco
:
–vie
ne i
gn
ora
to;
–il
pu
nta
tore
si
sp
osta
su
lla c
asell
a s
uccessiv
a,
e c
osì
via
, fi
nch
é n
on
vie
ne l
ett
o u
n c
ara
ttere
ch
e n
on
sia
un
o s
pazio
bia
nco
.
Le
ttu
ra d
i u
n c
ara
tte
re q
ua
lsiv
og
lia
(a
nc
he
di u
no
s
pa
zio
bia
nc
o):
c
ha
r c
;cin
.get(
c);
No
ta: –
un
a f
un
zio
ne (
co
me g
et(
)), ap
pli
cata
ad
un
o
sp
ecif
ico
str
eam
(co
me c
in),
si
dic
e f
un
zio
ne
mem
bro
.
197
5.2
Lett
ura
di
Cara
tteri
(II
)
// L
eg
ge c
ara
tteri
e l
i sta
mp
a s
u v
ideo
//
Term
ina a
l p
rim
o c
ara
ttere
‘q
’.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
ch
ar
c;
wh
ile (
tru
e)
// w
hile
(1)
{co
ut
<<
"In
seri
sci
un
cara
ttere
" <
< e
nd
l;cin
>>
c;
if (
c !
= 'q
')co
ut
<<
c <
< e
nd
l;els
eb
reak;
} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
cara
ttere
a w
qa In
seri
sci
un
cara
ttere
w Inseri
sci
un
cara
ttere
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
198
5.2
Lett
ura
di
Cara
tteri
(II
I)
// L
eg
ge c
ara
tteri
e l
i sta
mp
a s
u v
ideo
//
Term
ina a
l p
rim
o c
ara
ttere
‘q
’.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
ch
ar
c;
wh
ile (
tru
e)
{co
ut
<<
"In
seri
sci
un
cara
ttere
" <
< e
nd
l;cin
.get(
c);
if (
c !
= 'q
')co
ut
<<
c <
< e
nd
l;els
eb
reak;
} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
cara
ttere
a w
qa In
seri
sci
un
cara
ttere
Inseri
sci
un
cara
ttere
Inseri
sci
un
cara
ttere
w Inseri
sci
un
cara
ttere
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
199
5.2
Lett
ura
di
Inte
ri
int
i;cin
>>
i;
Azio
ne:
•il
pu
nta
tore
si
sp
osta
da u
na c
asell
a a
lla s
uccessiv
a
fin
tan
to c
he t
rova c
ara
tteri
co
nsis
ten
ti c
on
la
sin
tassi
dell
e c
osta
nti
in
tere
, salt
an
do
even
tuali
sp
azi
bia
nch
i in
testa
, e s
i fe
rma s
ul
pri
mo
cara
ttere
n
on
pre
vis
to d
all
a s
inta
ssi
ste
ssa;
•il
nu
mero
in
tero
co
rris
po
nd
en
te a
lla s
eq
uen
za d
i cara
tteri
lett
i vie
ne a
sseg
nato
all
a v
ari
ab
ile i
.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i, j;
co
ut
<<
"In
seri
sci
du
e n
um
eri
in
teri
" <
< e
nd
l;cin
>>
i;
cin
>>
j;
co
ut
<<
i <
< e
nd
l <
< j <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e n
um
eri
in
teri
-10
3
-10
3 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
200
5.2
Lett
ura
di
Reali
flo
at
f;cin
>>
f;
Azio
ne:
•il
pu
nta
tore
si
sp
osta
da u
na c
asell
a a
lla s
uccessiv
a
fin
tan
to c
he t
rova c
ara
tteri
co
nsis
ten
ti c
on
la
sin
tassi
dell
e c
osta
nti
reali
, salt
an
do
even
tuali
sp
azi
bia
nch
i in
testa
, e s
i fe
rma s
ul p
rim
o c
ara
ttere
no
n
pre
vis
to d
all
a s
inta
ssi
ste
ssa;
•il
nu
mero
reale
co
rris
po
nd
en
te a
lla s
eq
uen
za d
i cara
tteri
lett
i vie
ne a
sseg
nato
all
a v
ari
ab
ile f
.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
flo
at
f, g
;co
ut
<<
"In
seri
sci
du
e n
um
eri
reali
" <
< e
nd
l;cin
>>
f;
cin
>>
g;
co
ut
<<
f <
< e
nd
l <
< g
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e n
um
eri
reali
-1.2
5e-3
.1e4
-0.0
0125
1000
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
201
5.2
Lett
ure
Mu
ltip
le
Istr
uzio
ne
di in
gre
ss
o:
–ri
en
tra
ne
lla
ca
teg
ori
a d
ell
e i
str
uzio
ne
es
pre
ss
ion
e;
–l’
es
pre
ss
ion
e p
rod
uc
e c
om
e r
isu
lta
to l
o s
tre
am
co
invo
lto
;
–c
on
se
nte
di
eff
ett
ua
re p
iù l
ett
ure
in
se
qu
en
za
.
cin
>>
x >
> y
;
eq
uiv
ale
nte
a:
cin
>>
x;
c
in >
> y
;
Infa
tti,
essen
do
l’o
pera
tore
>>
asso
cia
tivo
a s
inis
tra,
pri
ma v
ien
e c
alc
ola
ta l
a s
ub
esp
ressio
ne c
in >
>x, ch
e
pro
du
ce c
om
e r
isu
ltato
cin
, q
uin
di la
su
besp
ressio
ne
cin
>>
y.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
flo
at
f, g
;co
ut
<<
"In
seri
sci
du
e n
um
eri
reali
" <
< e
nd
l;cin
>>
f>
>g
;co
ut
<<
f <
< e
nd
l <
< g
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e n
um
eri
reali
-1.2
5e-3
.1e4
-0.0
0125
1000
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
202
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(I)
Istr
uzio
ne
di le
ttu
ra:
•il
pu
nta
tore
no
n in
div
idu
a u
na s
eq
uen
za d
i cara
tteri
co
nsis
ten
te c
on
la s
inta
ssi
dell
e c
osta
nti
asso
cia
te
al
tip
o d
ell
a v
ari
ab
ile:
–l'o
pera
zio
ne d
i p
reli
evo
no
n h
a lu
og
o e
lo
str
eam
si
po
rta i
n u
no
sta
to d
i err
ore
;
Ca
so
tip
ico
:•
si
vu
ole
leg
gere
un
nu
mero
in
tero
, e i
l p
un
tato
re
ind
ivid
ua u
n c
ara
ttere
ch
e n
on
sia
il seg
no
o u
na
cif
ra;
•caso
part
ico
lare
:
–si
ten
ta d
i le
gg
ere
la m
arc
a d
i fi
ne s
tream
.
Str
ea
m d
i in
gre
ss
o in
sta
to d
i e
rro
re:
•o
cco
rre u
n r
ipri
sti
no
, ch
e s
i o
ttie
ne c
on
la f
un
zio
ne
cin
.cle
ar(
).
Str
ea
m d
i in
gre
ss
o:
•p
uò
co
sti
tuir
e u
na
co
nd
izio
ne
(nell
e istr
uzio
ni
co
nd
izio
nali
o r
ipeti
tive);
•la
co
nd
izio
ne è
vera
se l
o s
tream
no
n è
in
un
o s
tato
d
i err
ore
, fa
lsa a
ltri
men
ti.
Ta
sti
era
de
l te
rmin
ale
:•
se u
n p
rog
ram
ma l
eg
ge d
ati
da t
erm
inale
fin
o a
d
inco
ntr
are
la m
arc
a d
i fi
ne s
tream
, l'u
ten
te d
eve
po
ter
intr
od
urr
e t
ale
marc
a;
•q
uesto
si
ott
ien
e p
rem
en
do
Co
ntr
ol e Z
n
ei sis
tem
i D
OS
/Win
do
ws (
Ctr
l-Z
).
203
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(II
)
// L
eg
ge e
sta
mp
a n
um
eri
in
teri
.//
Term
ina q
uan
do
vie
ne i
nseri
to u
n c
ara
ttere
no
n//
co
nsis
ten
te c
on
la s
inta
ssi
dell
e c
osta
nti
in
tere
//
Vers
ion
e 1
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;w
hil
e (
tru
e)
{co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
i;
if (
cin
)co
ut
<<
"N
um
ero
in
tero
: "
<<
i <
< e
nd
l;els
e bre
ak;
}
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
3 Nu
mero
in
tero
: 3
Inseri
sci
un
nu
mero
in
tero
x Pre
mere
un
tasto
per
co
nti
nu
are
. . .
204
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(II
I)
// L
eg
ge e
sta
mp
a n
um
eri
in
teri
.//
Term
ina q
uan
do
vie
ne i
nseri
to u
n c
ara
ttere
no
n//
co
nsis
ten
te c
on
la s
inta
ssi
dell
e c
osta
nti
in
tere
//
Vers
ion
e 2
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;w
hil
e (
cin
){
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
i;
if (
cin
)co
ut
<<
"N
um
ero
in
tero
: "
<<
i <
< e
nd
l;}
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
3 Nu
mero
in
tero
: 3
Inseri
sci
un
nu
mero
in
tero
x Pre
mere
un
tasto
per
co
nti
nu
are
. . .
205
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(IV
)
// L
eg
ge e
sta
mp
a n
um
eri
in
teri
.//
Term
ina q
uan
do
vie
ne i
nseri
to u
n c
ara
ttere
no
n//
co
nsis
ten
te c
on
la s
inta
ssi
dell
e c
osta
nti
in
tere
//
Vers
ion
e 3
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;w
hil
e (
cin
>>
i)
{co
ut
<<
"N
um
ero
in
tero
: "
<<
i <
< e
nd
l;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;}
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
3 Nu
mero
in
tero
: 3
Inseri
sci
un
nu
mero
in
tero
x Pre
mere
un
tasto
per
co
nti
nu
are
. . .
206
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(V
)
// L
eg
ge e
sta
mp
a n
um
eri
in
teri
.//
Term
ina q
uan
do
vie
ne i
nseri
to u
n c
ara
ttere
no
n//
co
nsis
ten
te c
on
la s
inta
ssi
dell
e c
osta
nti
in
tere
//
Vers
ion
e 4
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
int
i;w
hil
e (
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l&
& c
in >
> i)
co
ut
<<
"N
um
ero
in
tero
: "
<<
i <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
3 Nu
mero
in
tero
: 3
Inseri
sci
un
nu
mero
in
tero
x Pre
mere
un
tasto
per
co
nti
nu
are
. . .
207
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(V
I)
// L
eg
ge e
sta
mp
a c
ara
tteri
.//
Term
ina q
uan
do
vie
ne i
nseri
to i
l fi
ne s
tream
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
ch
ar
c;
wh
ile (
co
ut
<<
"In
seri
sci
un
cara
ttere
" <
< e
nd
l &
&cin
>>
c)
co
ut
<<
"C
ara
ttere
: "
<<
c <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
cara
ttere
s
eC
ara
ttere
: s
Inseri
sci
un
cara
ttere
Cara
ttere
: e
Inseri
sci
un
cara
ttere
a Cara
ttere
: a
Inseri
sci
un
cara
ttere
^Z
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
208
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(V
II)
// L
eg
ge e
sta
mp
a c
ara
tteri
.//
Term
ina q
uan
do
vie
ne i
nseri
to i
l fi
ne s
tream
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
ch
ar
c;
wh
ile (
co
ut
<<
"In
seri
sci
un
cara
ttere
" <
< e
nd
l &
&
cin
.get(
c))
co
ut
<<
"C
ara
ttere
: "
<<
c <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
cara
ttere
s
eC
ara
ttere
: s
Inseri
sci
un
cara
ttere
Cara
ttere
:In
seri
sci
un
cara
ttere
Cara
ttere
:In
seri
sci
un
cara
ttere
Cara
ttere
: e
Inseri
sci
un
cara
ttere
Cara
ttere
:
Inseri
sci
un
cara
ttere
^Z
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
209
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(V
III)
// U
so
dell
a f
un
zio
ne m
em
bro
cle
ar(
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
ch
ar
c;
co
ut
<<
"In
seri
sci
i cara
tteri
(te
rmin
a c
on
^Z
)\n
";w
hil
e (
cin
>>
c)
co
ut
<<
c <
< e
nd
l;co
ut
<<
"In
seri
sci
i cara
tteri
(te
rmin
a c
on
^Z
)\n
";w
hil
e (
cin
>>
c)
co
ut
<<
c <
< e
nd
l;co
ut
<<
"S
tream
in
sta
to d
i err
ore
" <
< e
nd
l;cin
.cle
ar(
);co
ut
<<
"In
seri
sci
i cara
tteri
(te
rmin
a c
on
^Z
)\n
";w
hil
e (
cin
>>
c)
co
ut
<<
c <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
i cara
tteri
(te
rmin
a c
on
^Z
)a a ^
ZIn
seri
sci
i cara
tteri
(te
rmin
a c
on
^Z
)S
tream
in
sta
to d
i err
ore
Inseri
sci
i cara
tteri
(te
rmin
a c
on
^Z
)^
ZP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
210
5.3
Err
ori
su
llo
str
eam
di
ing
resso
(IX
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
i
nt
i;ch
ar
c;
co
ut
<<
"In
seri
sci
nu
meri
in
teri
" <
< e
nd
l;w
hil
e (
cin
>>
i)co
ut
<<
i <
< e
nd
l;if
(!c
in)
co
ut
<<
"S
tream
in
sta
to d
i err
ore
" <
< e
nd
l;cin
.cle
ar(
);
co
ut
<<
"In
seri
sci
nu
meri
in
teri
" <
< e
nd
l;w
hil
e (
cin
>>
i)co
ut
<<
i <
< e
nd
l;if
(!c
in)
co
ut
<<
"S
tream
in
sta
to d
i err
ore
" <
< e
nd
l;cin
.cle
ar(
);w
hil
e (
cin
.get(
c)
&&
c!=
'\n
');
co
ut
<<
"In
seri
sci
nu
meri
in
teri
" <
< e
nd
l;w
hil
e (
cin
>>
i)co
ut
<<
i <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
nu
meri
in
teri
p Str
eam
in
sta
to d
i err
ore
Inseri
sci
nu
meri
in
teri
Str
eam
in
sta
to d
i err
ore
Inseri
sci
nu
meri
in
teri
1 1 …211
5.4
Str
eam
di
uscit
a
Str
ea
m d
i u
sc
ita
sta
nd
ard
(c
ou
t):
•p
er
scri
vere
su
co
ut
si u
sa l
'istr
uzio
ne d
i scri
ttu
ra (
o
di u
scit
a),
ch
e h
a la f
orm
a:
basic
-ou
tpu
t-exp
ressio
n-s
tete
men
t
ou
tpu
t-str
eam
<
<exp
ressio
n
;
Azio
ne
:•
calc
olo
dell
’esp
ressio
ne e
su
a c
on
vers
ion
e i
n u
na
seq
uen
za d
i cara
tteri
;
•tr
asfe
rim
en
to d
i q
uesti
nell
e v
ari
e c
asell
e d
ell
o
str
eam
, a p
art
ire d
all
a p
rim
a;
•il
pu
nta
tore
e l
a m
arc
a d
i fi
ne s
tream
si
sp
osta
no
in
avan
ti,
e i
n o
gn
i m
om
en
to i
l p
un
tato
re in
div
idu
a l
a
marc
a d
i fi
ne s
tream
.
Po
ss
on
o e
ss
ere
sc
ritt
i:
–n
um
eri
in
teri
;
–n
um
eri
reali
;
–sin
go
li c
ara
tteri
;
–seq
uen
ze d
i cara
tteri
(co
sta
nti
str
ing
a).
No
ta:
•u
n v
alo
re d
i ti
po
bo
ole
an
o o
di u
n t
ipo
en
um
era
to
vie
ne i
mp
licit
am
en
te c
on
vert
ito
in
in
tero
(co
dif
ica
del valo
re)
.
212
5.4
Istr
uzio
ne d
i scri
ttu
ra(I
)
Istr
uzio
ne
di u
sc
ita
:•
è u
n’i
str
uzio
ne e
sp
ressio
ne;
•il
ris
ult
ato
è l
o s
tream
;
•an
alo
gam
en
te a
ll’i
str
uzio
ne d
i in
gre
sso
, co
nsen
te d
i eff
ett
uare
più
scri
ttu
re i
n s
eq
uen
za.
Fo
rma
to d
i s
cri
ttu
ra (
pa
ram
etr
i):
•am
pie
zza d
el
cam
po
(nu
mero
to
tale
di cara
tteri
im
pie
gati
, co
mp
resi
even
tuali
sp
azi p
er
l'all
ineam
en
to);
•lu
ng
hezza d
ell
a p
art
e f
razio
nari
a(s
olo
per
i n
um
eri
re
ali
);
Pa
ram
etr
i:•
valo
ri d
efa
ult
fis
sati
dall
’im
ple
men
tazio
ne;
•p
osso
no
essere
cam
bia
ti d
al
pro
gra
mm
ato
re.
Rid
ire
zio
ne
:•
co
l co
man
do
di esecu
zio
ne d
el p
rog
ram
ma,
lo
str
eam
co
ut
pu
ò e
ssere
rid
irett
o s
u u
n f
ile f
ile.o
ut
resid
en
te s
u m
em
ori
a d
i m
assa;
•co
man
do
DO
S/W
ind
ow
s (s
cri
vi.
exe
è u
n f
ile
eseg
uib
ile):
scri
vi.
exe >
fil
e.o
ut
213
5.4
Istr
uzio
ne d
i scri
ttu
ra(I
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>#in
clu
de <
iom
an
ip>
usin
g n
am
esp
ace s
td;
int
main
(){
do
ub
le d
= 1
.564e-2
,f=
1.2
345,
i;co
ut
<<
d <
< e
nd
l;co
ut
<<
setp
recis
ion
(2)
<<
d <
< '\t
' <
< f
<<
en
dl;
co
ut
<<
d <
< e
nd
l;co
ut
<<
setw
(10)
<<
d <
< ' ' <
< f
<<
en
dl;
co
ut
<<
d <
< e
nd
l;co
ut
<<
hex <
< 1
0 <
< '\t
' <
< 1
1 <
< e
nd
l;co
ut
<<
oct
<<
10 <
< '\t
' <
< 1
1 <
< e
nd
l;co
ut
<<
dec <
< 1
0 <
< '\t
' <
< 1
1 <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} 0.0
1564
0.0
16
1.2
0.0
16
0.0
16 1
.20.0
16
a
b
12
13
10
11
Pre
ss a
ny k
ey t
o c
on
tin
ue . . .
214
5.5
Man
ipo
lazio
ne d
ei
file
(I)
Str
ea
m a
ss
oc
iati
ai fi
le v
isti
da
l s
iste
ma
op
era
tivo
:
•g
esti
ti d
a u
na a
pp
osit
a l
ibre
ria;
•o
cco
rre i
nclu
dere
il fi
le d
i in
testa
zio
ne <
fstr
eam
>.
Dic
hia
razio
ne
:
ba
sic
-file
-str
ea
m-d
efi
nit
ion
fstr
ea
mid
en
tifi
er-
lis
t ;
Es
em
pio
:
fstr
eam
in
gr,
usc;
Fu
nzio
ne
op
en
():
•asso
cia
un
o s
tream
ad
un
fil
e;
•ap
re l
o s
tream
seco
nd
o o
pp
ort
un
e m
od
ali
tà;
•le
mo
dali
tà d
i ap
ert
ura
so
no
rap
pre
sen
tate
da
op
po
rtu
ne c
osta
nti
–le
ttu
ra =
> c
osta
nte
io
s::
in;
–scri
ttu
ra =
> c
osta
nte
io
s::
ou
t;
–scri
ttu
ra a
lla f
ine d
el fi
le (
ap
pen
d)
=>
co
sta
nte
ios::
ou
t |
ios::
ap
p;
•il
no
me d
el fi
le v
ien
e s
pecif
icato
co
me s
trin
ga (
in
part
ico
lare
, co
me c
osta
nte
str
ing
a).
215
5.5
Man
ipo
lazio
ne d
ei
file
(II
)
Es
em
pio
:
ing
r.o
pen
("fi
le1.i
n",
io
s::
in);
usc.o
pen
("fi
le2.o
ut"
, io
s::
ou
t);
Str
ea
m a
pe
rto
in
le
ttu
ra:
–il
fil
e a
sso
cia
to d
eve e
ssere
già
pre
sen
te;
–il
pu
nta
tore
si
sp
osta
su
lla p
rim
a c
asell
a.
Str
ea
m a
pe
rto
in
sc
ritt
ura
:
–il
fil
e a
sso
cia
to,
se n
on
pre
sen
te,
vie
ne c
reato
;
–il
pu
nta
tore
si
po
siz
ion
a a
ll'in
izio
dell
o s
tream
,
su
l q
uale
co
mp
are
so
lo la m
arc
a d
i fi
ne s
tream
(e
ven
tuali
dati
pre
sen
ti n
el fi
le v
en
go
no
p
erd
uti
).
Str
ea
m a
pe
rto
in
ap
pe
nd
:
–il
fil
e a
sso
cia
to,
se n
on
pre
sen
te,
vie
ne c
reato
;
–il
pu
nta
tore
si
sp
osta
all
a f
ine d
ell
o s
tream
, in
co
rris
po
nd
en
za d
ell
a m
arc
a d
i fi
ne s
tream
(e
ven
tuali
dati
pre
sen
ti n
el fi
le n
on
ven
go
no
p
erd
uti
).
216
5.5
Man
ipo
lazio
ne d
ei
file
(II
I)
Str
ea
m a
pe
rto
:
–u
tili
zzato
co
n l
e s
tesse m
od
ali
tà e
gli
ste
ssi
op
era
tori
vis
ti p
er
gli
str
eam
sta
nd
ard
;
–le
op
era
zio
ni eff
ett
uate
su
gli
str
eam
co
invo
lgo
no
i f
ile a
cu
i so
no
sta
ti a
sso
cia
ti.
–S
cri
ttu
ra:
•u
sc <
< 1
0;
–L
ett
ura
:
•in
gr
>>
x
Fu
nzio
ne
clo
se
():
–ch
iud
e u
no
str
eam
ap
ert
o,
un
a v
olt
a c
he è
sta
to
uti
lizzato
.
ing
r.clo
se()
;
usc.c
lose()
;
Str
ea
m c
hiu
so
:–
pu
ò e
ssere
ria
pert
o,
asso
cia
nd
olo
ad
un
q
ualu
nq
ue f
ile e
co
n u
na m
od
ali
tà a
rbit
rari
a.
Fin
e d
el p
rog
ram
ma
:–
tutt
i g
li s
tream
ap
ert
i ven
go
no
au
tom
ati
cam
en
te
ch
iusi.
Err
ori
:–
qu
an
to d
ett
o p
er
lo s
tream
cin
vale
an
ch
e p
er
qu
alu
nq
ue a
ltro
str
eam
ap
ert
o i
n lett
ura
.
217
5.5
Man
ipo
lazio
ne d
ei
file
(IV
)
// S
cri
ve 4
nu
meri
in
teri
nel fi
le “
esem
pio
”.
// A
pre
il fi
le i
n lett
ura
e s
tam
pa s
u v
ideo
il su
o c
on
ten
uto
#in
clu
de <
cstd
lib
>#in
clu
de <
fstr
eam
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
fstr
eam
ff;
in
t n
um
;ff
.op
en
("esem
pio
", io
s::
ou
t);
if (
!ff)
{cerr
<<
"Il
fil
e n
on
pu
o' essere
ap
ert
o"
<<
en
dl;
exit
(1);
// funzio
ne e
xit
} for
(in
t i =
0;
i <
4;
i++
)ff
<<
i <
< e
nd
l;
// A
TT
. separa
re n
um
eri
ff.c
lose()
;ff
.op
en
("esem
pio
", io
s::
in);
if (
!ff)
{cerr
<<
"Il
fil
e n
on
pu
o' essere
ap
ert
o"
<<
en
dl;
exit
(1);
}
wh
ile (
ff >
> n
um
)
//
fin
o a
lla f
ine d
el file
co
ut
<<
nu
m <
< '\t
';co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 0
1
2
3
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
218
5.5
Man
ipo
lazio
ne d
ei
file
(V
)
// A
pre
in
lett
ura
il fi
le “
esem
pio
” e
leg
ge N
nu
meri
in
teri
. //
Co
ntr
oll
a c
he l
e i
str
uzio
ni d
i le
ttu
ra n
on
po
rtin
o
// lo
str
eam
in
sta
to d
i err
ore
#in
clu
de <
cstd
lib
>#in
clu
de <
fstr
eam
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
fstr
eam
ff;
in
t i,
nu
m;
co
nst
int
N =
6;
ff.o
pen
("esem
pio
", io
s::
in);
if (
!ff)
{cerr
<<
"Il
fil
e n
on
pu
o' essere
ap
ert
o"
<<
en
dl;
exit
(1);
}
for
(i=
0;
i <
N &
& f
f >
> n
um
; i+
+)
co
ut
<<
nu
m <
< '\t
';co
ut
<<
en
dl;
if (
i!=
N)
cerr
<<
"E
rro
re n
ell
a l
ett
ura
del fi
le "
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 0
1
2
3
E
rro
re n
ell
a l
ett
ura
del fi
leP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
219
5.5
Man
ipo
lazio
ne d
ei
file
(V
I)
// E
sem
pio
ap
ert
ura
in
ap
pen
d.
#in
clu
de <
cstd
lib
>#in
clu
de <
fstr
eam
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
(){
fstr
eam
ff;
in
t i;
ch
ar
c;
ff.o
pen
("esem
pio
", io
s::
ou
t);
if (
!ff)
{cerr
<<
"Il
fil
e n
on
pu
o' essere
ap
ert
o"
<<
en
dl;
exit
(1);
}
for
(in
t i =
0;
i <
4;
i++
)ff
<<
i <
< '\t
';ff
.clo
se()
;ff
.op
en
("esem
pio
", io
s::
ou
t | io
s :
: ap
p);
ff <
< 5
<<
'\t
' <
< 6
<<
en
dl;
ff.c
lose()
;ff
.op
en
("esem
pio
", io
s::
in);
if (
!ff)
{cerr
<<
"Il
fil
e n
on
pu
o' essere
ap
ert
o"
<<
en
dl;
exit
(1);
}
wh
ile (
ff.g
et(
c))
co
ut
<<
c;
syste
m("
PA
US
E")
;re
turn
0;
} 0
1
2
3
5
6
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
220
5.5
Man
ipo
lazio
ne d
ei
file
(V
II)
Vers
ion
i alt
ern
ati
ve
fstr
eam
ff;
ff
.op
en
("fi
le",
io
s::
in); if
str
eam
ff(
"fil
e")
;
fstr
eam
ff;
ff
.op
en
("fi
le",
io
s::
ou
t);
ofs
tream
ff(
"fil
e")
;
fstr
eam
ff;
ff
.op
en
("fi
le",
io
s::
ou
t|io
s::
ap
p);
ofs
tream
ff(
"fil
e",
ios::
ap
p);
221
7.1
Co
ncett
o d
i fu
nzio
ne (
I)
// P
rob
lem
a
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
n;
int
main
(){
int
f;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
:";
cin
>>
n;
f =
1;
for
(in
t i =
2;
i <
= n
; i+
+)
f *
= i
;co
ut
<<
"Il
fatt
ori
ale
e':
" <
< f
<<
en
dl;
/* A
ltre
ela
bora
zio
ni */
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
";
cin
>>
n;
f =
1;
for
(in
t i =
2;
i <
= n
; i+
+)
f *=
i;
co
ut
<<
"Il
fatt
ori
ale
e':
" <
< f
<<
en
dl;
/* A
ltre
ela
bora
zio
ni */
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
: 4
Il f
att
ori
ale
e':
24
Inseri
sci
un
nu
mero
in
tero
: 5
Il f
att
ori
ale
e':
120
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
222
7.1
Co
ncett
o d
i fu
nzio
ne (
II)
// S
olu
zio
ne 1
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
n;
int
fatt
()
{in
t ri
s =
1;
for
(in
t i =
2;
i <
= n
; i+
+)
ris *
= i;
retu
rn r
is;
} int
main
()
{in
t f;
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
:";
cin
>>
n;
f =
fatt
();
co
ut
<<
"Il
fatt
ori
ale
e':
" <
< f
<<
en
dl;
/* A
ltre
ela
bora
zio
ni */
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
:";
cin
>>
n;
f =
fatt
();
co
ut
<<
"Il
fatt
ori
ale
e':
" <
< f
<<
en
dl;
/* A
ltre
ela
bora
zio
ni */
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
: 4
Il f
att
ori
ale
e':
24
Inseri
sci
un
nu
mero
in
tero
: 5
Il f
att
ori
ale
e':
120
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
223
7.1
Co
ncett
o d
i fu
nzio
ne (
III)
// S
olu
zio
ne 2
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
fatt
(in
t n
) {
int
ris =
1;
for
(in
t i =
2;
i <
= n
; i+
+)
ris *
= i;
retu
rn r
is;
} int
main
()
{in
t i,
f;
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
:";
cin
>>
i;
f =
fatt
(i);
co
ut
<<
"Il
fatt
ori
ale
e':
" <
< f
<<
en
dl;
/* A
ltre
ela
bora
zio
ni */
co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
:";
cin
>>
i;
f =
fatt
(i);
co
ut
<<
"Il
fatt
ori
ale
e':
" <
< f
<<
en
dl;
/* A
ltre
ela
bora
zio
ni */
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
: 4
Il f
att
ori
ale
e':
24
Inseri
sci
un
nu
mero
in
tero
: 5
Il f
att
ori
ale
e':
120
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
224
7.1
Co
ncett
o d
i fu
nzio
ne (
IV)
Vari
ab
ili d
efi
nit
e in
un
a f
un
zio
ne:
•lo
cali
all
a f
un
zio
ne;
No
mi
di vari
ab
ili
locali
e d
i arg
om
en
ti f
orm
ali
:
•asso
cia
ti a
d o
gg
ett
i ch
e a
pp
art
en
go
no
all
a f
un
zio
ne
in c
ui so
no
defi
nit
i;
•se u
no
ste
sso
no
me v
ien
e u
tili
zzato
in
fu
nzio
ni
div
ers
e,
si
rife
risce i
n c
iascu
na f
un
zio
ne a
d u
n
og
gett
o d
ivers
o;
•in
qu
esto
caso
si d
ice c
he i
l n
om
e è
vis
ibil
eso
lo
nell
a r
isp
ett
iva f
un
zio
ne.
Ch
iam
ata
:
•g
li a
rgo
men
ti f
orm
ali
e l
e v
ari
ab
ili
locali
ven
go
no
all
ocati
in
mem
ori
a;
•g
li a
rgo
men
ti f
orm
ali
ven
go
no
in
izia
lizzati
co
n i
valo
ri d
eg
li a
rgo
men
ti a
ttu
ali
(passag
gio
per
valo
re);
•g
li a
rgo
men
ti f
orm
ali
e l
e v
ari
ab
ili
locali
ven
go
no
u
tili
zzati
per
le d
ovu
te e
lab
ora
zio
ni;
•al
term
ine d
ell
a f
un
zio
ne, essi
ven
go
no
deall
ocati
, e
la m
em
ori
a d
a e
ssi
occu
pata
vie
ne r
esa d
isp
on
ibil
e
per
alt
ri u
si.
Ista
nza d
i fu
nzio
ne:
•n
uo
va c
op
ia d
eg
li a
rgo
men
ti f
orm
ali
e d
ell
e v
ari
ab
ili
locali
(n
asco
no
e m
uo
ion
o c
on
l'in
izio
e l
a f
ine d
ell
a
esecu
zio
ne d
ell
a f
un
zio
ne);
•il
valo
re d
i u
na v
ari
ab
ile l
ocale
ott
en
uto
du
ran
te u
na
cert
a e
secu
zio
ne d
ell
a f
un
zio
ne n
on
vie
ne
co
nserv
ato
per
le s
uccessiv
e i
sta
nze.
225
7.1
Co
ncett
o d
i fu
nzio
ne (
V)
•Q
uan
do
un
a f
un
zio
ne v
ien
e i
nvo
cata
, vie
ne c
reata
in
m
em
ori
a u
n’i
sta
nza d
ell
a f
un
zio
ne;
•L
’ista
nza h
a u
n t
em
po
di vit
a p
ari
al
tem
po
di
esecu
zio
ne d
ell
a f
un
zio
ne
// Ista
nza d
i fu
nzio
ne
Valo
re d
i i
1in
t ri
s
int n
Arg
om
enti f
orm
ali
Variabili
locali
Ese
mp
io: fu
nzio
ne
in
t fa
tt(i
nt n
)p
rece
de
nte
……in
t f
int i
Ese
mp
io: fu
nzio
ne
ma
in()
pre
ce
de
nte
226
7.3
.1 Istr
uzio
ne r
etu
rn (
I)
// R
esti
tuis
ce i
l m
assim
o t
erm
ine d
ell
a s
uccessio
ne d
i //
Fib
on
acci m
ino
re o
ug
uale
al d
ato
in
tero
po
sit
ivo
n
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
un
sig
ned
in
t fi
bo
(un
sig
ned
in
t n
) {
un
sig
ned
in
t i
= 0
, j =
1,
s;
for
(;;)
{
if (
(s =
i +
j)
> n
) re
turn
j;
i =
j;
j =
s;
}} in
t m
ain
()
{u
nsig
ned
in
t n
;co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
n;
co
ut
<<
"T
erm
ine s
uccessio
ne F
ibo
nacci:
";
co
ut
<<
fib
o(n
) <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
12
Term
ine s
uccessio
ne F
ibo
nacci:
8P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
Valo
re d
i n(m
ain
)
0in
t i
int
n
1…
int
j
int
s
Ista
nza d
ella
funzio
ne f
ibo()
…in
t n
Ista
nza d
ella
funzio
ne m
ain
()
227
7.3
.1 Istr
uzio
ne r
etu
rn (
II)
// C
on
tro
lla s
e u
n in
tero
e’ p
osit
ivo
, n
eg
ati
vo
o n
ull
o
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
en
um
val
{N,
Z, P
};
val
seg
no
(in
t n
) {
if (
n >
0)
retu
rn P
;if
(n
==
0)
retu
rn Z
;re
turn
N;
} int
main
()
{in
t i;
// term
ina s
e legge u
n v
alo
re ille
gale
per
iw
hil
e (
co
ut
<<
"N
um
ero
in
tero
? "
&&
cin
>>
i)
sw
itch
(seg
no
(i))
{
case N
:co
ut
<<
"V
alo
re n
eg
ati
vo
" <
< e
nd
l;co
nti
nu
e;
case Z
:co
ut
<<
"V
alo
re n
ull
o"
<<
en
dl;
co
nti
nu
e;
case P
:co
ut
<<
"V
alo
re p
osit
ivo
" <
< e
nd
l;} syste
m("
PA
US
E")
;re
turn
0;
}
228
7.3
.1 Istr
uzio
ne r
etu
rn (
III)
// C
on
tro
lla s
e u
n in
tero
e’ p
osit
ivo
, n
eg
ati
vo
o n
ull
o
Nu
mero
in
tero
? -
10
Valo
re n
eg
ati
vo
Nu
mero
in
tero
? 3
Valo
re p
osit
ivo
Nu
mero
in
tero
? 0
Valo
re n
ull
oN
um
ero
in
tero
? ^
ZP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
-10
int
n
Prim
a ista
nza f
unzio
ne s
egno()
3in
t n
Seconda ista
nza f
unzio
ne s
egno()
0in
t n
Terz
a ista
nza f
unzio
ne s
egno()
229
7.4
Dic
hia
razio
ni d
i fu
nzio
ni
(I)
// C
on
tro
lla s
e i
cara
tteri
lett
i so
no
lett
ere
min
usco
le o
// n
um
eri
.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{ch
ar
c;
wh
ile (
co
ut
<<
"C
ara
ttere
:? "
<<
en
dl &
& c
in >
> c
)if
(!i
s_lo
w_d
ig(c
))//
ER
RO
RE
!{
syste
m("
PA
US
E")
;re
turn
0;
}
} bo
ol is
_lo
w_d
ig(c
har
c)
{re
turn
(c >
= '0' &
& c
<=
'9' ||
c >
= 'a' &
& c
<=
'z')
? t
rue :
fals
e;
} ER
RO
RE
SE
GN
AL
AT
O I
N F
AS
E D
I C
OM
PIL
AZ
ION
E
9:
`is_lo
w_d
ig' u
nd
ecla
red
(fi
rst
use t
his
fu
ncti
on
)
230
7.4
Dic
hia
razio
ni d
i fu
nzio
ni
(II)
// C
on
tro
lla s
e i
cara
tteri
lett
i so
no
lett
ere
min
usco
le o
// n
um
eri
.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
bo
ol is
_lo
w_d
ig(c
har
c);
//
oppure
bo
ol is
_lo
w_d
ig(c
har)
;in
t m
ain
()
{ch
ar
c;
wh
ile (
co
ut
<<
"C
ara
ttere
:? "
<<
en
dl &
& c
in >
> c
)if
(!i
s_lo
w_d
ig(c
)){
syste
m("
PA
US
E")
;re
turn
0;
}
} bo
ol is
_lo
w_d
ig(c
har
c)
{re
turn
(c >
= '0' &
& c
<=
'9' ||
c >
= 'a' &
& c
<=
'z')
? t
rue :
fals
e;
} Cara
ttere
:?r C
ara
ttere
:?3 C
ara
ttere
:?A P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
231
7.6
Arg
om
en
ti e
vari
ab
ili
locali
(I)
// S
om
ma g
li in
teri
co
mp
resi
tra i
dati
in
teri
n e
d m
,//
estr
em
i in
clu
si,
co
n n
<=
m
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
so
mm
aIn
teri
(in
t n
, in
t m
) {
int
s =
n;
for
(in
t i =
n+
1;
i <
= m
; i+
+)
s +
= i;
retu
rn s
;} in
t m
ain
()
{in
t a,
b;
wh
ile (
co
ut
<<
"D
ue i
nte
ri?
" &
& c
in >
> a
>>
b)
// term
ina s
e legge u
n v
alo
re ille
gale
per
a,
bco
ut
<<
so
mm
aIn
teri
(a,
b)
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Du
e i
nte
ri?
1 2
3 Du
e i
nte
ri?
4 5
9 Du
e i
nte
ri?
sP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
2in
t m
1in
t n
1in
t s
5in
t m
4in
t n
4in
t s
232
7.6
Arg
om
en
ti e
vari
ab
ili
locali
(II
)
// C
alc
ola
il m
assim
o f
ra t
re n
um
eri
in
teri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
massim
o(i
nt
a,
int
b, in
t c)
{re
turn
((a
> b
) ?
((a
> c
) ?
a :
c)
: (b
> c
) ?
b :
c);
} int
main
()
{in
t i,
j, k;
co
ut
<<
"In
seri
sci
tre n
um
eri
: ";
cin
>>
i >
> j >
> k
;in
t m
= m
assim
o (
i, j, k);
co
ut
<<
m <
< e
nd
l;/*
...*
/d
ou
ble
x,
y,
z;
co
ut
<<
"In
seri
sci
tre n
um
eri
: ";
cin
>>
x >
> y
>>
z;
do
ub
le w
= m
assim
o (
x, y,
z);
//
Si applic
ano le r
egole
sta
ndard
per
la c
onvers
ione d
i tipo.
co
ut
<<
w <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
tre n
um
eri
: 3 4
55 In
seri
sci
tre n
um
eri
: 3.3
4.4
5.5
5 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
233
7.7
Fu
nzio
ni
vo
id
// S
cri
ve a
ste
risch
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
cri
viA
ste
risch
i(in
t n
) {
for
(in
t i =
0;
i <
n;
i++
) co
ut
<<
'*'
;co
ut
<<
en
dl;
} int
main
()
{in
t i;
co
ut
<<
"Q
uan
ti a
ste
risch
i? "
;cin
>>
i;
scri
viA
ste
risch
i(i)
;syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti a
ste
risch
i? 2
0**
****
****
****
****
**P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
234
7.8
Fu
nzio
ni
sen
za a
rgo
men
ti
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int
N =
20;
vo
id s
cri
viA
ste
risch
i(vo
id)
// anche v
oid
scriviA
ste
rischi()
{fo
r (i
nt
i =
0;
i <
N;
i++
) co
ut
<<
'*'
;co
ut
<<
en
dl;
} int
main
()
{scri
viA
ste
risch
i();
syste
m("
PA
US
E")
;re
turn
0;
} ****
****
****
****
****
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
235
7.9
Fu
nzio
ni
rico
rsiv
e (
I)
Fu
nzio
ne:
–p
uò
in
vo
ca
re,
olt
re c
he
un
'alt
ra f
un
zio
ne
, a
nc
he
se
s
tes
sa
;
–in
qu
es
to c
as
o s
i h
a u
na
un
a f
un
zio
ne
ric
ors
iva
.
Fu
nzio
ne r
ico
rsiv
a:
–n
atu
rale
qu
an
do
il
pro
ble
ma
ris
ult
a f
orm
ula
to in
m
an
iera
ric
ors
iva
;
–e
se
mp
io (
fatt
ori
ale
di
un
nu
me
ro n
atu
rale
n):
fatt
ori
ale
(n)
= 1
s
e n
= 0
n*f
att
ori
ale
(n-1
)
se
n >
0
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
fatt
(in
t n
){
if
(n =
= 0
) re
turn
1;
retu
rn n
* f
att
(n -
1);
} int
main
()
{co
ut
<<
"Il
fatt
ori
ale
di 3 e
': "
<<
fatt
(3)
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Il f
att
ori
ale
di 3 e
': 6
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
236
7.9
Fu
nzio
ni
rico
rsiv
e (
II)
3re
turn
3*f
att
(2)
fatt
(3)
2re
turn
2*f
att
(1)
fatt
(2)
1re
turn
1*f
att
(0)
fatt
(1)
0re
turn
1
fatt
(0)
restitu
isce 1
restitu
isce 1
restitu
isce 2
restitu
isce 6
237
7.9
Fu
nzio
ni
rico
rsiv
e (
III)
Massim
o c
om
un
div
iso
re:
int
mcd
(in
t alf
a,
int
beta
)
{ if
(b
eta
==
0)
retu
rn a
lfa;
retu
rn m
cd
(beta
, alf
a %
beta
);
}
So
mm
a d
ei
pri
mi n
natu
rali
:
int
so
mm
a(i
nt
n)
{ if
(n
==
0)
retu
rn 0
;
retu
rn n
+ s
om
ma(n
-1);
}
Reale
ele
vato
a u
n n
atu
rale
:
do
ub
le p
ot(
do
ub
le x
, in
t n
)
{
if (
n =
= 0
) re
turn
1;
retu
rn x
* p
ot(
x, n
-1);
}
Ele
men
ti d
ell
a s
eri
e d
i F
ibo
nacci:
int
fib
(in
t n
)
{ if
(n
==
1)
retu
rn 0
;
if (
n =
= 2
) re
turn
1;
retu
rn f
ib(n
-1)
+ f
ib(n
-2);
}
238
7.9
Fu
nzio
ni
rico
rsiv
e (
IV)
// L
eg
ge u
na p
aro
la t
erm
inata
da u
n p
un
to, e l
a s
cri
ve
// in
sen
so
in
vers
o.
Per
esem
pio
, "p
ipp
o"
div
en
ta
// "
op
pip
".
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id l
eg
giI
nvert
i()
{ch
ar
c;
cin
>>
c;
if (
c !
= '.')
{le
gg
iIn
vert
i();
co
ut
<<
c;
}} in
t m
ain
()
{le
gg
iIn
vert
i();
co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} pip
po
.o
pp
ipP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
239
7.9
Fu
nzio
ni
rico
rsiv
e (
V)
‘p’
c
leggiInvert
i()
cout
<<
c;
‘i’c
leggiInvert
i()
‘p’
c
leggiInvert
i()
‘p’
c
leggiInvert
i()
‘o’
c
leggiInvert
i()
‘.’
c
leggiInvert
i()
cout
<<
c;
cout
<<
c;
cout
<<
c;
oop
op
p
op
pi
op
pip
cout
<<
c;
240
7.9
Fu
nzio
ni
rico
rsiv
e (
VI)
Fo
rmu
lazio
ne
ric
ors
iva
di u
na
fu
nzio
ne
:
–in
div
idu
azio
ne d
i u
no
o p
iù c
asi
base,
nei q
uali
te
rmin
a l
a s
uccessio
ne d
ell
e c
hia
mate
ric
ors
ive;
–d
efi
niz
ion
e d
i u
no
o, co
nd
izio
nata
men
te, d
i p
iù
passi
rico
rsiv
i;
–ri
co
rsio
ne c
on
tro
llata
dal valo
re d
i u
n a
rgo
men
to d
i co
ntr
oll
o, in
base a
l q
uale
si
sceg
lie s
e s
i tr
att
a d
i u
n c
aso
base o
di u
n p
asso
ric
ors
ivo
;
–in
un
passo
ric
ors
ivo
, la
fu
nzio
ne v
ien
e c
hia
mata
n
uo
vam
en
te p
assan
do
le u
n n
uo
vo
valo
re
dell
’arg
om
en
to d
i co
ntr
oll
o;
–il
ris
ult
ato
di q
uesta
ch
iam
ata
, sp
esso
ult
eri
orm
en
te
ela
bo
rato
, vie
ne r
esti
tuit
o a
l ch
iam
an
te d
ell
’ista
nza
co
rren
te;
–n
ei casi
base,
il r
isu
ltato
vie
ne c
alc
ola
to s
en
za a
ltre
ch
iam
ate
ric
ors
ive.
Sc
he
ma
di c
alc
olo
:
–p
ara
llelo
a q
uell
o u
sato
nell
e c
om
pu
tazio
ni
itera
tive.
241
7.9
Fu
nzio
ni
rico
rsiv
e (
VII
)
NO
TA
BE
NE
:
–o
gn
i fu
nzio
ne
pu
ò e
ss
ere
fo
rmu
lata
sia
in
ma
nie
ra
ric
ors
iva
ch
e i
n m
an
iera
ite
rati
va
;
–s
pe
ss
o,
la f
orm
ula
zio
ne
ite
rati
va
è p
iù c
on
ve
nie
nte
, in
te
rmin
i d
i te
mp
o d
i e
se
cu
zio
ne
e d
i o
cc
up
azio
ne
di
me
mo
ria
.
–in
div
ers
i c
as
i è
più
ag
evo
le (
pe
r il p
rog
ram
ma
tore
) e
sp
rim
ere
un
pro
ce
dim
en
to d
i c
alc
olo
in
ma
nie
ra
ric
ors
iva
;
–q
ue
sto
pu
ò r
ifle
tte
rsi
in u
na
ma
gg
iore
co
nc
isio
ne
e
ch
iare
zza
de
l p
rog
ram
ma
, e
qu
ind
i u
na
min
ore
p
rob
ab
ilit
à d
i c
om
me
tte
re e
rro
ri.
242
7.9
Fu
nzio
ni
rico
rsiv
e (
Esem
pio
)
Scri
vere
un
afu
nzio
ne
rico
rsiv
ach
esta
mp
isu
uscit
asta
nd
ard
un
tria
ng
olo
rett
an
go
loro
ves
cia
toco
mp
osto
di
aste
risch
i.I
du
ecate
tid
el
tria
ng
olo
co
nte
ng
on
olo
ste
sso
nu
mero
Nd
iaste
ris
ch
i.N
ell
’esem
pio
seg
uen
teN
=3.
* *
*
* *
*
243
7.9
Fu
nzio
ni
rico
rsiv
e (
Esem
pio
)
vo
idscri
vi(
int
n)
{if
(n=
=0)
retu
rn;
for
(in
ti=
0;
i<n
;i+
+)
co
ut
<<
'*';
co
ut
<<
en
dl;
scri
vi(
n-1
);}
244
3.1
1 L
ibre
rie
Lib
reri
a:
•in
sie
me d
i fu
nzio
ni (s
ott
op
rog
ram
mi)
pre
co
mp
ilate
;
•fo
rmata
da c
op
pie
di fi
le;
•p
er
og
ni co
pp
ia u
n f
ile c
on
tien
e a
lcu
ni
so
tto
pro
gra
mm
i co
mp
ilati
ed
un
o c
on
tien
e le
dic
hia
razio
ni d
ei
so
tto
pro
gra
mm
i ste
ssi
(qu
est’
ult
imo
è d
ett
o f
ile d
i in
testa
zio
ne e
il su
o
no
me t
erm
ina t
ipic
am
en
te c
on
l'e
ste
nsio
ne h
).
Uti
lizzo
di fu
nzio
ni d
i li
bre
ria:
•n
ell
a f
ase d
i scri
ttu
ra d
el p
rog
ram
ma,
inclu
dere
il
fi
le d
i in
testa
zio
ne d
ell
a lib
reri
a u
san
do
la d
irett
iva
#in
clu
de;
•n
ell
a f
ase d
i co
lleg
am
en
to, sp
ecif
icare
la l
ibre
ria d
a
usare
, seco
nd
o l
e c
on
ven
zio
ni
dell
’am
bie
nte
di
svil
up
po
uti
lizzato
.
Esem
pio
:
•p
rog
ram
ma c
on
ten
uto
nel
file
mio
pro
g.c
pp
, ch
e u
sa
dell
e f
un
zio
ni d
ell
a lib
reri
a m
ate
mati
ca;
•d
eve c
on
ten
ere
la d
irett
iva:
#in
clu
de <
cm
ath
>
•A
lcu
ne l
ibre
rie C
++
so
no
dis
po
nib
ili in
tu
tte l
e
imp
lem
en
tazio
ni e c
on
ten
go
no
gli
ste
ssi
so
tto
pro
gra
mm
i.
245
3.1
1 L
ibre
ria s
tan
dard
cs
tdlib
•ab
s(n
)valo
re a
sso
luto
di n
;
•ra
nd
()in
tero
pseu
do
casu
ale
co
mp
reso
fra
0 e
la
co
sta
nte
pre
defi
nit
a R
AN
D_M
AX
;
•sra
nd
(n)
iniz
iali
zza la f
un
zio
ne
ran
d()
.
cc
typ
e
Resti
tuis
co
no
un
valo
re b
oo
lean
o
•is
aln
um
(c)
lett
era
o c
ifra
;
•is
alp
ha(c
)le
ttera
;
•is
dig
it(c
)cif
ra;
•is
low
er(
c)
lett
era
min
usco
la;
•is
pri
nt(
c)
cara
ttere
sta
mp
ab
ile,
co
mp
reso
lo
sp
azio
;
•is
sp
ace(c
)sp
azio
, salt
o p
ag
ina, n
uo
va r
iga,
rito
rno
carr
ell
o,
tab
ula
zio
ne
ori
zzo
nta
le, ta
bu
lazio
ne v
ert
icale
;
•is
up
per(
c)
lett
era
maiu
sco
la;
246
3.1
1 L
ibre
ria s
tan
dard
cm
ath
•fu
nzio
ni tr
igo
no
metr
ich
e (
x è
un
do
ub
le)
–sin
(x)
sen
o d
i x;
–co
s(x
)co
sen
o d
i x;
–ta
n(x
)ta
ng
en
te d
i x;
–asin
(x)
arc
osen
o d
i x;
–aco
s(x
)arc
oco
sen
o d
i x
–ata
n(x
)arc
ota
ng
en
te d
i x
•fu
nzio
ni esp
on
en
zia
li e
lo
gari
tmic
he
–exp
(x)
eele
vato
all
a x
;
–lo
g(x
)lo
gari
tmo
in
base e
di x;
–lo
g10(x
) lo
gari
tmo
in
base 1
0 d
i x;
•alt
re f
un
zio
ni (a
nch
e y
è u
n d
ou
ble
)
–fa
bs(x
)valo
re a
sso
luto
di x;
–ceil
(x)
min
imo
in
tero
mag
gio
re o
u
gu
ale
a x
;
–fl
oo
r(x)
massim
o i
nte
ro m
ino
re o
u
gu
ale
a x
;
–p
ow
(x, y)
x e
levato
all
a y
;
–sq
rt(x
)ra
dic
e q
uad
rata
di x;
247
8.1
Tip
i d
eri
vati
Tip
i fo
nd
am
en
tali
:
•d
a q
uesti
si
po
sso
no
deri
vare
alt
ri t
ipi;
•d
al t
ipo
in
tsi d
eri
va i
l ti
po
pu
nta
tore
a i
nt.
–vari
ab
ile a
pp
art
en
en
te a
qu
esto
tip
o:
pu
ò
assu
mere
co
me v
alo
ri i
nd
iriz
zi d
i in
teri
.
•d
al ti
po
in
tsi
deri
va i
l ti
po
arr
ay d
i 4 i
nt:
–vari
ab
ile a
pp
art
en
en
te a
qu
esto
tip
o:
pu
ò
assu
mere
co
me v
alo
ri 4
in
teri
.
Meccan
ism
i d
i d
eri
vazio
ne:
•p
osso
no
essere
co
mp
osti
fra
di lo
ro, p
erm
ett
en
do
la
defi
niz
ion
e d
i ti
pi d
eri
vati
arb
itra
riam
en
te c
om
ple
ssi;
•p
ren
den
do
gli
in
teri
co
me b
ase,
si
po
sso
no
defi
nir
e
arr
ay d
i p
un
tato
ri a
in
teri
, p
un
tato
ri a
d a
rray d
i in
teri
, arr
ay d
i arr
ay d
i in
teri
, eccete
ra.
Tip
i d
eri
vati
:
–ri
feri
men
ti;
–p
un
tato
ri;
–arr
ay;
–str
utt
ure
;
–u
nio
ni;
–cla
ssi.
248
8.2
Rif
eri
men
ti(I
)
Rif
eri
me
nto
:
–id
en
tifi
ca
tore
ch
e in
div
idu
a u
n o
gg
ett
o;
–ri
feri
me
nto
de
fau
lt:
il n
om
e d
i u
n o
gg
ett
o,
qu
an
do
qu
es
to è
un
id
en
tifi
ca
tore
.
–o
ltre
a q
ue
llo
de
fau
lt, s
i p
os
so
no
de
fin
ire
alt
ri
rife
rim
en
ti d
i u
n o
gg
ett
o (
sin
on
imi o
alia
s).
Tip
o r
ife
rim
en
to:
–p
os
sib
ili id
en
tifi
ca
tori
di o
gg
ett
i d
i u
n d
ato
tip
o
(il ti
po
de
ll’o
gg
ett
o d
ete
rmin
a il ti
po
de
l ri
feri
me
nto
).
Dic
hia
razio
ne d
i u
n t
ipo
rif
eri
men
to e
defi
niz
ion
e d
i u
n
rife
rim
en
to s
on
o c
on
testu
ali
.
Sin
tassi:
ba
sic
-re
fere
nc
e-d
efi
nit
ion
refe
ren
ce
-ty
pe
-in
dic
ato
r i
de
nti
fie
r
refe
ren
ce
-in
itia
lize
r|o
pt
refe
ren
ce
-ty
pe
-in
dic
ato
r
typ
e-i
nd
ica
tor
&
refe
ren
ce
-in
itia
lize
r
=o
bje
ct-
na
me
–in
dic
ato
re d
i ti
po
:
•sp
ecific
a tip
o d
ell’
og
ge
tto
rife
rito
;N
on
si
po
sso
no
defi
nir
eri
feri
men
ti d
iri
feri
men
ti.
249
8.2
Rif
eri
men
ti(I
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
10;
int
&r
= i;
int
&s =
r;
//in
t &
s;
ER
RO
RE
, deve e
ssere
sem
pre
iniz
.//
int
&s =
10;
E
RR
OR
Eco
ut
<<
i <
< '\t
' <
< r
<<
'\t
' <
< s
<<
en
dl;
// 1
010 1
0r+
+;
co
ut
<<
i <
< '\t
' <
< r
<<
'\t
' <
< s
<<
en
dl;
// 1
111 1
1
int
h =
0,
k =
1;
int
&r1
= h
, &
r2 =
k;
// d
ue r
iferim
enti
int
&r3
= h
, r4
;//
un r
iferim
ento
ed u
n inte
ro
syste
m("
PA
US
E")
;re
turn
0;
} 10
10
10
11
11
11
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
1 0 10
11
2
11
6
12
0i, r
, s
h,r
1,r
3
k,r
2
250
8.2
.1R
iferi
men
tico
nst
(I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
1;
co
nst
int
&r
= i;
// N
ota
re:
i non è
costa
nte
int
j =
10;
j =
r;
// O
Kco
ut
<<
j <
< e
nd
l;//
1
//r
= 1
;E
RR
OR
E!
i++
;co
nst
int
k =
10;
co
nst
int
&t
= k
;//
OK
co
ut
<<
t <
< e
nd
l;//
10
//in
t &
tt =
k;
ER
RO
RE
!syste
m("
PA
US
E")
;re
turn
0;
} 1 10
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
10
10 1
11
2
11
6
12
0i, r
jk, t
251
8.2
.2R
iferi
men
ti c
om
e a
rgo
men
ti(I
)
// S
cam
bia
in
teri
(E
RR
AT
O)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
cam
bia
(in
t a, in
t b
) {
// s
cam
bia
gli
arg
om
enti a
ttuali
int
c =
a;
a =
b;
b =
c;
} int
main
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 2
3scam
bia
(i,
j);
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 2
3syste
m("
PA
US
E")
;re
turn
0;
}
3 2 3 2
96
10
0
11
6
12
0ijab
2 3 3 2
96
10
0
11
6
12
0ijab
Ista
nza
(sca
mb
ia)
Ista
nza
(sca
mb
ia)
Ista
nza
(m
ain
)Is
tan
za
(m
ain
) 252
8.2
.2R
iferi
men
ti c
om
e a
rgo
men
ti(I
I)
Arg
om
en
to d
i u
na f
un
zio
ne:
–p
uò
essere
di u
n t
ipo
rif
eri
men
to;
–in
qu
esto
caso
:
•l’a
rgom
ento
form
ale
corr
isponde a
un
conte
nitore
senza
nom
e,
che h
a p
er
valo
re il
rife
rim
ento
;
•nel corp
o d
ella
funzi
one,
ogni opera
zione c
he
coin
volg
e l’a
rgom
ento
form
ale
agis
ce
sull’
entità
riferita
.
Ch
iam
ata
dell
a f
un
zio
ne:
–il
rif
eri
men
to a
rgo
men
to f
orm
ale
vie
ne
iniz
iali
zzato
co
n u
n r
iferi
men
to d
el
co
rris
po
nd
en
te a
rgo
men
to a
ttu
ale
;
Arg
om
en
ti r
iferi
men
to:
–d
evo
no
essere
uti
lizzati
qu
an
do
l’e
nti
tà a
ttu
ale
p
uò
essere
mo
dif
icata
.
In s
inte
si:
–la
fu
nzio
ne a
gis
ce s
ull
e e
nti
tà r
iferi
te d
ag
li
arg
om
en
ti a
ttu
ali
.
253
8.2
.2R
iferi
men
ti c
om
e a
rgo
men
ti (
III)
// S
cam
bia
in
teri
(tr
asm
issio
ne m
ed
ian
te r
iferi
men
ti)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
cam
bia
(in
t &
a,
int
&b
) {
// s
cam
bia
i v
alo
ri d
egli
oggett
i rife
riti
int
c =
a;
a =
b;
b =
c;
} int
main
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 2
3scam
bia
(i,
j);
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 3
2syste
m("
PA
US
E")
;re
turn
0;
}
rife
r j
rife
r i
3 2
96
10
0
11
6
12
0ijab
rife
r j
rife
r i
2 3
96
10
0
11
6
12
0ijab
Ista
nza
(sca
mb
ia)
Ista
nza
(sca
mb
ia)
Ista
nza
(m
ain
)Is
tan
za
(m
ain
) 254
8.2
.3R
iferi
men
ti c
on
st
co
me a
rgo
men
ti (
I)
// C
alc
olo
dell
’in
tere
sse
(tra
sm
issio
ne m
ed
ian
te//
rif
eri
men
ti d
i o
gg
ett
i co
sta
nti
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
flo
at
inte
resse(i
nt
imp
ort
o, co
nst
flo
at&
rate
o)
{fl
oat
inte
r =
rate
o*i
mp
ort
o;
//O
K//
rate
o+
= 0
.5;
ER
RO
RE
!re
turn
in
ter;
} int
main
(){
co
ut
<<
"In
tere
sse :
" <
< in
tere
sse(1
000,1
.2)
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inte
resse :
1200
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
255
8.2
.2R
iferi
men
ti r
isu
ltato
di
fun
zio
ne (
I)
// R
iferi
men
ti c
om
e v
alo
ri r
esti
tuit
i (i
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int&
massim
o(i
nt
&a,
int
&b
) {
retu
rn a
> b
? a
: b
;} in
t m
ain
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 1 3
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
massim
o(i
, j)
<<
en
dl;
massim
o(i
, j)
= 5
;co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 1 5
massim
o(i
, j)
++
;
//
l-v
alu
eco
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 1 6
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e in
teri
:1 3
Valo
re m
assim
o 3
1
5
1
6
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
256
8.2
.2R
iferi
men
ti r
isu
ltato
di
fun
zio
ni
(II)
// R
iferi
men
tico
me v
alo
ri r
esti
tuit
i (i
i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int&
massim
o(i
nt
&a,
int
&b
) {
int
&p
= a
> b
? a
: b
;re
turn
p;
// O
K. R
estitu
isce u
n r
iferim
ento
} //~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~//
//
Rif
eri
men
tico
me v
alo
ri r
esti
tuit
i (i
ii)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int&
massim
o(i
nt
a,
int
b)
{re
turn
a >
b ?
a :
b;
// E
RR
OR
E.
Riferim
ento
ad u
n a
rgom
ento
att
uale
che
// v
iene d
istr
utt
o} N
OT
A B
EN
E:
l’err
ore
no
n è
seg
nala
to d
al co
mp
ilato
re.
257
8.2
.3R
iferi
men
ti r
isu
ltato
di
fun
zio
ni
(III
)
// R
iferi
men
tico
nst
co
me v
alo
ri r
esti
tuit
i (i
ii)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int&
massim
o(c
on
st
int&
a,
co
nst
int&
b)
{ re
turn
a >
b ?
a :
b;
} int
main
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
massim
o(i
, j)
<<
en
dl;
//m
assim
o(i
, j)
= 5
;
ER
RO
RE
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e in
teri
:1 3
Valo
re m
assim
o 3
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
258
8.2
.3R
iferi
men
ti
(IV
)
Arg
om
en
to f
orm
ale
di u
na f
un
zio
ne e
ris
ult
ato
pro
do
tto
d
a u
na f
un
zio
ne:
–p
os
so
no
es
se
re r
ife
rim
en
ti c
on
l’a
ttri
bu
to c
on
st.
Arg
om
en
to f
orm
ale
co
n l'a
ttri
bu
to c
on
st:
–p
uò
ave
re c
om
e c
orr
isp
on
de
nte
un
arg
om
en
to
att
ua
le s
en
za
ta
le a
ttri
bu
to, m
a n
on
è le
cit
o i
l c
on
tra
rio
.
Ris
ult
ato
co
n l
'att
rib
uto
co
nst:
–u
na
is
tru
zio
ne
re
turn
pu
ò c
on
ten
ere
u
n'e
sp
res
sio
ne
se
nza
ta
le a
ttri
bu
to, m
a n
on
è
lec
ito
il
co
ntr
ari
o.
Op
era
tore
co
nst_
cast:
–c
on
ve
rte
un
rif
eri
me
nto
co
ns
tin
un
rif
eri
me
nto
n
on
co
ns
t.
259
8.2
.3R
iferi
men
ti
(V)
//R
iferi
men
ti c
om
e v
alo
ri r
esti
tuit
i (i
)#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int&
massim
o(c
on
st
int
&a,
co
nst
int
&b
){
retu
rn c
on
st_
cast<
int&
>(
a >
b ?
a :
b);
} //E
RR
AT
O//
int&
massim
oE
rrato
(const
int&
a, const
int&
b)
//{
// re
turn
a >
b ?
a :
b;
//}
int
main
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 1 3
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
massim
o(i
, j)
<<
en
dl;
massim
o(i
, j)
= 5
;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 1
5
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e in
teri
:1 3
Valo
re m
assim
o 3
1
5
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
260
8.2
.3 R
iferi
men
ti
(VI)
Esem
pio
:
–il r
isu
lta
to d
ella
fu
nzio
ne
è d
i ti
po
in
t&;
–n
ella
is
tru
zio
ne
re
turn
co
mp
are
un
rif
eri
me
nto
c
on
st;
–s
i re
nd
e o
pp
ort
un
a u
na
co
nve
rsio
ne
es
plic
ita
di
tip
o:
int&
maxr1
(co
nst
int&
ra,
co
nst
int&
rb
){
if (
ra >
= r
b)
retu
rn c
on
st_
cast<
int&
>(
ra);
retu
rn c
on
st_
cast<
int&
>(
rb);
} co
nst
int&
maxr1
(co
nst
int&
ra,
co
nst
int&
rb
){
if (
ra >
= r
b)
retu
rn c
on
st_
cast<
int&
>(
ra);
retu
rn r
b;
}
261
8.3
Pu
nta
tori
(I)
Pu
nta
tore
:•
og
gett
o il cu
i valo
re r
ap
pre
sen
ta l
'in
dir
izzo
di u
n
alt
ro o
gg
ett
o o
di u
na f
un
zio
ne.
Tip
o p
un
tato
re:
•in
sie
me d
i valo
ri:
ind
iriz
zi d
i o
gg
ett
i o
di fu
nzio
ni d
i u
n d
ato
tip
o (
il t
ipo
dell
’og
gett
o o
dell
a f
un
zio
ne
dete
rmin
a i
l ti
po
del p
un
tato
re).
Dic
hia
razio
ne d
i u
n t
ipo
pu
nta
tore
e d
efi
niz
ion
e d
i u
n
pu
nta
tore
so
no
co
nte
stu
ali
.
// D
efi
niz
ion
e d
i p
un
tato
ri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t *p
1;
// p
unta
tore
a inte
riin
t* p
2;
int
* p
3;
int
*p4,
*p5;
// d
ue p
unta
tori
int
*p6,
i1;
// u
n p
unta
tore
ed u
n inte
roin
t i2
, *p
7;
// u
n inte
ro e
d u
n p
unta
tore
syste
m("
PA
US
E")
;re
turn
0;
}
262
8.3
Pu
nta
tori
(II
)
12
89
03
78
9
12
0
1
10
0
10
4
10
8
11
2
11
6
12
0
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
1;
int
*p1 =
&i;
// o
pera
tore
indiriz
zo
int
*p2;
…}
ip1
p2
Ind
iriz
zo
ca
su
ale 263
8.3
Pu
nta
tori
(II
I)
// O
pera
tore
ind
iriz
zo
e o
pera
tore
di in
dir
ezio
ne
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
1;
int
*p1 =
&i;
// o
pera
tore
indiriz
zo
*p1 =
10;
// o
pera
tore
di in
direzio
ne
// r
estitu
isce u
n l-v
alu
ein
t *p
2 =
p1;
// D
ue p
unta
tori a
llo s
tesso o
ggett
o
co
ut
<<
i <
< '\t
'<<
*p
1 <
< '\t
' <
< *
p2 <
< e
nd
l;
*p2 =
20;
co
ut
<<
i <
< '\t
'<<
*p
1 <
< '\t
' <
< *
p2 <
< e
nd
l;
co
ut
<<
p1 <
< '\t
' <
< p
2 <
< e
nd
l;
//p
2 =
*p
1;
// E
RR
OR
E:
assegna u
n int
ad u
n p
unt.
//*p
2 =
p1
// E
RR
OR
E:
assegna u
n p
unt.
ad u
n int.
int
*p3;
*p3 =
2;
// A
TT
EN
ZIO
NE
: punta
tore
non iniz
.
syste
m("
PA
US
E")
;re
turn
0;
} 10
10
10
20
20
20
0x22ff
6c
0x22ff
6c
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
264
8.3
Pu
nta
tori
(IV
)
// P
un
tato
ri a
llo
ste
sso
og
gett
o
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{ch
ar
a,
b;
ch
ar
*p =
&a,
*q =
&b
;co
ut
<<
"In
seri
sci
du
e c
ara
tteri
" <
< e
nd
l;cin
>>
a >
> b
;//
Esem
pio
: 'a
''b
'*p
= *
q;
co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
// E
sem
pio
: 'b
''b
'co
ut
<<
*p
<<
'\t
' <
< *
q <
< e
nd
l;//
Esem
pio
: 'b
''b
'
co
ut
<<
"In
seri
sci
du
e c
ara
tteri
" <
< e
nd
l;cin
>>
a >
> b
;//
Esem
pio
: 'c
''f'
p =
q;
co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
// E
sem
pio
: 'c
''f'
co
ut
<<
*p
<<
'\t
' <
< *
q <
< e
nd
l;//
Esem
pio
: 'f'
'f'
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e c
ara
tteri
ab
b
bb
bIn
seri
sci
du
e c
ara
tteri
cf
c
f
f
fP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
265
8.3
Pu
nta
tori
(V
)
// P
un
tato
ri a
co
sta
nti
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
0;
co
nst
int
*p;
// N
essuna iniz
ializ
zazio
ne
p =
&i;
//
OK
// N
.B.:
i n
on e
` costa
nte
int
j;j =
*p
;//
OK
//*p
= 1
;//
ER
RO
RE
! Il v
alo
re d
i inon p
uo’
// e
ssere
modific
ato
att
ravers
o p
co
nst
int
k =
10;
co
nst
int
*q =
&k;
// O
K
int
;//
= &
k;
// E
RR
OR
E!
int*
= c
onst
int*
//q
q =
q;
// E
RR
OR
E!
int*
= c
onst
int*
syste
m("
PA
US
E")
;re
turn
0;
}
266
8.3
Pu
nta
tori
(V
I)
// P
un
tato
ri c
osta
nti
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{ch
ar
c =
'a';
ch
ar
*co
nst
p =
&c;
// S
em
pre
iniz
ializ
zato
co
ut
<<
*p
<<
en
dl;
// 'a
'
*p =
'b
';co
ut
<<
*p
<<
en
dl;
// 'b
'
ch
ar
d =
'c';
//p
= &
d;
// E
RR
OR
E!
ch
ar
*p1,
*co
nst
p2 =
&d
;p
1 =
p;
co
ut
<<
*p
1 <
< e
nd
l;//
'b'
//
p =
p1;
// E
RR
OR
E//
p =
p2;
//
ER
RO
RE
!
syste
m("
PA
US
E")
;re
turn
0;
} a b b Pre
mere
un
tasto
per
co
nti
nu
are
. . .
267
8.3
Pu
nta
tori
(V
II)
// P
un
tato
re a
pu
nta
tore
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
1,
j =
10;
int
*pi =
&i,
*p
j =
&j;
int
**q
1 =
&p
i;co
ut
<<
**q
1 <
< e
nd
l;
// 1
*q1 =
pj;
co
ut
<<
**q
1 <
< e
nd
l;
// 1
0
int
**q
2;
*q2 =
pj;
/
/ A
TT
EN
ZIO
NE
: nessun o
ggett
o p
unta
to
syste
m("
PA
US
E")
;re
turn
0;
} 1 10
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
268
8.3
Pu
nta
tori
(V
III)
// P
un
tato
ri n
ull
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t *p
= N
UL
L;
// form
a e
quiv
ale
nte
: in
t *p
= 0
;
*p =
1;
// E
RR
OR
E I
N E
SE
CU
ZIO
NE
!
if (
p =
= N
UL
L)
co
ut
<<
"P
un
tato
re n
ull
o "
<<
en
dl;
if (
p =
= 0
)co
ut
<<
"P
un
tato
re n
ull
o "
<<
en
dl;
if (
!p) co
ut
<<
"P
un
tato
re n
ull
o "
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
}
269
8.3
Op
era
zio
ni
su
i p
un
tato
ri (
I)
Op
era
zio
ni p
os
sib
ili:
•asseg
nam
en
to d
i u
n’e
sp
ressio
ne c
he p
rod
uce u
n
valo
re i
nd
iriz
zo
ad
un
pu
nta
tore
;
•u
so
di u
n p
un
tato
re p
er
rife
rirs
i all
'og
gett
o p
un
tato
;
•co
nfr
on
to f
ra p
un
tato
ri m
ed
ian
te g
li o
pera
tori
‘=
=’ e
‘!=
’;
•S
tam
pa s
u u
scit
a s
tan
dard
uti
lizzan
do
l’o
pera
tore
di
uscit
a ‘
<<
‘. In
qu
esto
caso
, vie
ne s
tam
pato
il valo
re
in e
sad
ecim
ale
del
pu
nta
tore
ossia
l’i
nd
iriz
zo
d
ell
’og
gett
o p
un
tato
.
Un
pu
nta
tore
pu
ò c
os
titu
ire
un
arg
om
en
to d
i u
na
fu
nzio
ne
:
•n
el co
rpo
dell
a f
un
zio
ne, p
er
mezzo
di in
dir
ezio
ni,
si
po
sso
no
mo
dif
icare
gli
og
gett
i p
un
tati
.
270
8.3
.4P
un
tato
ri c
om
e a
rgo
men
ti(I
)
// S
cam
bia
in
teri
(E
RR
AT
O)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
cam
bia
(in
t a, in
t b
) {
// s
cam
bia
gli
arg
om
enti a
ttuali
int
c =
a;
a =
b;
b =
c;
} int
main
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 2
3scam
bia
(i,
j);
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 2
3syste
m("
PA
US
E")
;re
turn
0;
}
3 2 3 2
96
10
0
11
6
12
0ijab
2 3 3 2
96
10
0
11
6
12
0ijab
Ista
nza
(sca
mb
ia)
Ista
nza
(sca
mb
ia)
Ista
nza
(m
ain
)Is
tan
za
(m
ain
) 271
8.3
.4P
un
tato
ri c
om
e a
rgo
men
ti (
II)
// S
cam
bia
in
teri
(tr
asm
issio
ne m
ed
ian
te p
un
tato
ri)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
cam
bia
(in
t *a
, in
t *b
) {
// s
cam
bia
i v
alo
ri d
egli
oggett
i punta
tiin
t c =
*a;
*a =
*b
;*b
= c
;} in
t m
ain
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 2
3scam
bia
(&
i, &
j);
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 3
2syste
m("
PA
US
E")
;re
turn
0;
}
11
6
12
0
3 2
96
10
0
11
6
12
0ijab
11
6
12
0
2 3
96
10
0
11
6
12
0ijab
Ista
nza
(sca
mb
ia)
Ista
nza
(sca
mb
ia)
Ista
nza
(m
ain
)Is
tan
za
(m
ain
) 272
8.3
.4P
un
tato
ri c
om
e a
rgo
men
ti (
III)
// In
cre
men
ta i
l m
ag
gio
re t
ra d
ue in
teri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id i
ncre
men
ta(i
nt
*a,
int
*b)
{if
(*a
> *
b)
(*a)+
+;
// A
TT
EN
ZIO
NE
*a+
+els
e (*b
)++
;} in
t m
ain
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 2 3
incre
men
ta(&
i, &
j);
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 2 4
syste
m("
PA
US
E")
;re
turn
0;
}
11
6
12
0
3 2
96
10
0
11
6
12
0ijab
11
6
12
0
4 2
96
10
0
11
6
12
0ijab
Ista
nza
(in
cre
me
nta
)Is
tan
za
(in
cre
me
nta
)
Ista
nza
(m
ain
)Is
tan
za
(m
ain
)
273
8.3
.4P
un
tato
ri c
om
e r
isu
ltato
di
fun
zio
ni
(I)
// P
un
tato
rico
me v
alo
ri r
esti
tuit
i (i
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int*
massim
o(i
nt
*a,
int
*b)
{re
turn
*a >
*b
? a
: b
;} in
t m
ain
()
{in
t i,
j;
co
ut
<<
"In
seri
sci
du
e in
teri
: "
<<
en
dl;
cin
>>
i >
> j;
// E
sem
pio
: 2 3
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
*m
assim
o(&
i, &
j) <
< e
nd
l;
*massim
o(&
i, &
j) =
5;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 2 5
//m
assim
o(&
i, &
j)+
+;
//
ER
RO
RE
: il
valo
re r
estitu
ito n
on e
' un l-v
alu
e
(*m
assim
o(&
i, &
j))+
+;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
Esem
pio
: 2 6
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
du
e in
teri
:2 3
Valo
re m
assim
o 3
2
5
2
6
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
274
8.3
.4P
un
tato
ri c
om
e r
isu
ltato
di
fun
zio
ni
(II)
// P
un
tato
ri c
om
e v
alo
ri r
esti
tuit
i (i
i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int*
massim
o(i
nt
*a,
int
*b)
{in
t *p
= *
a >
*b
? a
: b
;re
turn
p;
// R
estitu
isce u
n p
unta
tore
} //~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~//
//
Pu
nta
tori
co
me v
alo
ri r
esti
tuit
i (i
ii)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int*
massim
o(i
nt
*a,
int
*b)
{in
t i =
*a >
*b
? *
a :
*b
;re
turn
&i;
// A
TT
EN
ZIO
NE
: re
stitu
isce l'in
diriz
zo d
i una v
ariabile
//
locale
// [W
arn
ing]
addre
ss o
f lo
cal variable
'i'
retu
rned
}
275
8.3
.4P
un
tato
ri c
om
e a
rgo
men
ti c
osta
nti
(I)
// T
rasm
issio
ne d
ei
para
metr
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int*
massim
o(i
nt
*a,
int
*b)
{re
turn
*a >
*b
? a
: b
;} in
t m
ain
()
{in
t i =
2;
co
nst
int
N =
3;
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
*m
assim
o(&
i, &
N)
<<
en
dl;
// E
RR
OR
E:
invalid
convers
ion f
rom
'const in
t*' t
o 'i
nt*
'
syste
m("
PA
US
E")
;re
turn
0;
}
276
8.3
.4P
un
tato
ri c
om
e a
rgo
men
ti c
osta
nti
(II
)
// T
rasm
issio
ne d
i p
ara
metr
i m
ed
ian
te p
un
tato
ri a
// c
osta
nti
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int*
massim
o(c
on
st
int
*a,
co
nst
int
*b)
{re
turn
co
nst_
cast<
int*
> (
*a >
*b
? a
: b
);} /* in
t* m
assim
o(c
onst
int
*a,
const
int
*b)
{re
turn
*a >
*b ?
a :
b;
// E
RR
OR
E:
invalid
convers
ion f
rom
'const in
t*' t
o 'i
nt*
'} */ in
t m
ain
()
{in
t i =
2;
co
nst
int
N =
3;
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
*m
assim
o(&
i, &
N)
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
}
277
8.3
.4P
un
tato
ri c
om
e r
isu
ltato
di
fun
zio
ni
// P
un
tato
ri a
co
sta
nti
co
me v
alo
ri r
esti
tuit
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int*
massim
o(c
on
st
int
*a,
co
nst
int
*b)
{re
turn
*a >
*b
? a
: b
;} in
t m
ain
()
{in
t i =
2;
co
nst
int
N =
3;
co
ut
<<
"V
alo
re m
assim
o "
;co
ut
<<
*m
assim
o(&
i, &
N)
<<
en
dl;
// in
t*p
1 =
m
assim
o(&
i, &
N);
ER
RO
RE
co
nst
int
*p2 =
massim
o(&
i, &
N);
//
*massim
o(&
i, &
N)
= 1
;
E
RR
OR
E
syste
m("
PA
US
E")
;re
turn
0;
} Valo
re m
assim
o 3
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
278
9.1
Tip
i e o
gg
ett
i arr
ay (
I)
Arr
ay d
i d
ime
ns
ion
e n
:•
n-u
pla
ord
inata
di ele
men
ti d
ell
o s
tesso
tip
o, ai q
uali
ci
si ri
feri
sce m
ed
ian
te u
n in
dic
e, ch
e r
ap
pre
sen
ta l
a
loro
po
siz
ion
e a
ll'in
tern
o d
ell
’arr
ay.
Tip
o d
ell
’arr
ay:
•d
ipen
de d
al ti
po
deg
li e
lem
en
ti.
Dic
hia
razio
ne d
i u
n t
ipo
arr
ay e
defi
niz
ion
e d
i u
n a
rray
so
no
co
nte
stu
ali
.
// S
om
ma g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{co
nst
int
N =
5;
int
v[N
];
// d
imensio
ne d
el vett
ore
costa
nte
co
ut
<<
"In
seri
sci
5 n
um
eri
in
teri
" <
< e
nd
l;fo
r (i
nt
i =
0;
i <
N;
i++
)cin
>>
v[i
];
//
opera
tore
di sele
zio
ne c
on indic
ein
t s =
v[0
];//
restitu
isce u
n l-v
alu
efo
r (i
nt
i =
1;
i <
N;
i++
)s +
= v
[i];
co
ut
<<
s <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
5 n
um
eri
in
teri
1 2
3 4
515
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
279
9.1
Tip
i e o
gg
ett
i arr
ay (
II)
0 1 2 3 4
10
4
10
8
11
2
11
6
12
0v[4
]
v[3
]
v[1
]
v[0
]
v[2
]
AT
TE
NZ
ION
E: l’i
de
ntifica
tore
de
ll’a
rra
y id
en
tifica
l’i
nd
iriz
zo
de
l p
rim
o e
lem
en
to d
ell’
arr
ay
v =
&v[0
]
Ne
ll’e
se
mp
io, v =
10
4;
280
9.1
Tip
i e o
gg
ett
i arr
ay (
III)
// In
izia
lizzazio
ne d
eg
li a
rray
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{co
nst
int
N =
6;
int
a[]
= {
0,
1,
2,
3};
// a
rray d
i 4 e
lem
enti
int
b[N
] =
{0,
1,
2, 3};
// a
rray d
i N
ele
menti
co
ut
<<
"D
imen
sio
ni arr
ay:
";co
ut
<<
siz
eo
f a <
< '\t
' <
< s
izeo
f b
<<
en
dl;
// 1
6
24
co
ut
<<
"N
um
ero
di ele
men
ti:
";co
ut
<<
siz
eo
f a /
siz
eo
f(in
t) <
< '\t
';//
4co
ut
<<
siz
eo
f b
/ s
izeo
f(in
t) <
< e
nd
l;//
6
// E
RR
OR
E!
NO
N S
EG
NA
LA
TO
IN
CO
MP
ILA
ZIO
NE
// N
essun c
ontr
ollo
sul valo
re d
egli
indic
i fo
r (i
nt
i =
0;
i <
N;
i++
)co
ut
<<
a[i
] <
< '\t
';co
ut
<<
en
dl;
for
(in
t i
= 0
; i <
N;
i++
)co
ut
<<
b[i
] <
< '\t
';co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Dim
en
sio
ni arr
ay:
16
24
Nu
mero
di ele
men
ti:
4
60
1
2
3
3
7879712
2009179755
0
1
2
3
0
0
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
281
9.1
Tip
i e o
gg
ett
i arr
ay (
IV)
// A
TT
EN
ZIO
NE
: il
DE
V-C
++
NO
N S
EG
UE
LO
ST
AN
DA
RD
// P
er
imp
orr
e i
l ri
sp
ett
o d
ell
o s
tan
dard
si d
eve u
sare
//
l’o
pzio
ne -
ped
an
tic-e
rro
rs.
// L
’op
zio
ne s
i p
uo
' in
seri
re s
ele
zio
nan
do
dal
men
u’
// S
tru
men
ti, la
vo
ce "
Op
zio
ni d
i C
om
pil
azio
ne“
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t n
= 2
;//
int
a[n
];
//E
RR
OR
E:
num
ero
degli
ele
menti n
on c
osta
nte
syste
m("
PA
US
E")
;re
turn
0;
} Il c
om
pil
ato
re u
sato
sen
za l
’op
zio
ne -
ped
an
tic-e
rro
rs
no
n s
eg
nala
l’e
rro
re.
Il c
od
ice s
cri
tto
no
n è
co
mu
nq
ue p
ort
ab
ile (
un
alt
ro
co
mp
ilato
re p
otr
eb
be n
on
co
mp
ilarl
o).
282
9.1
Tip
i e o
gg
ett
i arr
ay (
V)
// O
pera
zio
ni su
gli
arr
ay.
NO
N S
ON
O P
ER
ME
SS
E
// O
PE
RA
ZIO
NI
AR
ITM
ET
ICH
E,
DI
CO
NF
RO
NT
O, D
I //
AS
SE
GN
AM
EN
TO
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{co
nst
int
N =
5;
int
u[N
] =
{0,
1,
2, 3,
4},
v[N
] =
{5,
6,
7,
8, 9};
//v =
u;
ER
RO
RE
: assegnam
ento
non p
erm
esso
co
ut
<<
"In
d. v:"
<<
v <
< "
\t I
nd
. u
: "
<<
u <
< e
nd
l;
if (
v =
= u
) //
Att
enzio
ne c
onfr
onta
gli
indiriz
zi
co
ut
<<
"A
rra
y u
gu
ali
" <
< e
nd
l;els
e co
ut
<<
"A
rra
y d
ivers
i "
<<
en
dl;
if (
v >
u)
// o
pera
tori d
i confr
onto
agis
cono
sugli
indiriz
zi
co
ut
<<
"In
dir
izzo
v >
u "
<<
en
dl;
els
e co
ut
<<
"In
dir
izzo
v <
=u
" <
< e
nd
l;
// v
+ u
;opera
tori a
ritm
etici non d
efiniti
syste
m("
PA
US
E")
;re
turn
0;
} Ind
. v:0
x22ff
18
Ind
. u
: 0x22ff
38
Arr
ay d
ivers
iIn
dir
izzo
v <
=u
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
283
// A
ritm
eti
ca d
ei p
un
tato
ri
Perm
ett
e d
i calc
ola
re i
nd
iriz
zi co
n la r
eg
ola
seg
uen
te:
•se
l'esp
ressio
ne
pra
pp
rese
nta
un
valo
rein
dir
izzo
di
un
og
gett
od
iti
po
T,
allo
ral'esp
ressio
ne
(p+
1)
rap
pre
sen
tal'in
dir
izzo
di
un
og
gett
o,
sem
pre
di
tip
oT
,ch
esi
tro
va
co
nsecu
tivam
en
tein
mem
ori
a.
In g
en
era
le:
•se
iè
un
inte
ro,
allo
ral'esp
ressio
ne
(p+
i)ra
pp
resen
tal'in
dir
izzo
di
un
og
gett
o,
sem
pre
di
tip
oT
,ch
esi
tro
va
inm
em
ori
a,
do
po
ip
osiz
ion
i.
No
ta:
•S
el'esp
ressio
ne
ph
aco
me
valo
rea
dd
re
se
To
ccu
pa
nlo
cazio
ni
di
mem
ori
a,
l'esp
ressio
ne
p+
ih
aco
me
valo
read
dr+
n*i
.
Ari
tmeti
ca d
ei p
un
tato
ri:
•si
uti
lizza
qu
an
do
si
han
no
deg
lio
gg
ett
id
ell
oste
sso
tip
oin
po
siz
ion
iad
iacen
tiin
mem
ori
a(a
rray).
8.3
.3 A
rray e
pu
nta
tori
(I)
p
(p+
1)
284
8.3
.3 A
rray e
pu
nta
tori
(II
)
// A
ritm
eti
ca d
ei p
un
tato
ri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t v[4
];
int
*p =
v;
// v
<=
> &
v[0
]
*p =
1;
*(p
+ 1
) =
10;
p +
= 3
;*(
p -
1)
= 1
00;
*p =
1000;
p =
v;
co
ut
<<
"v["
<<
4 <
< "
] =
["
<<
*p
;fo
r (i
nt
i =
1;
i <
4;
i++
)co
ut
<<
'\t'
<<
*(p
+ i);
/
/ v[4
] =
[1 1
0 1
00 1
000]
co
ut
<<
']'
<<
en
dl;
co
ut
<<
p +
1 -
p <
< e
nd
l;//
1 a
ritm
etica d
ei punta
tori
co
ut
<<
in
t(p
+ 1
) -
int(
p)
<<
en
dl;
// 4
(byte
)
ch
ar
c[5
];ch
ar*
q =
c;
co
ut
<<
in
t(q
+ 1
) -
int(
q)
<<
en
dl;
// 1
(byte
)
int*
p1 =
&v[1
];in
t* p
2 =
&v[2
];co
ut
<<
p2 -
p1 <
< e
nd
l;//
1(e
lem
enti)
co
ut
<<
in
t(p
2)
-in
t(p
1)
<<
en
dl;
// 4
(byte
)syste
m("
PA
US
E")
;re
turn
0;
}
285
8.3
.3 A
rray e
pu
nta
tori
(II
I)
// In
izia
lizza a
1
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{co
nst
int
N =
5;
int
v[N
];
int
*p =
v;
wh
ile (
p <
= &
v[N
-1])
*p+
+ =
1;
// *
(p+
+)
p =
v;
co
ut
<<
"v["
<<
N <
< "
] =
["
<<
*p
;fo
r (i
nt
i =
1;
i <
N;
i++
)co
ut
<<
'\t'
<<
*(p
+ i);
// v
[5] =
[1 1
1 1
1]
co
ut
<<
']'
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} v[5
] =
[1
1
1
1
1
]P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
286
9.2
Arr
ay m
ult
idim
en
sio
nali
(I)
// L
eg
ge e
scri
ve g
li e
lem
en
ti d
i u
na m
atr
ice d
i R
rig
he
// e
C c
olo
nn
e
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{co
nst
int
R =
2;
co
nst
int
C =
3;
int
m[R
][C
];
co
ut
<<
"In
seri
sci
gli
ele
men
ti d
ell
a m
atr
ice"
<<
en
dl;
for
(in
t i =
0;
i <
R;
i++
)fo
r (i
nt
j =
0;
j <
C;
j++
)cin
>>
m[i
][j]
;
// 1
2 3
4 5
6
int*
p =
&m
[0][
0];
// a
nche:
m[0
]
for
(in
t i =
0;
i <
R;
i++
){
// m
em
orizzazio
ne p
er
righe
for
(in
t j =
0;
j <
C;
j++
)co
ut
<<
*(p
+ i*C
+ j)
<<
'\t
';co
ut
<<
en
dl;
} syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
gli
ele
men
ti d
ell
a m
atr
ice
1 2
3 4
5 6
1
2
3
4
5
6
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
1 2 3 4 5
10
4
10
8
11
2
11
6
12
0
m[0
][0
]
m[0
][1
]
m[0
][2
]
m[1
][0
]
m[1
][1
]
m[1
][2
]6
12
4
287
9.2
Arr
ay m
ult
idim
en
sio
nali
(II
)
// In
izia
lizzazio
ne d
i vett
ori
mu
ltid
imen
sio
nali
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t m
1[2
][3]
= {
1,
2,
3,
4, 5,
6};
//
anche:
int
m1[]
[3]
co
ut
<<
"M
atr
ice m
1 "
<<
en
dl;
for
(in
t i =
0;
i <
2;
i++
) {
for
(in
t j =
0;
j <
3;
j++
)co
ut
<<
m1[i
][j]
<<
'\t
';co
ut
<<
en
dl;
} int
m2[3
][3]
= {
{0,
1, 2},
{10,
11},
{100,
101,
102}}
;//
anche:
int
m2[]
[3].
N.B
.: m
2[1
][2] in
izia
lizzato
a 0
co
ut
<<
"M
atr
ice m
2 "
<<
en
dl;
for
(in
t i =
0;
i <
3;
i++
) {
for
(in
t j =
0;
j <
3;
j++
)co
ut
<<
m2[i
][j]
<<
'\t
';co
ut
<<
en
dl;
} syste
m("
PA
US
E")
;re
turn
0;
} Matr
ice m
11
2
3
4
5
6
Matr
ice m
20
1
2
10
11
0
100
1
01
1
02
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
288
9.4
Arr
ay c
om
e a
rgo
men
ti d
i fu
nzio
ni
(I)
// S
om
ma g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
(i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
so
mm
a(i
nt
v[4
])//
La d
imensio
ne n
on h
a s
ignific
ato
{//
anche:
(int
v[]
)//
X v
[] <
=>
X *
vin
t s =
0;
for
(in
t i =
0;
i <
4;
i++
)s +
= v
[i];
retu
rn s
;} in
t m
ain
()
{in
t vett
[] =
{10,
11,
12,
13};
co
ut
<<
"L
a s
om
ma d
eg
li e
lem
en
ti e
': "
;co
ut
<<
so
mm
a(v
ett
) <
< e
nd
l;//
46
syste
m("
PA
US
E")
;re
turn
0;
}11
2
… 10
11
12
10
4
10
8
11
2
11
6
12
0
v =
&ve
tt[0
]
ve
tt[0
]
ve
tt[1
]
ve
tt[2
]
ve
tt[3
]1
31
24
289
9.4
Arr
ay c
om
e a
rgo
men
ti d
i fu
nzio
ni
(II)
// S
om
ma g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
(ii
)//
(E
RR
AT
O)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
so
mm
a(i
nt
v[]
){
int
s =
0;
int
n =
siz
eo
f v /
siz
eo
f(in
t);
//
1fo
r (i
nt
i =
0;
i <
n;
i++
)s +
= v
[i];
retu
rn s
;} in
t m
ain
()
{in
t vett
[] =
{10,
11,
12,
13};
co
ut
<<
"L
a s
om
ma d
eg
li e
lem
en
ti e
': "
;co
ut
<<
so
mm
a(v
ett
) <
< e
nd
l;
// 1
0syste
m("
PA
US
E")
;re
turn
0;
} La s
om
ma d
eg
li e
lem
en
ti e
':10
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
290
9.4
Arr
ay c
om
e a
rgo
men
ti d
i fu
nzio
ni
(III
)
// S
om
ma g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
(ii
i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
so
mm
a(i
nt
v[]
, in
t n
)//
Dim
ensio
ne c
om
e a
rgom
ento
{in
t s =
0;
for
(in
t i =
0;
i <
n;
i++
)s +
= v
[i];
retu
rn s
;} in
t m
ain
()
{in
t vett
[] =
{10,
11,
12,
13};
co
ut
<<
"L
a s
om
ma d
eg
li e
lem
en
ti e
': "
,co
ut
<<
so
mm
a(v
ett
, siz
eo
f vett
/ s
izeo
f(in
t))
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} La s
om
ma d
eg
li e
lem
en
ti e
': 4
6P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
291
9.4
Arr
ay c
om
e a
rgo
men
ti d
i fu
nzio
ni
(IV
)
// In
cre
men
ta g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
(i)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
tam
pa(i
nt
v[]
, in
t n
){
if (
n >
0)
{co
ut
<<
'['
<<
v[0
];fo
r (i
nt
i =
1;
i <
n;
i++
)co
ut
<<
' ' <
< v
[i];
co
ut
<<
']'
<<
en
dl;
}} vo
id i
ncre
men
ta(i
nt
v[]
, in
t n
){
for
(in
t i =
0;
i <
n;
i++
)v[i
]++
;} in
t m
ain
()
{in
t vett
[] =
{10,
11,
12,
13};
sta
mp
a(v
ett
, 4);
incre
men
ta(v
ett
, 4);
sta
mp
a(v
ett
, 4);
syste
m("
PA
US
E")
;re
turn
0;
} [10 1
1 1
2 1
3]
[11 1
2 1
3 1
4]
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
292
9.4
Arg
om
en
ti a
rray c
osta
nti
(I)
// S
om
ma g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
(iv
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
so
mm
a(c
on
st
int
v[]
, in
t n
)//
gli
ele
menti d
ell’
arr
ay
{//
non p
ossono e
ssere
int
s =
0;
//m
odific
ati
for
(in
t i =
0;
i <
n;
i++
)s +
= v
[i];
retu
rn s
;} in
t m
ain
()
{in
t vett
[] =
{10,
11,
12,
13};
co
ut
<<
"L
a s
om
ma d
eg
li e
lem
en
ti e
': "
,co
ut
<<
so
mm
a(v
ett
, siz
eo
f vett
/ s
izeo
f(in
t))
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} La s
om
ma d
eg
li e
lem
en
ti e
': 4
6P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
293
9.4
Arg
om
en
ti a
rray c
osta
nti
(II
)
// In
cre
men
ta g
li e
lem
en
ti d
i u
n d
ato
vett
ore
di in
teri
(ii
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id s
tam
pa(c
on
st
int
v[]
, in
t n
)//
OK
!!!
{if
(n
> 0
){
co
ut
<<
"["
<<
v[0
];fo
r (i
nt
i =
1;
i <
n;
i++
)co
ut
<<
' ' <
< v
[i];
co
ut
<<
']'
<<
en
dl;
}} vo
id i
ncre
men
ta(c
on
st
int
v[]
, in
t n
)//
ER
RO
RE
{fo
r (i
nt
i =
0;
i <
n;
i++
)v[i
]++
;} in
t m
ain
()
{in
t vett
[] =
{10,
11,
12,
13};
sta
mp
a(v
ett
, 4);
incre
men
ta(v
ett
, 4);
sta
mp
a(v
ett
, 4);
syste
m("
PA
US
E")
;re
turn
0;
}
294
9.5
.3 A
rgo
men
ti a
rray c
osta
nti
(II
I)
// T
rova i
l m
assim
o v
alo
re i
n u
n d
ato
vett
ore
di in
teri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id l
eg
gi(
int
v[]
, in
t n
){
for
(in
t i =
0;
i <
n;
i++
) {
co
ut
<<
'['
<<
i <
< "
] =
";
cin
>>
v[i
];
}
} int
massim
o(c
on
st
int
v[]
, in
t n
){
int
m =
v[0
];fo
r (i
nt
i =
1;
i <
n;
i++
) m
= m
>=
v[i
] ?
m :
v[i
];re
turn
m;
} int
main
()
{co
nst
int
MA
X =
10;
int
v[M
AX
], n
Ele
m;
co
ut
<<
"Q
uan
ti e
lem
en
ti?
";
cin
>>
nE
lem
;le
gg
i(v,
nE
lem
);co
ut
<<
"M
assim
o:
" <
< m
assim
o(v
, n
Ele
m)
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Qu
an
ti e
lem
en
ti?
2[0
] =
13
[1]
= 4
5M
assim
o:
45
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
295
9.5
.3 A
rray m
ult
idim
en
sio
nali
(I)
// L
a d
ich
iara
zio
ne d
i u
n v
ett
ore
a p
iu’ d
imen
sio
ni co
me
// a
rgo
men
to f
orm
ale
deve s
pecif
icare
la g
ran
dezza d
i //
tu
tte l
e d
imen
sio
ni tr
an
ne l
a p
rim
a.
// S
e M
e’ il
nu
mero
dell
e d
imen
sio
ni,
l’a
rgo
men
to
// f
orm
ale
e’
un
pu
nta
tore
ad
arr
ay M
-1 d
imen
sio
nali
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int
C =
3;
vo
id i
niz
iali
zza(i
nt
m[]
[C],
in
t r)
{fo
r (i
nt
i =
0;
i <
r;
i++
)fo
r (i
nt
j =
0;
j <
C;
j++
)m
[i][
j] =
i +
j;
} vo
id d
im(c
on
st
int
m[]
[C])
{co
ut
<<
"D
imen
sio
ne (
ER
RA
TA
) ";
co
ut
<<
siz
eo
f m
/ s
izeo
f(in
t) <
< e
nd
l;} //
vo
id r
iem
piE
rrata
(in
t m
[][]
);E
RR
OR
E! 296
9.5
.3 A
rray m
ult
idim
en
sio
nali
(II
)
vo
id s
tam
pa(c
on
st
int
m[]
[C],
in
t r)
{
for
(in
t i =
0;
i <
r;
i++
) {
for
(in
t j =
0;
j <
C;
j++
) co
ut
<<
m[i
][j]
<<
'\t
';co
ut
<<
en
dl;
}} in
t m
ain
()
{in
t m
at1
[2][
C],
mat2
[2][
5];
iniz
iali
zza(m
at1
, 2);
dim
(mat1
);sta
mp
a(m
at1
, 2);
//in
izia
lizza(m
at2
,2);
E
RR
OR
E:
tipo a
rg.
div
ers
osyste
m("
PA
US
E")
;re
turn
0;
} Dim
en
sio
ne (
ER
RA
TA
) 1
0
1
2
1
2
3
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
297
9.5
.3 A
rray m
ult
idim
en
sio
nali
(II
I)
// T
rasm
issio
ne m
ed
ian
te p
un
tato
ri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id i
niz
iali
zza(i
nt*
m,
int
r, in
t c)
{fo
r (i
nt
i =
0;
i <
r;
i++
)fo
r (i
nt
j =
0;
j <
c;
j++
)*(
m +
i *
c +
j)
= i
+ j;
} vo
id s
tam
pa(c
on
st
int*
m,
int
r, in
t c)
{fo
r (i
nt
i =
0;
i <
r;
i++
) {
for
(in
t j =
0;
j <
c;
j++
)co
ut
<<
*(m
+ i *
c +
j)
<<
'\t
';co
ut
<<
en
dl;
}} in
t m
ain
()
{in
t m
at1
[2][
3],
mat2
[2][
6];
//in
izia
lizza(m
at1
, 2,
3);
ER
RO
RE
passin
g 'in
t (*
)[3]'
as
//
a
rgum
ent
1 o
f 'in
izia
lizza(int
*, int,
int)
'in
izia
lizza(&
mat1
[0][
0],
2,
3);
sta
mp
a((
int*
) m
at1
, 2, 3);
iniz
iali
zza((
int*
) m
at2
, 2,
6);
sta
mp
a(&
mat2
[0][
0],
2,
6);
syste
m("
PA
US
E")
;re
turn
0;
}
298
9.3
Str
ing
he (
I)
Str
ing
a:
•S
eq
uen
za d
i cara
tteri
.
In C
++
no
n e
sis
te i
l ti
po
str
ing
a.
Vari
ab
ili str
ing
a:
•arr
ay d
i cara
tteri
, ch
e m
em
ori
zzan
o s
trin
gh
e (
un
cara
ttere
per
ele
men
to)
e i
l cara
ttere
nu
llo
('\0')
fi
nale
.
// L
un
gh
ezza e
d in
izia
lizzazio
ne d
i str
ing
he
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>#in
clu
de <
cstr
ing
>u
sin
g n
am
esp
ace s
td;
int
main
()
{ch
ar
c1[]
= "
C+
+";
// iniz
ializ
zazio
ne
co
ut
<<
siz
eo
f c1 <
< e
nd
l;//
4co
ut
<<
str
len
(c1)
<<
en
dl;
// 3
ch
ar
c2[]
= {
'C', '+
', '+
'};
// M
anca il '\0
'!co
ut
<<
siz
eo
f c2 <
< e
nd
l;//
3
ch
ar
c3[]
= {
'C', '+
', '+
', '\0
'};
// O
Kco
ut
<<
siz
eo
f c3 <
< e
nd
l;//
4
ch
ar
c4[4
];//
c4 =
"C
++
";E
RR
OR
E!
Assegnam
ento
tra
arr
ay
syste
m("
PA
US
E")
;re
turn
0;
} 4
3
3
4
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
299
9.3
Str
ing
he (
II)
Op
era
tori
di in
gre
sso
e d
i u
scit
a:
•accett
an
o u
na v
ari
ab
ile s
trin
ga c
om
e a
rgo
men
to.
Op
era
tore
di in
gre
sso
:
•le
gg
e c
ara
tteri
dall
o s
tream
di in
gre
sso
(salt
an
do
even
tuali
cara
tteri
bia
nch
i d
i te
sta
) e l
i m
em
ori
zza i
n
seq
uen
za,
fin
o a
ch
e i
nco
ntr
a u
n c
ara
ttere
sp
azio
: u
n t
ale
cara
ttere
(ch
e n
on
vie
ne l
ett
o)
cau
sa i
l te
rmin
e d
ell
’op
era
zio
ne e
la m
em
ori
zzazio
ne n
ell
a
vari
ab
ile s
trin
ga d
el cara
ttere
nu
llo
do
po
l'u
ltim
o
cara
ttere
lett
o;
•l'arr
ay c
he r
iceve i
cara
tteri
deve e
ssere
d
imen
sio
nato
ad
eg
uata
men
te.
Op
era
tore
di u
scit
a:
•scri
ve i
cara
tteri
dell
a s
trin
ga (
esclu
so
il cara
ttere
n
ull
o f
inale
) su
llo
str
eam
di u
scit
a.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{ch
ar
str
ing
a[1
2];
//
al piu
` 11 c
ara
tteri o
ltre
a '\
0'
co
ut
<<
"?
";
cin
>>
str
ing
a;
// E
sem
pio
: In
form
atica e
Calc
ola
tori
// A
ttenzio
ne n
essun c
ontr
ollo
sulla
dim
ensio
ne
co
ut
<<
str
ing
a <
< e
nd
l;//
Esem
pio
: In
form
atica
syste
m("
PA
US
E")
;re
turn
0;
} ? In
form
ati
ca e
Calc
ola
tori
Info
rmati
ca
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
300
9.3
Str
ing
he (
III)
// S
trin
gh
e e
pu
nta
tori
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{ch
ar
s1[]
= "
Un
ivers
ita' ";
ch
ar
s2[]
= {
'd','i',' ','\0'}
;ch
ar
*s3 =
"P
isa";
ch
ar
*s4 =
"T
oscan
a";
co
ut
<<
s1 <
< s
2 <
< s
3 <
< s
4 <
< e
nd
l;//
punta
tori a
cara
tteri inte
rpre
tati c
om
e s
trin
ghe
s4 =
s3;
co
ut
<<
s3 <
< e
nd
l;//
Pis
aco
ut
<<
s4 <
< e
nd
l;//
Pis
a
ch
ar
*co
nst
s5 =
"o
gg
i";
ch
ar
*co
nst
s6 =
"d
om
an
i";
//s6 =
s5;
ER
RO
RE
!
co
ut
<<
(vo
id*)
s3 <
< e
nd
l;//
Per
sta
mpare
il punta
tore
syste
m("
PA
US
E")
;re
turn
0;
} Un
ivers
ita' d
i P
isa T
oscan
aP
isa
Pis
a0x40121d
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
301
9.3
Str
ing
he (
IV)
// C
on
ta l
e o
cco
rren
ze d
i cia
scu
na l
ett
era
in
un
a s
trin
ga
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{co
nst
int
LE
TT
ER
E =
26;
ch
ar
str
[100];
int
co
nta
[LE
TT
ER
E];
for
(in
t i =
0;
i <
LE
TT
ER
E;
i++
)co
nta
[i]
= 0
;co
ut
<<
"In
seri
sci
un
a s
trin
ga:
";cin
>>
str
;
for
(in
t i =
0;
str
[i]
!= '\0
'; i+
+)
if (
str
[i]
>=
'a' &
& s
tr[i
] <
= 'z')
+
+co
nta
[str
[i]
-'a
'];
els
e i
f (s
tr[i
] >
= 'A
' &
& s
tr[i
] <
= 'Z
')+
+co
nta
[str
[i]
-'A
'];
for
(in
t i =
0;
i <
LE
TT
ER
E;
i++
)co
ut
<<
ch
ar(
'a' +
i)
<<
":
" <
< c
on
ta[i
] <
< '\t
';co
ut
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
a s
trin
ga:
pro
va
a:
1
b
: 0
c:
0
d
: 0
e:
0
f: 0
g
: 0
h:
0
i:
0
j:
0k:
0
l:
0
m
: 0
n
: 0
o:
1
p
: 1
q
: 0
r: 1
s:
0
t: 0
u:
0
v:
1
w
: 0
x:
0
y:
0
z:
0P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
302
9.6
Fu
nzio
ni
di
lib
reri
a s
ull
e s
trin
gh
e (
I)
Dic
hia
razio
nic
on
ten
ute
ne
lfi
le<
cs
trin
g>
ch
ar
*str
cp
y(c
har
*dest,
co
nst
ch
ar
*so
rg);
Copia
sorg
indest,
inclu
so
ilcara
ttere
nullo
(term
inato
re
distr
inga),
ere
stitu
isce
dest;
AT
TE
NZ
ION
E:
no
nvie
ne
eff
ett
uato
nessu
nco
ntr
ollo
per
ve
rifi
care
se
lad
imen
sio
ne
di
dest
èsu
ffic
ien
tep
er
co
nte
nere
so
rg.
ch
ar
*str
cat(
ch
ar
*dest,
co
nst
ch
ar
*so
rg);
Concate
na
sorg
al
term
ine
di
dest
ere
stitu
isce
dest
(il
cara
ttere
nu
llocom
pare
solo
alla
fin
ed
ella
str
ing
a
risultante
);
AT
TE
NZ
ION
E:
no
nvie
ne
eff
ett
uato
nessu
nco
ntr
ollo
per
ve
rifi
care
se
lad
imen
sio
ne
di
dest
èsu
ffic
ien
tep
er
co
nte
nere
laco
ncate
nazio
ne
diso
rge
dest.
AT
TE
NZ
ION
E:
sia
so
rgch
ed
est
de
vo
no
essere
dell
e
str
ing
he.
303
9.6
Fu
nzio
ni
di
lib
reri
a s
ull
e s
trin
gh
e (
II)
int
str
len
(co
nst
ch
ar
*str
ing
);
Restitu
isce
lalu
ng
hezza
di
str
ing;
ilvalo
rere
stitu
ito
è
infe
riore
di
1al
num
ero
di
cara
tteri
eff
ett
ivi,
perc
hé
il
cara
ttere
nullo
che
term
ina
str
ing
non
vie
ne
conta
to.
int
str
cm
p(c
on
st
ch
ar
*s1,
co
nst
ch
ar
*s2
);
Confr
onta
s1
con
s2:
–re
stitu
isce
un
valo
ren
egativo
se
s1
è
alfabeticam
ente
min
ore
dis2;
–un
valo
renullo
se
ledue
str
inghe
sono
uguali,
–un
valo
rep
ositiv
ose
s1
èalfab
eticam
ente
maggio
red
is2;
(la
fun
zio
ne
dis
tin
gue
tra
maiu
scole
em
inuscole
).
ch
ar
*str
ch
r(co
nst
ch
ar
*str
ing
,ch
ar
c);
Restitu
isce
ilpunta
tore
alla
prim
aoccorr
enza
di
cin
str
ing
oppure
0se
cnon
sitr
ova
instr
ing.
304
9.6
Fu
nzio
ni
di
lib
reri
a s
ull
e s
trin
gh
e (
III)
//E
SE
MP
IO
#in
clu
de
<cstd
lib
>
#in
clu
de
<io
str
eam
>
#in
clu
de
<cstr
ing
>
usin
gn
am
esp
ace
std
;
int
main
()
{
co
nst
int
N=
30;
ch
ar
s1[]
="C
ors
o";
ch
ar
s2[]
="d
i";
ch
ar
s3[]
="I
nfo
rmati
ca\n
";
ch
ar
s4[N
]=
"Co
rso
";
co
ut
<<
"Dim
en
sio
ne
deg
liarr
ay
s1
es4
"<
<en
dl;
co
ut
<<
siz
eo
fs1
<<
""
<<
siz
eo
fs4
<<
en
dl;
co
ut
<<
"Dim
en
sio
ne
dell
estr
ing
he
s1
es4
"<
<en
dl;
co
ut
<<
str
len
(s1)
<<
""
<<
str
len
(s4)
<<
en
dl;
if(!
str
cm
p(s
1,s
4))
co
ut
<<
"Str
ing
he
ug
uali
"<
<en
dl;
els
eco
ut
<<
"Str
ing
he
div
ers
e"
<<
en
dl;
if(!
str
cm
p(s
1,s
2))
co
ut
<<
"Str
ing
he
ug
uali
"<
<en
dl;
els
eco
ut
<<
"Str
ing
he
div
ers
e"
<<
en
dl<
<en
dl;
ch
ar
s5[N
];
str
cp
y(s
5,s
1);
str
cat(
s5,s
2);
str
cat(
s5,s
3);
305
9.6
Fu
nzio
ni
di
lib
reri
a s
ull
e s
trin
gh
e (
IV)
co
ut
<<
"Co
ncate
nazio
ne
dis1,
s2
es3
"<
<en
dl;
co
ut
<<
s5
<<
en
dl;
ch
ar
*s=
str
ch
r(s5,'I');
co
ut
<<
"Str
ing
ad
all
ap
rim
ais
tan
za
diI"
<<
en
dl;
co
ut
<<
s<
<en
dl;
syste
m("
PA
US
E")
;
retu
rn0;
} Dim
en
sio
ne
deg
liarr
ay
s1
es4
730
Dim
en
sio
ne
dell
estr
ing
he
s1
es4
66
Str
ing
he
ug
uali
Str
ing
he
div
ers
e
Co
ncate
nazio
ne
dis1,
s2
es3
Co
rso
diIn
form
ati
ca
Str
ing
ad
all
ap
rim
ais
tan
za
diI
Info
rmati
ca
Pre
mere
un
tasto
per
co
nti
nu
are
..
.
306
9.7
Ord
inam
en
to d
ei
vett
ori
Ord
ina
me
nto
pe
r s
ele
zio
ne
(s
ele
cti
on
-so
rt)
•S
i cerc
a l
’ele
men
to p
iù p
icco
lo e
si
scam
bia
co
n
l’ele
men
to in
po
siz
ion
e i
=0
53
46
21
13
46
25
•S
icerc
al’
ele
men
top
iùp
icco
lotr
ai
rim
an
en
tiN
-ie
si
scam
bia
co
nl’
ele
men
toin
po
siz
ion
ei,
per
i=
1..
N-1
12
46
35
13
46
25
12
36
45
12
46
35
12
34
65
12
36
45
12
34
56
12
34
65
307
9.7
Ord
inam
en
to d
ei
vett
ori
(sele
cti
on
-so
rt)
Ord
ina
me
nto
pe
r s
ele
zio
ne
(s
ele
cti
on
-so
rt)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
typ
ed
ef
int
T;
// intr
oduce identificato
ri p
er
indiv
iduare
tip
i
vo
id s
tam
pa(c
on
st
Tv[]
, in
t n
){
if (
n !
= 0
){
co
ut
<<
"["
<<
v[0
];fo
r (i
nt
i =
1;
i <
n;
i++
)co
ut
<<
' ' <
< v
[i];
co
ut
<<
']'
<<
en
dl;
}} vo
id s
cam
bia
(T v
ett
ore
[],
int
x, in
t y)
{
T lavo
ro =
vett
ore
[x];
vett
ore
[x]
= v
ett
ore
[y];
vett
ore
[y]
= lavo
ro;
}
308
9.7
Ord
inam
en
to d
ei
vett
ori
(sele
cti
on
-so
rt)
Ord
ina
me
nto
pe
r s
ele
zio
ne
(s
ele
cti
on
-so
rt)
vo
id s
ele
cti
on
So
rt(T
vett
ore
[],
int
n)
{ in
tm
in;
for
(in
t i =
0 ;
i <
n-1
; i+
+)
{ m
in=
i;fo
r (i
nt
j =
i+
1;
j <
n;
j++
)if
(vett
ore
[j]
< v
ett
ore
[min
]) m
in=
j;scam
bia
(vett
ore
,i,m
in);
}} in
t m
ain
(){
T v
[] =
{2
, 26,
8,
2,
23};
sele
cti
on
So
rt(v
,5);
sta
mp
a(v
,5);
syste
m("
PA
US
E")
;re
turn
0;
} [2 2
8 2
3 2
6]
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
•C
om
ple
ssit
à d
ell
’alg
ori
tmo
dell
’ord
ine d
i n
2, d
ove n
è
il n
um
ero
di ele
men
ti n
el vett
ore
.
309
9.7
Ord
inam
en
to d
ei
vett
ori
(b
ub
ble
-so
rt)
Ord
ina
me
nto
bu
bb
le-s
ort
•S
i sco
rre l
’arr
ay n
-1 v
olt
e,
do
ve n
è i
l n
um
ero
di
ele
men
ti n
ell
’arr
ay,
da d
estr
a a
sin
istr
a,
scam
bia
nd
o
du
e e
lem
en
ti c
on
tig
ui se n
on
so
no
nell
’ord
ine
giu
sto
.
53
46
21
53
46
12
53
41
62
51
34
62
53
14
62
15
34
62
•P
rim
a v
olt
a
15
34
62
15
34
26
15
32
46
12
53
46
15
23
46
•S
eco
nd
a v
olt
a
N.B
.: i
pri
mi d
ue e
lem
en
ti r
isu
ltan
o o
rdin
ati
310
9.7
Ord
inam
en
to d
ei
vett
ori
(b
ub
ble
-so
rt)
Ord
ina
me
nto
bu
bb
le-s
ort
vo
id b
ub
ble
(T v
ett
ore
[],
int
n)
{ fo
r (i
nt
i =
0 ;
i <
n-1
; i+
+)
for
(in
t j =
n-1
; j >
i;
j--)
if(v
ett
ore
[j]
< v
ett
ore
[j-1
])scam
bia
(vett
ore
,j,
j-1);
} •C
om
ple
ssit
à d
ell
’alg
ori
tmo
dell
’ord
ine d
i n
2, d
ove n
è
il n
um
ero
di ele
men
ti n
el vett
ore
.
12
53
46
12
35
46
•Terz
a v
olt
a
12
35
46
12
34
56
•Q
uart
a v
olt
a
•Q
uin
ta v
olt
a•
Nessu
n c
am
bia
men
to
N.B
.: i
pri
mi tr
e e
lem
en
ti r
isu
ltan
o o
rdin
ati
N.B
.: i
pri
mi q
uatt
ro e
lem
en
ti r
isu
ltan
o o
rdin
ati
311
9.7
Ord
inam
en
to d
ei
vett
ori
(b
ub
ble
-so
rt)
Ord
ina
me
nto
bu
bb
le-s
ort
ott
imiz
za
to
Su
pp
on
iam
o c
he i
l vett
ore
sia
•Il
vett
ore
do
po
il p
rim
o p
asso
ris
ult
a o
rdin
ato
.
•In
uti
le e
seg
uir
e t
utt
i i p
assi.
23
45
61
23
45
16
23
41
56
21
34
56
23
14
56
12
34
56
•P
rim
a v
olt
a
23
45
61
312
9.7
Ord
inam
en
to d
ei
vett
ori
(b
ub
ble
-so
rt)
Ord
ina
me
nto
bu
bb
le-s
ort
ott
imiz
za
to
vo
id b
ub
ble
(T v
ett
ore
[],
int
n)
{ b
oo
l o
rdin
ato
= f
als
e;
for
(in
t i =
0 ;
i <
n-1
&&
!o
rdin
ato
; i+
+)
{o
rdin
ato
=tr
ue;
for
(in
t j =
n-1
; j >
= i+
1;
j--)
if(v
ett
ore
[j]
< v
ett
ore
[j-1
]){
scam
bia
(vett
ore
,j,
j-1);
ord
inato
= f
als
e;
}}
} int
main
(){
T v
[] =
{2
, 1,
3,
4, 5};
bu
bb
le(v
,5);
sta
mp
a(v
,5);
syste
m("
PA
US
E")
;re
turn
0;
} [1 2
3 4
5]
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
•L
’alg
ori
tmo
ott
imiz
zato
eseg
ue d
ue s
ole
ite
razio
ni
invece d
ell
e q
uatt
rod
ell
’alg
ori
tmo
no
n o
ttim
izzato 313
9.7
Ric
erc
a lin
eare
(I)
Pro
ble
ma
•cerc
are
un
ele
men
to i
n u
n a
rray t
ra l
’ele
men
to in
p
osiz
ion
e in
fe e
qu
ell
o in
po
siz
ion
e s
up
e.
Po
ss
ibil
e s
olu
zio
ne
•S
co
rrere
il vett
ore
in
seq
uen
za a
part
ire d
all
’ele
men
to
in p
osiz
ion
e in
fe f
ino
all
’ele
men
to c
erc
ato
op
pu
re
all
’ele
men
to in
po
siz
ion
e s
up
e.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
typ
ed
ef
int
T;
bo
ol ri
cerc
a(T
vett
[],
int
infe
, in
t su
pe,
T k
, in
t&
po
s)
{b
oo
l tr
ovato
= f
als
e;
wh
ile (
(!tr
ovato
) &
& (
infe
<=
su
pe))
{if
(vett
[in
fe]
==
k)
{p
os =
in
fe;
tro
vato
= t
rue;
} infe
++
;} re
turn
tro
vato
;}
53
46
21
infe
su
pe
53
46
21
infe
su
pe
314
9.7
Ric
erc
a lin
eare
(II
)
int
main
(){
T v
[] =
{1
, 2,
3,
4, 5};
int
i;
// indiv
idua la p
osiz
ione
if (
!ric
erc
a(v
, 0, 4,
5,
i))
cerr
<<
"E
lem
en
to c
erc
ato
no
n p
resen
te "
<<
en
dl;
els
e co
ut
<<
"P
osiz
ion
e e
lem
en
to c
erc
ato
" <
< i <
< e
nd
l;
if (
!ric
erc
a(v
, 0, 4,
10,
i))
cerr
<<
"E
lem
en
to c
erc
ato
no
n p
resen
te "
<<
en
dl;
els
e co
ut
<<
"P
osiz
ion
e e
lem
en
to c
erc
ato
" <
< i <
< e
nd
l;
syste
m("
PA
US
E")
;re
turn
0;
} Po
siz
ion
e e
lem
en
to c
erc
ato
4E
lem
en
to c
erc
ato
no
n p
resen
teP
rem
ere
un
tasto
per
co
nti
nu
are
. . .
N.B
: P
er
la r
icerc
a d
ell
’ele
men
to 5
è n
ecessari
o e
sam
inare
5 e
lem
en
ti.
315
9.7
Ric
erc
a b
inari
a(I
)
PR
ER
EQ
UIS
ITO
: V
ett
ori
ord
ina
ti!!
!!
Ric
erc
a b
inari
a (
vett
ori
ord
inati
in
ord
ine c
rescen
te)
Idea:
•S
i co
nfr
on
ta l
’ele
men
to c
erc
ato
co
n l’e
lem
en
to i
n
po
siz
ion
e c
en
trale
; se s
on
o u
gu
ali
la r
icerc
a t
erm
ina;
•alt
rim
en
ti:
–se l
’ele
men
to c
erc
ato
è m
ino
re d
ell
’ele
men
to in
p
osiz
ion
e c
en
trale
la r
icerc
a p
roseg
ue n
ell
a p
rim
a
metà
del vett
ore
; alt
rim
en
ti p
roseg
ue n
ell
a
seco
nd
a m
età
del vett
ore
.
bo
ol ri
cb
in(T
ord
Vett
[], in
t in
fe, in
t su
pe,
T k
, in
t&
po
s)
{w
hil
e (
infe
<=
su
pe)
{in
t m
ed
io =
(in
fe +
su
pe)
/ 2;
//calc
ola
l'in
dic
e c
entr
ale
if (
k >
ord
Vett
[med
io])
in
fe =
med
io +
1;
// r
icerc
a n
ella
meta
' superiore
els
e if (
k <
ord
Vett
[med
io])
su
pe =
med
io -
1;
//
ric
erc
a n
ella
meta
' superiore
els
e{
po
s=
med
io;
//
tro
vato
retu
rn t
rue;
}}
retu
rn f
als
e;
} N.B
: P
er
la r
icerc
a d
ell
’ele
men
to 5
, esem
pio
pre
ced
en
te,
è
necessari
o e
sam
inare
3 e
lem
en
ti s
ola
men
te.
316
9.7
Ric
erc
a b
inari
a(I
I)
Esem
pio
: ri
cerc
a i
n u
n v
ett
ore
di cara
tteri
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
typ
ed
ef
ch
ar
T;
bo
ol ri
cb
in(T
ord
Vett
[], in
t in
fe, in
t su
pe,
T k
, in
t&
po
s)
{w
hil
e (
infe
<=
su
pe)
{in
t m
ed
io =
(in
fe +
su
pe)
/ 2;
//calc
ola
l'in
dic
e c
entr
ale
if (
k >
ord
Vett
[med
io])
in
fe =
med
io +
1;
// r
icerc
a n
ella
meta
' superiore
els
e if (
k <
ord
Vett
[med
io])
su
pe =
med
io -
1;
//
ric
erc
a n
ella
meta
' superiore
els
e{
po
s=
med
io;
//
tro
vato
retu
rn t
rue;
}}
retu
rn f
als
e;
} int
main
(){
T v
[] =
{'
a', 'b
', 'c', 'r'
, 's
', 't'
};in
t i;
// indiv
idua la p
osiz
ione
if (
!ric
bin
(v,
0,
5,
'c', i))
cerr
<<
"E
lem
en
to c
erc
ato
no
n p
resen
te "
<<
en
dl;
els
e co
ut
<<
"P
osiz
ion
e e
lem
en
to c
erc
ato
" <
< i <
< e
nd
l;syste
m("
PA
US
E")
;//
2re
turn
0;
}
317
9.7
Esem
pio
(I)
Esem
pio
: o
rdin
am
en
to e
ric
erc
a i
n u
n v
ett
ore
di str
ing
he
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int
C=
20;
typ
ed
ef
ch
ar
T[C
];
vo
id s
cam
bia
(T v
ett
ore
[],
int
x, in
t y)
{
T lavo
ro;
str
cp
y(l
avo
ro,v
ett
ore
[x])
;str
cp
y(v
ett
ore
[x],
vett
ore
[y])
;str
cp
y(v
ett
ore
[y],
lavo
ro);
} vo
id s
tam
pa(c
on
st
T v
ett
ore
[],
int
n)
{if
(n
!=
0)
{co
ut
<<
'['
<<
vett
ore
[0];
for
(in
t i =
1;
i <
n;
i++
)co
ut
<<
' ' <
< v
ett
ore
[i];
co
ut
<<
']'
<<
en
dl;
}}
318
9.7
Esem
pio
(II)
vo
id b
ub
ble
(T v
ett
ore
[],
int
n)
{ b
oo
l o
rdin
ato
= f
als
e;
for
(in
t i =
0 ;
i <
n-1
&&
!o
rdin
ato
; i+
+)
{o
rdin
ato
= t
rue;
for
(in
t j =
n-1
; j >
= i+
1;
j--)
if(s
trcm
p(v
ett
ore
[j],
vett
ore
[j-1
])<
0)
{scam
bia
(vett
ore
, j,
j-1
);o
rdin
ato
= f
als
e;
}}
} bo
ol ri
cb
in(T
ord
Vett
[], in
t in
fe, in
t su
pe,
T k
, in
t &
po
s)
{w
hil
e (
infe
<=
su
pe)
{in
t m
ed
io =
(in
fe +
su
pe)
/ 2;
if (
str
cm
p(k
,ord
Vett
[med
io])
>0)
infe
= m
ed
io +
1;
els
e if (
str
cm
p(k
,ord
Vett
[med
io])
<0)
su
pe =
med
io -
1;
els
e{
po
s =
med
io;
re
turn
tru
e;
}}
retu
rn f
als
e;
}
319
9.7
Esem
pio
(III
)
int
main
()
{ T
s[4
];fo
r (i
nt
i=0;
i<4;
i++
){
co
ut
<<
'?
' <
< e
nd
l; cin
>>
s[i
]; }
sta
mp
a(s
,4);
bu
bb
le(s
,4);
sta
mp
a(s
,4);
int
i; T
m;
co
ut
<<
"R
icerc
a ?
" <
< e
nd
l;cin
>>
m;
if (
ricb
in(s
,0,4
,m,i
))
co
ut
<<
"T
rovato
in
po
siz
ion
e "
<<
i <
< e
nd
l;els
e c
ou
t <
< "
No
n t
rovato
" <
< e
nd
l;co
ut
<<
"R
icerc
a ?
" <
< e
nd
l;cin
>>
m;
if (
ricb
in(s
,0,4
,m,i
))
co
ut
<<
"T
rovato
in
po
siz
ion
e "
<<
i <
< e
nd
l;els
e c
ou
t <
< "
No
n t
rovato
" <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} ? mu
cca
? an
atr
a? zeb
ra? cavall
o[m
ucca a
natr
a z
eb
ra c
avall
o]
[an
atr
a c
avall
o m
ucca z
eb
ra]
Ric
erc
a ?
cavall
oT
rovato
in
po
siz
ion
e 1
Ric
erc
a ?
bu
eN
on
tro
vato
Pre
ss a
ny k
ey t
o c
on
tin
ue . . ..
320
10.1
Str
utt
ure
(I)
Str
utt
ura
:
•n
-up
la o
rdin
ata
di ele
men
ti,
dett
i m
em
bri
(o
cam
pi)
, cia
scu
no
dei q
uali
ha u
no
sp
ecif
ico
tip
o e
d u
no
sp
ecif
ico
no
me, e c
on
tien
e u
na d
ata
in
form
azio
ne;
•ra
pp
resen
ta u
na c
oll
ezio
ne d
i in
form
azio
ni su
un
d
ato
og
gett
o.
basic
-str
uctu
re-t
yp
e-d
ecla
rati
on
str
uctu
re-t
yp
esp
ecif
ier
;
str
uctu
re-t
yp
esp
ecif
ier
str
uct
iden
tifi
er|
op
t{
str
uctu
re-m
em
ber-
secti
on
-seq
}
Sezio
ne:
•m
em
bri
di u
n c
ert
o t
ipo
, cia
scu
no
desti
nato
a
co
nte
nere
un
dato
(cam
pi
dati
);
•fo
rma s
inta
ttic
am
en
te e
qu
ivale
nte
all
a d
efi
niz
ion
e d
i o
gg
ett
i n
on
co
sta
nti
e n
on
in
izia
lizzati
.
Es
em
pio
:
str
uct
pers
on
a{
ch
ar
no
me[2
0];
ch
ar
co
gn
om
e[2
0];
int
g_n
ascit
a,
m_n
ascit
a,
a_n
ascit
a;
};
321
10.1
Str
utt
ure
(II
)
// P
un
to
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
str
uct
pu
nto
{d
ou
ble
x;
do
ub
le y
;}; in
t m
ain
()
{p
un
to r
, s;
r.x =
3;
// s
ele
ttore
di m
em
bro
r.y =
10.5
;
s.x
= r
.x;
s.y
= r
.y +
10.0
;
co
ut
<<
'<
' <
< r
.x <
< "
, "
<<
r.y
<<
">
\n";
co
ut
<<
'<
' <
< r
.x <
< "
, "
<<
s.y
<<
">
\n";
pu
nto
*p
= &
r;co
ut
<<
'<
' <
< p
->x <
< "
, ";
//
(*p
).x
co
ut
<<
p->
y <
< "
>\n
";//
(*p
).y
pu
nto
t =
{1.0
, 2.0
};//
iniz
ializ
zazio
ne
co
ut
<<
'<
' <
< t
.x <
< "
, "
<<
t.y
<<
">
\n";
syste
m("
PA
US
E")
;re
turn
0;
} <3, 10.5
><
3, 20.5
><
3, 10.5
><
1, 2>
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
322
10.1
Str
utt
ure
(II
I)
str
uct
pu
nto
{
/* .
.. *
/p
un
to s
;//
ER
RO
RE
!}; //
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
////
Str
utt
ura
co
nte
nen
te u
n r
iferi
men
to a
se s
tessa
str
uct
pu
nto
{/*
...
*/
pu
nto
* p
;//
OK
}; //~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~~
~//
// S
tru
ttu
re c
on
rif
eri
men
ti i
ntr
eccia
ti.
// D
ich
iara
zio
ni in
co
mp
lete
str
uct
Part
e;
str
uct
Co
mp
on
en
te {
/* .
.. *
/P
art
e*
p;
};`
str
uct
Part
e {
/* .
.. *
/C
om
po
nen
te*
c;
};
323
10.1
Str
utt
ure
(IV
)
// A
rra
y d
i str
utt
ure
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
str
uct
pu
nto
{d
ou
ble
x;
do
ub
le y
;};
co
nst
int
MA
X =
30;
int
main
()
{str
uct
po
lig
on
o
{in
t q
uan
ti;
// n
um
ero
eff
ett
ivo d
i punti
pu
nto
p[M
AX
];}
p;
p.q
uan
ti =
3;
p.p
[0].
x =
3.0
;p
.p[0
].y =
1.0
;
p.p
[1].
x =
4.0
;p
.p[1
].y =
10.0
;
p.p
[2].
x =
3.0
;p
.p[2
].y =
100.0
;
co
ut
<<
"S
tam
pa d
el
po
lig
on
o "
<<
en
dl;
for
(in
t i=
0;
i <
p.q
uan
ti;
i++
)co
ut
<<
'<
' <
< p
.p[i
].x <
< "
, "
<<
p.p
[i].
y <
< "
>\n
";
syste
m("
PA
US
E")
;re
turn
0;
} Sta
mp
a d
el
po
lig
on
o<
3, 1>
<4, 10>
<3, 100>
Pre
mere
un
tasto
per
co
nti
nu
are
. .
324
10.1
.1 O
pera
zio
ni
su
lle s
tru
ttu
re (
I)
// A
sseg
nam
en
to t
ra s
tru
ttu
re
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
str
uct
pu
nto
{d
ou
ble
x;
do
ub
le y
;}; in
t m
ain
()
{p
un
to r
1 =
{3.0
, 10.0
};//
iniz
ializ
zazio
ne
pu
nto
r2;
r2 =
r1;
// c
opia
mem
bro
a m
em
bro
co
ut
<<
"r1
= <
" <
< r
1.x
<<
", "
<<
r1.y
<<
">
\n";
// <
3, 10>
co
ut
<<
"r2
= <
" <
< r
2.x
<<
", "
<<
r2.y
<<
">
\n";
// <
3, 10>
//if
(r2
!=
r1)
ER
RO
RE
syste
m("
PA
US
E")
;re
turn
0;
} r1 =
<3,
10>
r2 =
<3,
10>
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
N.B
.: N
on
so
no
de
fin
ite
op
era
zio
ni d
i c
on
fro
nto
s
ulle
str
utt
ure
.
325
10.1
.1 O
pera
zio
ni
su
lle s
tru
ttu
re (
II)
// S
tru
ttu
re c
om
e a
rgo
men
ti d
i fu
nzio
ni e r
esti
tuit
e d
a//
fu
nzio
ni
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>#in
clu
de <
cm
ath
>u
sin
g n
am
esp
ace s
td;
str
uct
pu
nto
{d
ou
ble
x;
do
ub
le y
; };
vo
id t
est(
pu
nto
p)
{co
ut
<<
"D
imen
sio
ne a
rgo
men
to "
<<
siz
eo
f p
<<
en
dl;
} vo
id t
est(
co
nst
pu
nto
* p
)
// O
verloadin
g{
co
ut
<<
"D
imen
sio
ne a
rgo
men
to "
<<
siz
eo
f p
<<
en
dl;
} do
ub
le d
ist(
co
nst
pu
nto
* p
1,
co
nst
pu
nto
* p
2)
{re
turn
sq
rt((
p1->
x -
p2->
x)
* (p
1->
x -
p2->
x)
+
(p1->
y -
p2->
y)
* (p
1->
y -
p2->
y))
;} p
un
to v
icin
o(p
un
to i
ns[]
, in
t n
, co
nst
pu
nto
* p
) {
do
ub
le m
in =
dis
t(&
ins[0
],p
), t
;in
t in
dex =
0;
// M
em
orizza l’in
dic
efo
r (i
nt
i =
1;
i <
n;
i++
){
t =
dis
t(&
ins[i
], p
);if
(m
in >
t)
{ in
dex =
i;
min
= t
; };
} retu
rn i
ns[i
nd
ex];
}
12
4
p.y
10
.01
28
p.x
3.5
12
0
13
2
326
10.1
.1 O
pera
zio
ni
su
lle s
tru
ttu
re (
III)
// S
tru
ttu
re c
om
e a
rgo
men
ti d
i fu
nzio
ni e r
esti
tuit
e d
a//
fu
nzio
ni
int
main
()
{p
un
to in
s[]
= {
{3.0
, 10.0
}, {
2.0
, 9.0
}, {
1.0
, 1.0
}};
pu
nto
r =
{3.5
, 10.0
};te
st(
r);
// 1
6te
st(
&r)
;//
4co
ut
<<
"D
ista
nza:
" <
< d
ist(
&r,
&in
s[0
]) <
< e
nd
l;p
un
to s
= v
icin
o(i
ns,
siz
eo
f in
s/s
izeo
f(p
un
to),
&r)
;co
ut
<<
"P
un
to p
iu' vic
ino
: ";
co
ut
<<
'<
' <
< s
.x <
< "
, "
<<
s.y
<<
">
\n";
syste
m("
PA
US
E")
;re
turn
0;
} Dim
en
sio
ne a
rgo
men
to 1
6D
imen
sio
ne a
rgo
men
to 4
Dis
tan
za:
0.5
Pu
nto
piu
' vic
ino
: <
3, 10>
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
327
10.1
.1 O
pera
zio
ni
su
lle s
tru
ttu
re (
IV)
// C
op
ia d
i vett
ori
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int
N =
3;
str
uct
vett
ore
{
int
vv[N
];};
vo
id s
tam
pa(c
on
st
vett
ore
& v
, in
t n
){
c
ou
t <
< '['
<<
v.v
v[0
];fo
r (i
nt
i =
1;
i <
n;
i++
)co
ut
<<
' ' <
< v
.vv[i
];co
ut
<<
']'
<<
en
dl;
} int
main
()
{vett
ore
v1 =
{1,
2,
3},
v2;
v2 =
v1;
co
ut
<<
"S
tam
pa d
el
vett
ore
v1 "
<<
en
dl;
sta
mp
a(v
1,
N);
co
ut
<<
"S
tam
pa d
el
vett
ore
v2 "
<<
en
dl;
sta
mp
a(v
2,
N);
syste
m("
PA
US
E")
;re
turn
0;
} Sta
mp
a d
el
vett
ore
v1
[1 2
3]
Sta
mp
a d
el
vett
ore
v2
[1 2
3]
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
328
10.1
.1 O
pera
zio
ni
su
lle s
tru
ttu
re (
V)
// T
rasm
issio
ne d
i vett
ori
per
valo
re
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
co
nst
int
N =
3;
str
uct
vett
ore
{
int
vv[N
];};
vo
id s
tam
pa(c
on
st
vett
ore
& v
, in
t n
){
c
ou
t <
< '['
<<
v.v
v[0
];fo
r (i
nt
i =
1;
i <
n;
i++
)co
ut
<<
' ' <
< v
.vv[i
];co
ut
<<
']'
<<
en
dl;
} vo
id i
ncre
men
ta(v
ett
ore
v,
int
n)
{ f
or
(in
t i =
0;
i <
n;
i++
) v
.vv[i
]++
;}
int
main
()
{vett
ore
v1 =
{1,
2,
3};
co
ut
<<
"S
tam
pa d
el
vett
ore
v1 "
<<
en
dl;
sta
mp
a(v
1,
N);
incre
men
ta(v
1,
N);
// Incre
menta
la c
opia
co
ut
<<
"S
tam
pa d
el
vett
ore
v1 "
<<
en
dl;
sta
mp
a(v
1,
N);
// [1 2
3]
syste
m("
PA
US
E")
;re
turn
0;
} Sta
mp
a d
el
vett
ore
v1
[1 2
3]
Sta
mp
a d
el
vett
ore
v2
[1 2
3]
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
329
10.2
Un
ion
i (I
)
So
no
dic
hia
rate
e u
sate
co
n la s
tessa s
inta
ssi
dell
e
str
utt
ure
:•
si
uti
lizza la p
aro
la c
hia
ve u
nio
n a
l p
osto
di str
uct.
Rap
pre
sen
tan
o u
n’a
rea d
i m
em
ori
a c
he i
n t
em
pi
div
ers
i p
uò
co
nte
nere
dati
di ti
po
dif
fere
nte
:•
i m
em
bri
di u
n'u
nio
ne c
orr
isp
on
do
no
a d
ivers
e
“in
terp
reta
zio
ni”
di u
n'u
nic
a a
rea d
i m
em
ori
a.
Mem
bri
di u
na u
nio
ne n
on
dell
a s
tessa d
imen
sio
ne:
•vie
ne r
iserv
ato
sp
azio
per
il p
iù g
ran
de.
Esem
pio
:str
uct
{ in
t i;
do
ub
le d
; }
x;
un
ion
{ i
nt
i; d
ou
ble
d;
} y;
–la
str
utt
ura
xo
ccu
pa 9
6 b
it d
i m
em
ori
a (
32 p
er
i
e 6
4 p
er
d);
–l'u
nio
ne y
occu
pa 6
4 b
it d
i m
em
ori
a,
ch
e
po
sso
no
essere
ded
icati
ad
un
valo
re i
nte
ro
(lascia
nd
on
e 3
2 i
nu
tili
zzati
) o
ad
un
valo
re
reale
.
Op
era
zio
ni:
–q
uell
e v
iste
per
le s
tru
ttu
re.
Valo
ri in
izia
li d
ell
e u
nio
ni:
–so
lo p
er
il p
rim
o m
em
bro
;
–esem
pio
:u
nio
n {
ch
ar
c;
int
i; d
ou
ble
f;
} a =
{ 'X
' };
330
10.2
Un
ion
i (I
I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
un
ion
Un
i {
ch
ar
c;
in
t i;
};
str
uct
Str
{
ch
ar
c;
int
i; }
;
int
main
()
{co
ut
<<
siz
eo
f(ch
ar)
<<
'\t
' <
< s
izeo
f(in
t) <
< e
nd
l;//
1 4
co
ut
<<
siz
eo
f(U
ni)
<<
'\t
' <
< s
izeo
f(S
tr)
<<
en
dl;
// 4
8
Un
i u
= {
'a'}
;//
Un
i u
1 =
{'a
', 1
0000};
E
RR
AT
O
u.i
= 0
xF
F7A
;
// 7
A e
' la c
odific
a A
SC
II d
i z
co
ut
<<
u.c
<<
'\t
' <
< u
.i <
< e
nd
l;//
z 6
5402
Str
s =
{'a
', 0
xF
F7A
};
co
ut
<<
s.c
<<
'\t
' <
< s
.i <
< e
nd
l;//
a 6
5402
syste
m("
PA
US
E")
;re
turn
0;
} 1
4
4
8
z
6
5402
a
6
5402
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
331
10.3
.1 P
ila (
I)
•In
sie
me o
rdin
ato
di d
ati
di ti
po
ug
uale
, in
cu
i è
po
ssib
ile e
ffett
uare
op
era
zio
ni d
i in
seri
men
to e
di
estr
azio
ne s
eco
nd
o l
a s
eg
uen
te r
eg
ola
di accesso
: l’
ult
imo
dato
in
seri
to è
il p
rim
o a
d e
ssere
estr
att
o
(LIF
O:
Last
In F
irst
Ou
t).
•S
e t
op
==
-1, la
pil
a è
vu
ota
. S
e t
op
==
DIM
-1,
do
ve
DIM
è i
l n
um
ero
massim
o d
i ele
men
ti n
ell
a p
ila, la
p
ila è
pie
na.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
typ
ed
ef
in
t T
;co
nst
int
DIM
= 5
;
str
uct
pil
a
{in
t to
p;
T s
tack[D
IM];
}; //in
izia
lizzazio
ne d
ella
pila
vo
id i
nip
(pil
a&
pp
){
pp
.to
p=
-1;
}
top
0D
IM-
1
332
10.3
.1 P
ila (
II)
bo
ol em
pty
(co
nst
pil
a&
pp
)//
pila
vuota
?{
if (
pp
.to
p=
=-1
) re
turn
tru
e;
retu
rn f
als
e;
} bo
ol fu
ll(c
on
st
pil
a&
pp
)//
pila
pie
na?
{ if
(p
p.t
op
==
DIM
-1)
retu
rn t
rue;
retu
rn f
als
e;
} bo
ol p
ush
(pil
a&
pp
, T
s)
// inserisce u
n e
lem
ento
in p
ila{
if (
full
(pp
)) r
etu
rn f
als
e;
pp
.sta
ck[+
+(p
p.t
op
)] =
s;
retu
rn t
rue;
} bo
ol p
op
(pil
a&
pp
, T
& s
)//
estr
ae u
n e
lem
ento
dalla
pila
{ if
(em
pty
(pp
)) r
etu
rn f
als
e;
s=
pp
.sta
ck[(
pp
.to
p)-
-];
retu
rn t
rue;
} vo
id s
tam
pa(c
on
st
pil
a&
pp
) //
sta
mpa g
li ele
menti
{co
ut
<<
"E
lem
en
ti c
on
ten
uti
nell
a p
ila:
" <
< e
nd
l;fo
r (i
nt
i =
pp
.to
p;
i >
= 0
; i-
-)co
ut
<<
'['
<<
i <
< "
] "
<<
pp
.sta
ck[i
] <
< e
nd
l;}
333
10.3
.1 P
ila (
III)
int
main
(){
pil
a s
t;in
ip(s
t);
T n
um
;if
(em
pty
(st)
) co
ut
<<
"P
ila v
uo
ta"
<<
en
dl;
for
(in
t i=
0;
i <
DIM
;i+
+)
if (
pu
sh
(st,
DIM
-i)
)co
ut
<<
"In
seri
to "
<<
DIM
-i <
<
". V
alo
re d
i to
p:
" <
<st.
top
<<
en
dl;
els
e c
err
<<
"In
seri
men
to d
i "
<<
i <
< "
fall
ito
" <
< e
nd
l;if
(fu
ll(s
t))
co
ut
<<
"P
ila p
ien
a"
<<
en
dl;
sta
mp
a(s
t);
for
(in
t i=
0;
i <
DIM
-2;
i++
)if
(p
op
(st,
nu
m))
co
ut
<<
"E
str
att
o "
<<
nu
m <
<".
Valo
re d
i to
p:
" <
< s
t.to
p <
< e
nd
l;els
e c
err
<<
"E
str
azio
ne f
all
ita"
<<
en
dl;
for
(in
t i
=0;
i <
DIM
;i+
+)
if (
pu
sh
(st,
i))
co
ut
<<
"In
seri
to "
<<
i <
< "
. V
alo
re d
i to
p:
" <
<st.
top
<<
en
dl;
els
e c
err
<<
"In
seri
men
to d
i "
<<
i <
< "
fall
ito
" <
< e
nd
l;sta
mp
a(s
t);
for
(in
t i=
0;
i <
2;
i++
)if
(p
op
(st,
nu
m))
co
ut
<<
"E
str
att
o "
<<
nu
m <
<".
Valo
re d
i to
p:
" <
< s
t.to
p <
< e
nd
l;els
e c
err
<<
"E
str
azio
ne f
all
ita"
<<
en
dl;
sta
mp
a(s
t);
syste
m("
PA
US
E")
;re
turn
0;
}
334
10.3
.1 P
ila (
IV)
Pil
a v
uo
taIn
seri
to 5
. V
alo
re d
i to
p:
0In
seri
to 4
. V
alo
re d
i to
p:
1In
seri
to 3
. V
alo
re d
i to
p:
2In
seri
to 2
. V
alo
re d
i to
p:
3In
seri
to 1
. V
alo
re d
i to
p:
4P
ila p
ien
aE
lem
en
ti c
on
ten
uti
nell
a p
ila:
[4]
1[3
] 2
[2]
3[1
] 4
[0]
5E
str
att
o 1
. V
alo
re d
i to
p:
3E
str
att
o 2
. V
alo
re d
i to
p:
2E
str
att
o 3
. V
alo
re d
i to
p:
1In
seri
to 0
. V
alo
re d
i to
p:
2In
seri
to 1
. V
alo
re d
i to
p:
3In
seri
to 2
. V
alo
re d
i to
p:
4In
seri
men
to d
i 3 f
all
ito
Inseri
men
to d
i 4 f
all
ito
Ele
men
ti c
on
ten
uti
nell
a p
ila:
[4]
2[3
] 1
[2]
0[1
] 4
[0]
5E
str
att
o 2
. V
alo
re d
i to
p:
3E
str
att
o 1
. V
alo
re d
i to
p:
2E
lem
en
ti c
on
ten
uti
nell
a p
ila:
[2]
0[1
] 4
[0]
5P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
335
10.3
.2 C
od
a (
I)
•In
sie
me o
rdin
ato
di d
ati
di ti
po
ug
uale
, in
cu
i è
po
ssib
ile e
ffett
uare
op
era
zio
ni d
i in
seri
men
to e
di
estr
azio
ne s
eco
nd
o l
a s
eg
uen
te r
eg
ola
di accesso
: il
p
rim
o d
ato
in
seri
to è
il p
rim
o a
d e
ssere
estr
att
o
(FIF
O:
Fir
st
In F
irst
Ou
t).
•R
eali
zzata
co
n u
n a
rray c
irco
lare
e d
ue p
un
tato
ri:
–fr
on
t –
po
siz
ion
e d
a c
ui
avvie
ne
l’e
str
azio
ne
;
–b
ac
k –
po
siz
ion
e i
n c
ui
avvie
ne
l’i
ns
eri
me
nto
.
•fr
on
t=
=b
ack
co
da v
uo
ta•
fro
nt
==
(back +
1)
% D
IMco
da p
ien
a
–(A
TT
EN
ZIO
NE
al
ma
ss
imo
DIM
-1
ele
me
nti
ba
ck
fro
nt
fro
nt
ba
ck
fro
nt
ba
ck
fro
nt
Ins
eri
me
nto
di
un
ele
me
nto
Ins
eri
me
nto
di
un
ele
me
nto
Ins
eri
me
nto
di
un
ele
me
nto
No
ns
are
bb
ep
os
sib
ile
dis
cri
min
are
tra
co
da
vu
ota
ec
od
ap
ien
a
ba
ck
336
10.3
.2 C
od
a (
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
typ
ed
ef
int
T;
co
nst
int
DIM
= 5
;
str
uct
co
da
{in
t fr
on
t, b
ack;
T q
ueu
e[D
IM];
}; vo
id i
nic
(co
da&
cc)
// iniz
ializ
zazio
ne d
ella
coda
{ cc.f
ron
t =
cc.b
ack
=0;
} bo
ol em
pty
(co
nst
co
da&
cc)
// c
oda v
uota
?{
if (
cc.f
ron
t =
= c
c.b
ack)
retu
rn t
rue;
retu
rn f
als
e;
} bo
ol fu
ll(c
on
st
co
da&
cc)
//coda p
iena?
{ if
(cc.f
ron
t =
= (
cc.b
ack +
1)%
DIM
) re
turn
tru
e;
retu
rn f
als
e;
}
337
10.3
.2 C
od
a (
III)
bo
ol in
sq
ueu
e(c
od
a&
cc,
T s
) //
inserisce
un e
lem
ento
{ if
(fu
ll(c
c))
retu
rn f
als
e;
cc.q
ueu
e[c
c.b
ack]
= s
;cc.b
ack =
(cc.b
ack+
1)%
DIM
;re
turn
tru
e;
} bo
ol esq
ueu
e(c
od
a&
cc,
T&
s)
// e
str
ae u
n e
lem
ento
{ if
(em
pty
(cc))
retu
rn f
als
e;
s =
cc.q
ueu
e[c
c.f
ron
t];
cc.f
ron
t =
(cc.f
ron
t +
1)%
DIM
;re
turn
tru
e;
} vo
id s
tam
pa(c
on
st
co
da&
cc)
// s
tam
pa g
li ele
menti
{fo
r (i
nt
i =
cc.f
ron
t; i
%D
IM !
= c
c.b
ack;
i++
)co
ut
<<
cc.q
ueu
e[i
%D
IM]
<<
en
dl;
}
338
10.3
.2 C
od
a (
IV)
int
main
(){ c
od
a q
u;
T n
um
;in
ic(q
u);
if (
em
pty
(qu
)) c
ou
t <
< "
Co
da v
uo
ta"
<<
en
dl;
for
(in
t i
= 0
; i <
DIM
;i+
+)
if (
insq
ueu
e(q
u,i)
)co
ut
<<
"In
seri
to l'e
lem
en
to "
<<
i <
< "
in
po
siz
ion
e "
<<
(q
u.b
ack +
DIM
-1)%
DIM
<<
en
dl;
els
e c
err
<<
"C
od
a p
ien
a"
<<
en
dl;
if (
full
(qu
)) c
ou
t <
< "
Co
da p
ien
a"
<<
en
dl;
sta
mp
a(q
u);
for
(in
t i
= 0
; i <
DIM
-2;
i++
)if
(esq
ueu
e(q
u,n
um
))co
ut
<<
"Estr
att
o l'e
lem
en
to "
<<
nu
m <
< "
in
po
siz
ion
e "
<<
(q
u.f
ron
t +
DIM
-1)%
DIM
<<
en
dl;
els
e c
ou
t <
< "
Co
da v
uo
ta "
<<
en
dl;
for
(in
t i
= 0
; i <
DIM
;i+
+)
if (
insq
ueu
e(q
u,i)
)co
ut
<<
"In
seri
to l
'ele
men
to "
<<
i <
< "
in
po
siz
ion
e "
<<
(qu
.back +
DIM
-1)%
DIM
<<
en
dl;
els
e c
err
<<
"C
od
a p
ien
a"
<<
en
dl;
sta
mp
a(q
u);
for
(in
t i =
0;
i <
2;
i++
)if
(esq
ueu
e(q
u,n
um
))co
ut
<<
"Estr
att
o l'e
lem
en
to "
<<
nu
m <
< "
in
po
siz
ion
e "
<
< (
qu
.fro
nt
+ D
IM -
1)%
DIM
<<
en
dl;
els
e c
ou
t <
< "
Co
da v
uo
ta"
<<
en
dl;
sta
mp
a(q
u);
syste
m("
PA
US
E")
;re
turn
0;
}
339
10.3
.2 C
od
a (
V)
Co
da v
uo
taIn
seri
to l'e
lem
en
to 0
in
po
siz
ion
e 0
Inseri
to l'e
lem
en
to 1
in
po
siz
ion
e 1
Inseri
to l'e
lem
en
to 2
in
po
siz
ion
e 2
Inseri
to l'e
lem
en
to 3
in
po
siz
ion
e 3
Co
da p
ien
aC
od
a p
ien
a0 1 2 3 E
str
att
o l
'ele
men
to 0
in
po
siz
ion
e 0
Estr
att
o l
'ele
men
to 1
in
po
siz
ion
e 1
Estr
att
o l
'ele
men
to 2
in
po
siz
ion
e 2
Inseri
to l'e
lem
en
to 0
in
po
siz
ion
e 4
Inseri
to l'e
lem
en
to 1
in
po
siz
ion
e 0
Inseri
to l'e
lem
en
to 2
in
po
siz
ion
e 1
Co
da p
ien
aC
od
a p
ien
a3 0 1 2 E
str
att
o l
'ele
men
to 3
in
po
siz
ion
e 3
Estr
att
o l
'ele
men
to 0
in
po
siz
ion
e 4
1 2 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
340
11.1
Tip
i fu
nzio
ne
Dic
hia
razio
ne d
i u
na f
un
zio
ne d
i n
arg
om
en
ti:
•asso
cia
ad
un
id
en
tifi
cato
re u
n t
ipo
, d
ete
rmin
ato
d
all
a n
-up
la o
rdin
ata
dei
tip
i d
eg
li a
rgo
men
ti e
dal
tip
o d
el ri
su
ltato
.
Valo
ri a
sso
cia
ti a
i ti
pi fu
nzio
ne:
•tu
tte l
e f
un
zio
ni co
rris
po
nd
en
ti (
no
n v
alg
on
o l
e
co
nvers
ion
i im
pli
cit
e).
#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
qu
ad
rato
(in
t n
)//
Ista
nza d
i tipo f
unzio
ne int(
int)
{ r
etu
rn n
*n;
}
int
cu
bo
(in
t n
)//
Ista
nza d
i tipo f
unzio
ne int(
int)
{ r
etu
rn n
*n*n
; }
do
ub
le m
ed
ia(i
nt
fp(i
nt)
, in
t a,
int
b)
// funzio
ne a
rg.
{in
t s =
0;
for
(in
t n
= a
; n
<=
b;
n+
+)
s +
= f
p(n
);re
turn
sta
tic_cast<
do
ub
le>
(s)
/ (b
-a+
1);
} int
main
(){
co
ut
<<
med
ia(q
uad
rato
, 1,
2)
<<
en
dl;
co
ut
<<
med
ia(c
ub
o, 1, 2)
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 2.5
4.5
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
341
11.2
Pu
nta
tori
a f
un
zio
ne
(I)
I p
un
tato
ri p
osso
no
co
nte
nere
an
ch
e i
nd
iriz
zi d
i fu
nzio
ne.
Defi
niz
ion
e d
i u
n p
un
tato
re a
fu
nzio
ne:
result-t
ype
( *
identifier
)(a
rgum
ent-
port
ion|o
pt
) ;
Ch
iam
ata
di fu
nzio
ne a
ttra
vers
o i
l p
un
tato
re:
identifier
(expre
ssio
n-lis
t|o
pt
)
(*
identifier
)(
expre
ssio
n-lis
t|o
pt
)
#in
clu
de <
cstd
lib
>
#in
clu
de <
iostr
eam
>
usin
g n
am
esp
ace s
td;
int
qu
ad
rato
(in
t n
) {
retu
rn n
*n;
}
int
cu
bo
(in
t n
) {
retu
rn n
*n*n
; }
do
ub
le m
ed
ia(i
nt
(*p
f)(i
nt)
, in
t a,
int
b)
{in
t s =
0;
for
(in
t n
= a
; n
<=
b;
n+
+)
s +
= (
*pf)
(n);
// form
a a
ltern
ativa s
+=
pf(
n)
retu
rn s
tati
c_cast<
do
ub
le>
(s)
/ (b
-a+
1);
} int
main
()
{ co
ut
<<
med
ia(q
uad
rato
, 1, 2)
<<
en
dl;
co
ut
<<
med
ia(c
ub
o, 1, 2)
<<
en
dl;
syste
m("
PA
US
E")
;
retu
rn 0
;
}
342
11.2
Pu
nta
tori
a f
un
zio
ne
(II)
#in
clu
de <
cstd
lib
>
#in
clu
de <
iostr
eam
>
usin
g n
am
esp
ace s
td;
vo
id f
1()
{
co
ut
<<
"u
no
" <
< e
nd
l; }
vo
id f
2()
{
co
ut
<<
"d
ue"
<<
en
dl;
}
vo
id f
3(v
oid
(*&
pf)
(vo
id))
{in
t a;
cin
>>
a;
if (
a=
=0)
pf
= f
1;
els
e p
f =
f2;
} int
main
()
{
vo
id(*
p1)(
vo
id);
f3(p
1);
(*p
1)(
);
f3(p
1);
(*p
1)(
);
syste
m("
PA
US
E")
;
retu
rn 0
;
} 5 du
e
0 un
o
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
343
11.3
Arg
om
en
ti d
efa
ult
(I)
Arg
om
en
ti f
orm
ali
di u
na f
un
zio
ne:
–p
osso
no
avere
in
izia
lizzato
ri;
–co
sti
tuis
co
no
il valo
re d
efa
ult
deg
li a
rgo
men
ti
att
uali
(ven
go
no
in
seri
ti d
al
co
mp
ilato
re n
ell
e
ch
iam
ate
dell
a f
un
zio
ne in
cu
i g
li a
rgo
men
ti a
ttu
ali
so
no
om
essi)
;
–se i
l valo
re d
efa
ult
vie
ne i
nd
icato
so
lo p
er
alc
un
i arg
om
en
ti, q
uesti
devo
no
essere
gli
ult
imi;
–g
li in
izia
lizzato
ri n
on
po
sso
no
co
nte
nere
né
vari
ab
ili
locali
né a
rgo
men
ti f
orm
ali
dell
a f
un
zio
ne.
Ch
iam
ata
di fu
nzio
ne:
–p
osso
no
essere
om
essi
tutt
i o
so
lo a
lcu
ni
arg
om
en
ti d
efa
ult
: in
og
ni caso
gli
arg
om
en
ti
om
essi
devo
no
essere
gli
ult
imi.
Esem
pio
(peso
di u
n c
ilin
dro
):
do
ub
le p
eso
(do
ub
le lu
ng
, d
ou
ble
dia
m =
10,
do
ub
le
den
s =
15)
{
dia
m /
= 2
;
retu
rn (
dia
m*d
iam
* 3
.14 *
lu
ng
* d
en
s);
} int
main
()
{ /
/ ..
.
p =
peso
(125);
// e
quiv
ale
a p
eso(1
25,
10,
15)
p =
peso
(35,
5);
//
equiv
ale
a p
eso(3
5,
5,
15)
// ...
}
344
11.3
Arg
om
en
ti d
efa
ult
(II
)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
do
ub
le p
eri
metr
o(i
nt
nL
ati
, d
ou
ble
lu
ng
hL
ato
= 1
.0)
{re
turn
nL
ati
* l
un
gh
Lato
;} vo
id f
() {
//d
ou
ble
p =
peri
metr
o()
;E
RR
OR
E//
co
ut
<<
p <
< e
nd
l;} d
ou
ble
peri
metr
o(i
nt
nL
ati
= 3
, d
ou
ble
lu
ng
hL
ato
= 1
.0);
vo
id g
()
{d
ou
ble
p =
peri
metr
o()
;//
OK
co
ut
<<
p <
< e
nd
l;} in
t m
ain
()
{f(
);g
();
syste
m("
PA
US
E")
;re
turn
0;
} 3 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
345
11.4
Overl
oad
ing
(I)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
massim
o(i
nt
a,
int
b)
{co
ut
<<
"M
assim
o p
er
inte
ri "
<<
en
dl;
retu
rn a
> b
? a
: b
;} d
ou
ble
massim
o(d
ou
ble
a, d
ou
ble
b)
{co
ut
<<
"M
assim
o p
er
do
ub
le"
<<
en
dl;
retu
rn a
> b
? a
: b
;} /*
in
t m
assim
o(d
ou
ble
a,
do
ub
le b
)
ER
RO
RE
!{
retu
rn i
nt(
a >
b ?
a :
b);
}*/
int
main
()
{co
ut
<<
massim
o(1
0,
15)
<<
en
dl;
co
ut
<<
massim
o(1
2.3
, 13.5
) <
< e
nd
l;//
co
ut
<<
massim
o(1
2.3
, 13)
<<
en
dl;
// E
RR
OR
E:
am
big
uo
co
ut
<<
massim
o('
a','r
') <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Massim
o p
er
inte
ri 1
5M
assim
o p
er
do
ub
le 1
3.5
Massim
o p
er
inte
ri 1
14
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
346
11.4
Overl
oad
ing
(II
)
// S
ovra
pp
osiz
ion
e c
on
st
-n
on
co
nst
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
massim
o(c
on
st
int
v[]
, in
t n
) {
co
ut
<<
"A
rra
y c
on
st
";in
t m
= v
[0];
for
(in
t i =
1;
i <
n;
i++
) m
= m
>=
v[i
] ?
m :
v[i
];re
turn
m;
} int
massim
o(i
nt
v[]
, in
t n
) {
co
ut
<<
"A
rra
y n
on
co
nst
";in
t m
= v
[0];
for
(in
t i =
1;
i <
n;
i++
) m
= m
>=
v[i
] ?
m :
v[i
];re
turn
m;
} int
main
()
{co
nst
int
N =
5;
co
nst
int
cv[N
] =
{1,
10,
100,
10,
1};
co
ut
<<
massim
o(c
v,
N)
<<
en
dl;
int
v[N
] =
{1,
10,
100,
10,
1};
co
ut
<<
massim
o(v
, N
) <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} Arr
ay c
on
st
100
Arr
ay n
on
co
nst
100
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
347
12.4
Dic
hia
razio
ni ty
ped
ef
(I)
Pa
rola
ch
iave
ty
pe
de
f:•
defi
nis
ce d
eg
li id
en
tifi
cato
ri (
dett
i n
om
i ty
ped
ef)
ch
e
ven
go
no
usati
per
rife
rirs
i a t
ipi n
ell
e d
ich
iara
zio
ni.
Le
dic
hia
razio
ni ty
pe
de
f n
on
cre
an
o n
uo
vi
tip
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
main
()
{in
t i =
1;
typ
ed
ef
int*
in
tP;
intP
p =
&i;
co
ut
<<
*p
<<
en
dl;
// 1
typ
ed
ef
int
vett
[5];
//
vett
ore
di 5 inte
rivett
v =
{1,
10,
100,
10,
1};
co
ut
<<
"v =
["
<<
v[0
];fo
r (i
nt
j =
1;
j <
5;
j++
) co
ut
<<
' ' <
< v
[j];
co
ut
<<
']'
<<
en
dl;
typ
ed
ef
int
inte
ro;
int
a =
4;
inte
ro b
= a
; //
OK
, ty
pedef
non intr
oduce u
n n
uovo t
ipo
co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
// 4
4
syste
m("
PA
US
E")
;re
turn
0;
} 1 v =
[1 1
0 1
00 1
0 1
]4
4
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
348
13.1
Mem
ori
a d
inam
ica (
I)
•Pro
gra
mm
ip
rec
ed
en
ti:
–il
pro
gra
mm
ato
resp
ecif
ica
,u
tilizzan
do
defi
niz
ion
i,n
um
ero
eti
po
dell
evari
ab
ili
uti
lizzate
.
•Sit
ua
zio
nic
om
un
i:–
ilp
rog
ram
mato
ren
on
èin
gra
do
di
sta
bilir
ea
pri
ori
iln
um
ero
di
vari
ab
ili
di
un
cert
oti
po
ch
eserv
iran
no
du
ran
tel'esecu
zio
ne
delp
rog
ram
ma.
–P
er
va
riab
ili
di
tip
oarr
ay,
per
es
em
pio
,d
over
sp
ecif
icare
led
imen
sio
ni(c
osta
nti
)è
lim
itati
vo
.
–V
orr
em
mo
po
ter
dim
en
sio
nare
un
arr
ay
do
po
aver
sco
pert
od
ura
nte
l’esecu
zio
ne
del
pro
gra
mm
a,
qu
an
tod
eve
essere
gra
nd
e.
–P
er
ese
mp
io,
so
mm
ad
iN
nu
meri
inseri
tid
ata
sti
era
,co
nN
lett
od
ata
sti
era
.
•Me
cca
nis
mo
de
lla
me
mo
ria
lib
era
(om
em
ori
ad
ina
mic
a):
–ri
su
lta
po
ssib
ile
allo
care
dell
eare
ed
im
em
ori
ad
ura
nte
l'esecu
zio
ne
del
pro
gra
mm
a,
ed
acced
ere
ata
liare
em
ed
ian
tep
un
tato
ri;
–g
lio
gg
ett
ico
sì
ott
en
uti
so
no
dett
id
inam
ici,
ed
all
ocati
nell
am
em
ori
ali
bera
.
349
•A
llo
ca
zio
ne
dio
gg
ett
id
ina
mic
i:–
op
era
tore
pre
fisso
new
:
»h
aco
me
arg
om
en
toil
tip
od
ell’o
gg
ett
od
aall
ocare
;
»re
sti
tuis
ce
l’in
dir
izzo
dell
am
em
ori
ao
tten
uta
,ch
ep
uò
essere
asseg
nato
au
np
un
tato
re;
»se
no
nè
po
ssib
ile
ott
en
ere
lam
em
ori
ari
ch
iesta
,re
sti
tuis
ce
l’in
dir
izzo
0.
#in
clu
de
<cstd
lib
>#in
clu
de
<io
str
eam
>u
sin
gn
am
esp
ace
std
;
int
main
(){
int*
q;
q=
new
int;
*q=
10;
co
ut
<<
*q<
<en
dl;
//10
int
*p
;in
tn
;cin
>>
n;
p=
new
int
[n];
//n
>0
for
(in
ti
=0;
i<
n;
i++
)p
[i]
=i;
//anche
*(p+
i)=
i;
syste
m("
PA
US
E")
;re
turn
0;
}
13.1
Mem
ori
a d
inam
ica (
II)
350
•B
uo
ne
sit
od
ell’o
pe
rato
ren
ew
:–
pu
òessere
co
ntr
oll
ato
usan
do
lafu
nzio
ne
di
lib
reri
aset_
new
_h
an
dle
r(),
dic
hia
rata
nelfi
le<
new
>:
»q
uesta
fun
zio
ne
ha
co
me
arg
om
en
tou
na
fun
zio
ne
vo
idsen
za
arg
om
en
ti,
ch
evie
ne
eseg
uit
ase
l’o
pera
tore
new
fallis
ce
(se
l'all
ocazio
ne
no
nè
po
ssib
ile).
#in
clu
de
<cstd
lib
>
#in
clu
de
<io
str
eam
>
#in
clu
de
<n
ew
>
usin
gn
am
esp
ace
std
;
vo
idm
yh
an
dle
r()
{
cerr
<<
"Mem
ori
ali
bera
no
nd
isp
on
ibil
e"
<<
en
dl;
exit
(1);
} int
main
()
{
int
n;
set_
new
_h
an
dle
r(m
yh
an
dle
r);
co
ut
<<
"In
seri
sci
lad
imen
sio
ne
"<
<en
dl;
cin
>>
n;
int*
*m
=n
ew
int*
[n];
for
(in
ti
=0;
i<n
;i+
+)
m[i
]=
new
int[
n];
syste
m("
PA
US
E")
;
retu
rn0;
}
13.1
Mem
ori
a d
inam
ica (
III)
351
•O
gg
ett
ia
llo
ca
tin
ella
me
mo
ria
lib
era
:–
esis
ton
ofi
nch
én
on
ven
go
no
dis
tru
tti
dall
’op
era
tore
pre
fisso
dele
te:
»esso
ha
co
me
arg
om
en
tou
np
un
tato
reall'o
gg
ett
od
ad
istr
ug
gere
;
»p
uò
essere
ap
pli
cato
so
load
un
pu
nta
tore
ch
ein
dir
izza
un
og
gett
oallo
cato
med
ian
tel’o
pera
tore
new
(in
caso
co
ntr
ari
osi
co
mm
ett
eu
nerr
ore
).
•S
el’o
pe
rato
red
ele
ten
on
vie
ne
uti
lizza
to:
–g
lio
gg
ett
iallo
cati
ven
go
no
dis
tru
tti
al
term
ine
del
pro
gra
mm
a.
int
main
()
{in
tn
=12;
int*
p=
new
int(
10);
co
ut
<<
*p<
<en
dl;
dele
tep
;
//cout
<<
*p<
<endl;
//S
BA
GLIA
TO
,N
ON
SE
GN
ALA
ER
RO
RE
p=
0;
//cout
<<
*p<
<endl;
//S
EG
NA
LA
ER
RO
RE
AT
EM
PO
DI
ES
EC
UZ
ION
E
int*
m=
new
int
[n];
dele
te[]
m;
//dele
ten;
//E
RR
OR
E-
oggett
onon
allo
cato
din
am
icam
ente
syste
m("
PA
US
E")
;
retu
rn0;
}
Mem
ori
a d
inam
ica (
IV)
352
13.2
Lis
te (
I)
Pro
ble
ma
: m
em
ori
zza
re n
um
eri
in
se
riti
da
ta
sti
era
fi
nc
hè
no
n v
ien
e in
se
rito
il c
ara
tte
re ‘.’.
Str
utt
ura
dati
,fo
rmata
da
ele
me
nti
de
llo
ste
sso
tip
oc
olle
gati
inc
ate
na
,la
cu
ilu
ng
he
zza
va
ria
din
am
ica
me
nte
.
•Lis
ta:
–o
gn
iele
men
toè
un
astr
utt
ura
,co
sti
tuit
ad
au
no
op
iùcam
pi
co
nte
nen
tiin
form
azio
ni,
ed
au
ncam
po
pu
nta
tore
co
nte
nen
tel'in
dir
izzo
dell’e
lem
en
tosu
ccessiv
o;
–il
pri
mo
ele
men
toè
ind
iriz
zato
da
un
pu
nta
tore
(pu
nta
tore
dell
ali
sta
);
–il
cam
po
pu
nta
tore
dell
’ult
imo
ele
men
toco
nti
en
eil
pu
nta
tore
nu
llo
.
typ
ed
ef
int
T;
str
uct
ele
m
{
Tin
f;
ele
m*
pu
n;
};
3
p0
p0->
inf
p0->
pun
912
0
hea
p
353
13.2
Lis
te (
II)
Cre
azio
ne
di u
na
lis
ta1
. L
eg
ge
re l’in
form
azio
ne
2. A
lloca
re u
n n
uo
vo
ele
me
nto
co
n l’in
form
azio
ne
da
in
se
rire
3. C
olle
ga
re il n
uo
vo
ele
me
nto
al p
rim
o e
lem
en
to
de
lla lis
ta4
. A
gg
iorn
are
il p
un
tato
re d
i te
sta
de
lla lis
ta a
pu
nta
re
al n
uo
vo
ele
me
nto
typ
ed
ef
ele
m*
lista
;//
tip
o lis
ta
lista
cre
ali
sta
(in
t n
){
lista
p0 =
0;
ele
m*
p;
for
(in
t i =
0;
i <
n;
i++
){
p =
new
ele
m;
cin
>>
p->
inf;
p
->p
un
= p
0;
p0 =
p;
} retu
rn p
0;
}
dato
3
p0
dato
2dato
10
dato
4
p
354
13.2
Lis
te (
III)
Sta
mp
a lis
ta1
. S
ca
nd
ire
la
lis
ta d
all’
iniz
io a
lla f
ine
e p
er
og
ni
ele
me
nto
sta
mp
are
su
vid
eo
il ca
mp
o in
form
azio
ne
vo
id s
tam
pali
sta
(lis
ta p
0)
{ele
m*
p =
p0;
wh
ile (
p !
= 0
){
co
ut
<<
p->
inf
<<
' ';
p =
p->
pu
n;
}}
p0p
355
13.2
Lis
te(I
V)
Ins
eri
me
nto
in
te
sta
1.
Allo
ca
re u
n n
uo
vo
ele
me
nto
co
n l’in
form
azio
ne
da
in
se
rire
2.
Co
lleg
are
il n
uo
vo
ele
men
to a
l p
rim
o e
lem
en
to d
ell
a
lista
3.
Ag
gio
rnare
il p
un
tato
re d
i te
sta
dell
a lis
ta
vo
id i
nste
sta
(lis
ta&
p0, T
a)
{ele
m*
p =
new
ele
m;
p->
inf
= a
; p
->p
un
= p
0;
p0 =
p;
}
p0
0
a
p
356
13.2
Lis
te(V
)
Es
tra
zio
ne
da
lla
te
sta
Se
la
lis
ta n
on
è v
uo
ta1
.A
gg
iorn
are
il p
un
tato
re d
i te
sta
de
lla lis
ta2
.D
ea
lloca
re l’e
lem
en
to
bo
ol estt
esta
(lis
ta&
p0, T
& a
){
ele
m*
p =
p0;
if (
p0 =
= 0
) re
turn
fals
e;
a =
p0->
inf;
p
0 =
p0->
pu
n;
dele
te p
;re
turn
tru
e;
}
p0
0
p
357
13.2
Lis
te(V
I)
Ins
eri
me
nto
in
fo
nd
o1
.S
ca
nd
ire
la
lis
ta fin
o a
ll’u
ltim
o e
lem
en
to (
me
mb
ro
pu
n =
0)
2.
Allo
ca
re u
n n
uo
vo
ele
me
nto
co
n l’in
form
azio
ne
da
in
se
rire
3.
Co
lleg
are
l’u
ltim
o e
lem
en
to a
l n
uo
vo
ele
me
nto
vo
id i
nsfo
nd
o(l
ista
& p
0,
Ta)
{ele
m*
p;
ele
m*
q;
for
(q =
p0;
q !
= 0
; q
= q
->p
un
) p
= q
;q
= n
ew
ele
m;
q->
inf
= a
; q
->p
un
= 0
;if
(p
0 =
= 0
) p
0 =
q;
els
e p
->p
un
= q
;}
p0
0
pq00
a
358
13.2
Lis
te(V
II)
Es
tra
zio
ne
da
l fo
nd
oA
TT
EN
ZIO
NE
: n
ece
ssita
di d
ue
pu
nta
tori
pe
r sca
nd
ire
la lis
ta
bo
ol estf
on
do
(lis
ta&
p0, T
& a
){
ele
m*
p =
0;
ele
m*
q;
if (
p0 =
= 0
) re
turn
fals
e;
for
(q =
p0;
q->
pu
n !
= 0
; q
= q
->p
un
) p
= q
;a =
q->
inf;
// c
ontr
olla
se s
i estr
ae il prim
o e
lem
ento
if (
q =
= p
0)
p0 =
0;
els
e
p->
pu
n =
0;
dele
te q
;re
turn
tru
e;
}
p0
0
pq
0
359
13.2
Lis
te(V
III)
vo
id i
nseri
men
to(l
ista
& p
0, T
a)
{ele
m*
p =
0;
ele
m*
q;
ele
m*
r;fo
r (q
= p
0;
q !
= 0
&&
q->
inf
< a
; q
= q
->p
un
)p
= q
;r
= n
ew
ele
m;
r->
inf
= a
; r-
>p
un
= q
;//
contr
olla
se s
i deve inserire
in t
esta
if (
q =
= p
0)
p0 =
r;
els
e p
->p
un
= r
;}In
se
rim
en
to in
un
a lis
ta o
rdin
ata
1.
Sca
nd
ire
la
lis
ta fin
ch
è s
i in
co
ntr
a u
n e
lem
en
to
co
nte
ne
nte
ne
l ca
mp
o in
f u
n v
alo
re m
ag
gio
re d
i q
ue
llo d
a in
se
rire
op
pu
re fin
e lis
ta2
. A
lloca
re u
n n
uo
vo
ele
me
nto
co
n l’in
form
azio
ne
da
in
se
rire
3. In
se
rire
il n
uo
vo
ele
me
nto
….
3
p0
p0
->in
fp
0->
pu
n
59
0
pq
r6
360
13.2
Lis
te(I
X)
bo
ol estr
azio
ne(l
ista
& p
0, T
a)
{ele
m*
p =
0;
ele
m*
q;
for
(q =
p0;
q !
= 0
&&
q->
inf
!= a
; q
= q
->p
un
)p
= q
;if
(q
==
0)
retu
rn f
als
e;
if (
q =
= p
0)
p0 =
q->
pu
n;
els
e p
->p
un
= q
->p
un
;d
ele
te q
;re
turn
tru
e;
}Es
tra
zio
ne
di u
n e
lem
en
to d
a u
na
lis
ta
1. S
ca
nd
ire
la
lis
ta fin
ch
è s
i in
co
ntr
a u
n e
lem
en
to
co
nte
ne
nte
l’in
form
azio
ne
ce
rca
ta2
. S
e tro
va
to, co
lleg
are
i d
ue
no
di a
dia
ce
nti
3. D
ea
lloca
re l’e
lem
en
to
23
91
20
361
13.2
Lis
te(X
)
bo
ol estr
azio
ne_o
rdin
ata
(lis
ta&
p0, T
a)
{ele
m*
p =
0;
ele
m*
q;
for
(q =
p0;
q !
= 0
&&
q->
inf
< a
; q
= q
->p
un
)p
= q
;if
((q
==
0)|
|(q
->in
fo>
a))
retu
rn f
als
e;
if (
q =
= p
0)
p0 =
q->
pu
n;
els
e p
->p
un
= q
->p
un
;d
ele
te q
;re
turn
tru
e;
}Es
tra
zio
ne
di u
n e
lem
en
to d
a u
na
lis
ta o
rdin
ata
1
. S
ca
nd
ire
la
lis
ta fin
ch
è s
i in
co
ntr
a u
n e
lem
en
to
co
nte
ne
nte
l’in
form
azio
ne
ce
rca
ta o
m
ag
gio
re2
. S
e tro
va
to, co
lleg
are
i d
ue
no
di a
dia
ce
nti
3. D
ea
lloca
re l’e
lem
en
to
39
12
0
362
13.2
Lis
te c
on
pu
nta
tore
au
sil
iari
o (
I)
lista
_n
cre
ali
sta
1(i
nt
n)
{ele
m*
p;
lista
_n
li =
{0,
0};
if (
n >
= 1
){
p =
new
ele
m;
cin
>>
p->
inf;
p->
pu
n =
0;
li.p
0 =
p;
li.p
1 =
p;
for
(in
t i =
2;
i <
= n
; i+
+)
{p
= n
ew
ele
m;
cin
>>
p->
inf;
p->
pu
n =
li.
p0;
li.p
0 =
p;
}} re
turn
li;
}str
uct
lista
_n
{ele
m*
p0;
ele
m*
p1;
};
dato
a
li.p0
p0->
inf
p0->
pun
dato
bdato
c0
li.p1
363
13.2
Lis
te c
on
pu
nta
tore
au
sil
iari
o (
II)
bo
ol estt
esta
1(l
ista
_n
& l
i, T
& a
){
ele
m*
p =
li.
p0;
if (
li.p
0 =
= 0
) re
turn
fals
e;
a =
li.
p0->
inf;
li.
p0 =
li.
p0->
pu
n;
dele
te p
;if
(li
.p0 =
= 0
) li
.p1 =
0;
retu
rn t
rue;
} vo
id i
nsfo
nd
o1(l
ista
_n
& li,
Ta)
{ele
m*
p =
new
ele
m;
p->
inf
= a
; p
->p
un
= 0
;if
(li
.p0 =
= 0
) {
li
.p0 =
p;
li.p
1 =
p;
} els
e
{
li.p
1->
pu
n =
p;
li.p
1 =
p;
}
}
dato
a
li.p0
p0->
inf
p0->
pun
dato
bdato
c0
li.p1
364
13.3
Lis
te c
om
ple
sse
str
uct
nu
_ele
m{
T in
f;ele
m*
pre
c;
ele
m*
su
cc;
}; str
uct
lista
_c
{n
u_ele
m*
p0;
nu
_ele
m*
p1;
};
p0
p1
0
0
365
14.2
.1 V
isib
ilit
à
Pro
gra
mm
i sem
pli
ci:
•fo
rmati
da p
och
e f
un
zio
ni,
tu
tte c
on
ten
ute
in
un
u
nic
o f
ile, ch
e s
i scam
bia
no
in
form
azio
ni att
ravers
o
arg
om
en
ti e
ris
ult
ati
.
Pro
gra
mm
i p
iù c
om
ple
ssi:
•si
uti
lizzan
o t
ecn
ich
e d
i p
rog
ram
mazio
ne m
od
ula
re:
–su
dd
ivis
ion
e d
i u
n p
rog
ram
ma i
n d
ivers
e p
art
i ch
e v
en
go
no
scri
tte,
co
mp
ilate
(veri
ficate
e
mo
dif
icate
) sep
ara
tam
en
te;
–scam
bio
di in
form
azio
ni fr
a f
un
zio
ni u
tili
zzan
do
o
gg
ett
i co
mu
ni.
Vis
ibil
ità (
sco
pe):
•c
am
po
di
vis
ibil
ità
di u
n i
de
nti
fic
ato
re (
pa
rte
di
pro
gra
mm
a i
n c
ui
l'id
en
tifi
ca
tore
pu
ò e
ss
ere
u
sa
to);
Reg
ole
ch
e d
efi
nis
co
no
la v
isib
ilit
à d
eg
li id
en
tifi
cato
ri
(reg
ole
di vis
ibil
ità):
•serv
on
o a
co
ntr
oll
are
la c
on
div
isio
ne d
ell
e
info
rmazio
ni fr
a i
vari
co
mp
on
en
ti d
i u
n p
rog
ram
ma:
–p
erm
ett
on
o a
più
part
i d
el p
rog
ram
ma d
i ri
feri
rsi
ad
un
a s
tessa e
nti
tà (
il n
om
e d
ell
’en
tità
d
eve e
ssere
vis
ibil
e a
lle p
art
i d
el
pro
gra
mm
a
inte
ressate
);
–im
ped
isco
no
ad
alc
un
e p
art
i d
i u
n p
rog
ram
ma
di ri
feri
rsi
ad
un
a e
nti
tà (
il n
om
e d
ell
’en
tità
no
n
deve e
ssere
vis
ibil
e a
tali
part
i).
366
14.3
Blo
cch
i
// S
eq
uen
za d
i is
tru
zio
ni ra
cch
iuse t
ra p
are
nte
si
gra
ffe
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
vo
id f
()
{in
t i =
2;
// v
isib
ilita
’ lo
cale
co
ut
<<
i <
< e
nd
l;//
2} in
t m
ain
()
{ //co
ut
<<
i <
< e
nd
l;E
RR
OR
E!
int
i =
1,
j =
5;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
1 5
{
//
blo
cco
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
1 5
int
i =
10;
// n
asconde l’o
ggett
o i d
el blo
cco s
uper.
co
ut
<<
i <
< e
nd
l;//
10
} co
ut
<<
i <
< e
nd
l;//
1
f();
co
ut
<<
i <
< e
nd
l;//
1
for
(in
t a =
0;
a <
2;
a+
+)
{ in
t b
= 2
* a
; co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
//
0 0
1 2
} //
co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
ER
RO
RE
!syste
m("
PA
US
E")
;re
turn
0;
}
367
14.4
Un
ità d
i co
mp
ilazio
ne (
I)
Un
ità d
i co
mp
ilazio
ne:
•co
sti
tuit
a d
a u
n f
ile s
org
en
te e
dai
file
in
clu
si
med
ian
te d
irett
ive #
inclu
de;
•se i
l fi
le d
a in
clu
dere
no
n è
di li
bre
ria,
il s
uo
no
me v
a
racch
iuso
tra
vir
go
lett
e (
e n
on
fra
pare
nte
si
an
go
lari
).
Esem
pio
://
file
header.
hin
t f1
(in
t);
in
t f2
(in
t);
// file
main
.cpp
#in
clu
de "
head
er.
h"
int
main
(){
f1
(3);
f2(5
);
retu
rn 0
;} //
Unità d
i com
pila
zio
ne r
isultante
int
f1(i
nt)
; i
nt
f2(i
nt)
;in
t m
ain
(){
f1(3
);f2
(5);
re
turn
0;
}
368
14.4
Un
ità d
i co
mp
ilazio
ne (
II)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
i;
// v
isib
ilita
’ a liv
ello
di file
vo
id l
eg
gi(
) //
vis
ibili
ta’ a liv
ello
di file
{co
ut
<<
"In
seri
sci
un
nu
mero
in
tero
" <
< e
nd
l;cin
>>
i;
} vo
id s
cri
vi(
) //
vis
ibili
ta’ a liv
ello
di file
{co
ut
<<
i <
< e
nd
l;} in
t m
ain
()
{le
gg
i();
scri
vi(
);syste
m("
PA
US
E")
;re
turn
0;
} Inseri
sci
un
nu
mero
in
tero
2 2 Pre
mere
un
tasto
per
co
nti
nu
are
. . .
•Id
en
tifi
cato
ri d
i o
gg
ett
i co
n v
isib
ilit
à a
liv
ell
o d
i f
ile
ind
ivid
uan
o o
gg
ett
i co
nd
ivis
i d
a t
utt
e l
e f
un
zio
ni
defi
nit
e n
el fi
le.
369
14.4
Un
ità d
i co
mp
ilazio
ne (
III)
// O
pera
tore
::
un
ari
o (
riso
luzio
ne d
i vis
ibil
ita')
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
i=
1;
//vis
ibili
ta'a
livello
difile
int
main
(){
co
ut
<<
i <
< e
nd
l;//
1{
int
i =
5;
// v
isib
ilita
' lo
cale
co
ut
<<
::i
<<
'\t
' <
< i <
< e
nd
l;//
1 5
{in
t i =
10;
// v
isib
ilita
' lo
cale
co
ut
<<
::i
<<
'\t
' <
< i <
< e
nd
l; // 1 1
0}
} co
ut
<<
::i
<<
en
dl;
// 1
syste
m("
PA
US
E")
;re
turn
0;
} 1 1
5
1
1
01 P
rem
ere
un
tasto
per
co
nti
nu
are
. . .
370
14.5
Sp
azio
di
no
mi
(I)
Sp
azio
di n
om
i:•
Insie
me d
i d
ich
iara
zio
ni e d
efi
niz
ion
i ra
cch
iuse t
ra
pare
nte
si
gra
ffe,
og
nu
na d
ell
e q
uali
in
tro
du
ce
dete
rmin
ate
en
tità
dett
e m
em
bri
.•
Pu
ò e
ssere
dic
hia
rato
so
lo a
liv
ell
o d
i fi
le o
all
’in
tern
o d
i u
n a
ltro
sp
azio
dei
no
mi.
•G
li id
en
tifi
cato
ri r
ela
tivi
ad
un
o s
pazio
dei n
om
i so
no
vis
ibil
i d
al
pu
nto
in
cu
i so
no
dic
hia
rati
fin
o a
lla f
ine
dell
o s
pazio
dei n
om
i.
nam
esp
ace u
no
{str
uct
st
{in
t a;
do
ub
le d
; };
int
n;
vo
id f
f(in
t a)
{/*…
*/}
//…
} nam
esp
ace d
ue
{str
uct
st
{in
t a;
do
ub
le d
;};
} int
main
(){
un
o::
st
ss1;
usin
g n
am
esp
ace d
ue;
//dirett
iva
st
ss2;
}
371
14.5
Sp
azio
di
no
mi
(II)
nam
esp
ace u
no
{str
uct
st
{in
t a;
do
ub
le d
; };
int
n;
vo
id f
f(in
t a)
{/*…
*/}
//…
} nam
esp
ace d
ue
{str
uct
st
{in
t a;
do
ub
le d
;};
} int
main
(){
un
o::
st
ss1;
usin
g n
am
esp
ace u
no
;u
sin
g n
am
esp
ace d
ue;
//st
ss2;
ER
RO
RE
un
o::
st
ss2;
} L’u
so
dell
a d
irett
iva u
sin
g n
am
esp
ace p
uò
gen
era
re
dell
e a
mb
igu
ità.
372
14.5
Sp
azio
di
no
mi
(III
)
Lo
sp
azio
dei
no
mi è a
pert
o, cio
è è
po
ssib
ile u
sare
più
vo
lte l
o s
tesso
id
en
tifi
cato
re d
i sp
azio
dei n
om
i in
su
ccessiv
e d
ich
iara
zio
ni,
per
inclu
derv
i n
uo
vi
mem
bri
.
Sp
azio
dei n
om
i g
lob
ali
:co
sti
tuit
o d
all
e d
efi
niz
ion
i e
dic
hia
razio
ni a l
ivell
o d
i fi
le.
Per
usare
un
o s
pecif
ico
id
en
tifi
cato
re s
i p
uò
usare
la
dic
hia
razio
ne u
sin
g.
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
nam
esp
ace u
no
{in
t i =
2,
j =
3;
} int
i =
4,
j =
5;
//S
pazio
glo
bale
int
main
(){
usin
g :
: i;
usin
g u
no
::
j;co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;//
usin
g u
no
::i;
E
RR
OR
E:
ri-d
ichia
razio
ne d
i i
{u
sin
g u
no
::i;
co
ut
<<
i <
< '\t
' <
< :
:j <
< e
nd
l;} syste
m("
PA
US
E")
;re
turn
0;
} 4
3
2
5
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
373
14.6
Co
lleg
am
en
to (
I)
Pro
gra
mm
a:
•p
uò
essere
fo
rmato
da p
iù u
nit
à d
i co
mp
ilazio
ne,
ch
e v
en
go
no
svil
up
pate
sep
ara
tam
en
te e
su
ccessiv
am
en
te c
oll
eg
ate
per
form
are
un
fil
e
eseg
uib
ile.
Co
lleg
am
en
to:
•u
n id
en
tifi
cato
re h
a c
oll
eg
am
en
to in
tern
ose s
i ri
feri
sce a
un
a e
nti
tà a
ccessib
ile s
olo
da q
uell
a u
nit
à
di co
mp
ilazio
ne;
–u
no
ste
sso
id
en
tifi
cato
re c
he h
a c
oll
eg
am
en
to
inte
rno
in
più
un
ità d
i co
mp
ilazio
ne s
i ri
feri
sce
in o
gn
un
a a
un
a e
nti
tà d
ivers
a;
•in
un
a u
nit
à d
i co
mp
ilazio
ne, u
n id
en
tifi
cato
re h
a
co
lleg
am
en
to e
ste
rno
se s
i ri
feri
sce a
un
a e
nti
tà
accessib
ile a
nch
e a
d a
ltre
un
ità d
i co
mp
ilazio
ne;
–ta
le e
nti
tà d
eve e
ssere
un
ica in
tu
tto
il
pro
gra
mm
a.
Reg
ola
defa
ult
:
•g
li id
en
tifi
cato
ri c
on
vis
ibil
ità l
ocale
han
no
co
lleg
am
en
to in
tern
o;
•g
li id
en
tifi
cato
ri c
on
vis
ibil
ità a
liv
ell
o d
i fi
le h
an
no
co
lleg
am
en
to e
ste
rno
(a m
en
o c
he n
on
sia
no
d
ich
iara
ti c
on
la p
aro
la c
hia
ve c
on
st)
.
374
14.6
Co
lleg
am
en
to (
II)
Og
gett
i e f
un
zio
ni c
on
co
lleg
am
en
to e
ste
rno
:
•p
osso
no
essere
uti
lizzati
in
alt
re u
nit
à d
i co
mp
ilazio
ne;
•in
cia
scu
na u
nit
à in
cu
i ven
go
no
uti
lizzati
devo
no
essere
dic
hia
rati
(an
ch
e p
iù v
olt
e).
Og
gett
o:
•vie
ne s
olo
dic
hia
rato
se s
i u
sa l
a p
aro
la c
hia
ve
exte
rn(e
se n
on
vie
ne s
pecif
icato
nessu
n v
alo
re
iniz
iale
);
•vie
ne a
nch
e d
efi
nit
o s
e n
on
vie
ne u
sata
la p
aro
la
ch
iave e
xte
rn(o
se v
ien
e s
pecif
icato
un
valo
re
iniz
iale
).
Fu
nzio
ne:
•vie
ne s
olo
dic
hia
rata
se s
i sp
ecif
ica s
olo
l'in
testa
zio
ne (
si
pu
ò a
nch
e u
tili
zzare
la p
aro
la
ch
iave e
xte
rn,
nel caso
in
cu
i la
defi
niz
ion
e s
i tr
ovi
in
un
alt
ro f
ile);
•vie
ne a
nch
e d
efi
nit
a s
e s
i sp
ecif
ica a
nch
e i
l co
rpo
.
Osserv
azio
ne:
•an
alo
gam
en
te a
gli
og
gett
i co
n v
isib
ilit
à a
liv
ell
o d
i fi
le (
og
gett
i co
nd
ivis
i),
an
ch
e g
li o
gg
ett
i co
n
co
lleg
am
en
to e
ste
rno
(o
gg
ett
ig
lob
ali
) p
erm
ett
on
o l
a
co
nd
ivis
ion
e d
i in
form
azio
ni fr
a f
un
zio
ni.
375
14.6
Co
lleg
am
en
to (
III)
// -
----
----
----
----
----
----
-fi
le f
ile1.c
pp
----
----
----
----
----
----
-//
int
a =
1;
// c
olle
gam
ento
este
rno
co
nst
int
N =
0;
// c
onst,
colle
gam
ento
inte
rno
sta
tic i
nt
b =
10;
// s
tatic, colle
gam
ento
inte
rno
// c
olle
gam
ento
este
rno
vo
id f
1(i
nt
a)
{//
a -
colle
gam
ento
inte
rno
int
k;
// k
-colle
gam
ento
inte
rno
/* .
.. *
/} //
sta
tic, colle
gam
ento
inte
rno
sta
tic v
oid
f2()
{
/* .
.. *
/} str
uct
pu
nto
// c
olle
gam
ento
inte
rno (
dic
hia
razio
ne)
{d
ou
ble
x;
do
ub
le y
;}; p
un
to p
1;
// c
olle
gam
ento
este
rno (c
on
tin
ua ...
) 376
14.6
Co
lleg
am
en
to (
IV)
// -
----
----
----
----
----
----
---
file
fil
e2.c
pp
----
----
----
----
----
----
----
//#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
exte
rn i
nt
a;
// s
olo
dic
hia
razio
ne
vo
id f
1(i
nt)
;//
solo
dic
hia
razio
ne
vo
id f
2()
; //
solo
dic
hia
razio
ne
vo
id f
3()
; //
solo
dic
hia
razio
ne
do
ub
le f
4(d
ou
ble
, d
ou
ble
);//
definiz
ione m
ancante
// O
K, non u
tiliz
zata
int
main
(){
co
ut
<<
a <
< e
nd
l;//
OK
, 1
exte
rn i
nt
b;
// d
ichia
razio
ne
//co
ut
<<
b <
< e
nd
l;E
RR
OR
E!
f1(a
);//
OK
//f2
();
ER
RO
RE
!//
f3()
;E
RR
OR
E!
//p
un
to p
2;
ER
RO
RE
! punto
non d
ichia
rato
//
p1.x
= 1
0;
ER
RO
RE
! P
1 n
on d
ichia
rato
syste
m("
PA
US
E")
;re
turn
0;
} Ste
sso
tip
o in
più
un
ità d
i co
mp
ilazio
ne:
•vie
ne v
eri
ficata
so
lo l’u
gu
ag
lian
za t
ra g
li
iden
tifi
cato
ri d
el ti
po
;
•se l
’org
an
izzazio
ne in
tern
a n
on
èla
ste
ssa,
si
han
no
err
ori
lo
gic
i a t
em
po
di esecu
zio
ne.
377
14.8
Cla
ssi d
i m
em
ori
zzazio
ni
// O
gg
ett
i d
i cla
sse a
uto
mati
ca e
di cla
sse s
tati
ca
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
sta
tic i
nt
m;
//
iniz
ializ
zato
a z
ero
int
co
nta
Ch
iam
ate
Err
ata
()
{//
ER
RA
TA
!in
t n
= 0
;//
di cla
sse a
uto
matica
retu
rn +
+n
;} in
t co
nta
Ch
iam
ate
()
{sta
tic i
nt
n =
0;
// d
i cla
sse s
tatica
++
m;
retu
rn +
+n
;} in
t m
ain
(){
for
(in
t i =
0;
i <
3;
i++
)co
ut
<<
co
nta
Ch
iam
ate
Err
ata
() <
< e
nd
l;fo
r (i
nt
i =
0;
i <
3;
i++
){
co
ut
<<
co
nta
Ch
iam
ate
() <
< '\t
'; c
ou
t <
< m
<<
en
dl;
}syste
m("
PA
US
E")
;re
turn
0;
} 1 1 1 1
1
2
2
3
3
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
378
14.8
Cla
ssi d
i m
em
ori
zzazio
ni
// A
tten
zio
ne:
ord
ine (
pu
nti
di seq
uen
za)
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
sta
tic i
nt
m;
//
iniz
ializ
zato
a z
ero
int
co
nta
Ch
iam
ate
Err
ata
()
{//
ER
RA
TA
!in
t n
= 0
;//
di cla
sse a
uto
matica
retu
rn +
+n
;} in
t co
nta
Ch
iam
ate
()
{sta
tic i
nt
n =
0;
// d
i cla
sse s
tatica
++
m;
retu
rn +
+n
;} in
t m
ain
(){
for
(in
t i =
0;
i <
3;
i++
)co
ut
<<
co
nta
Ch
iam
ate
Err
ata
() <
< e
nd
l;fo
r (i
nt
i =
0;
i <
3;
i++
)co
ut
<<
m <
< '\t
' <
< c
on
taC
hia
mate
() <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 1 1 1 1
1
2
2
3
3
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
379
14.1
0 E
ffett
i co
llate
rali
(I)
// V
ari
ab
ili g
lob
ali
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
int
a =
10,
b =
100;
// Incre
menta
il m
aggio
re.
Restitu
isce il m
aggio
renon
// incre
menta
to.
int
incre
mM
ag
(){
if (
a >
b)
re
turn
a+
+;
els
e
retu
rn b
++
;} in
t m
ain
(){
co
ut
<<
in
cre
mM
ag
() <
< e
nd
l;co
ut
<<
a <
< '\t
' <
< b
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
} 100
10
101
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
380
14.1
0 E
ffett
i co
llate
rali
(II
)
// A
rgo
men
ti d
i ti
po
pu
nta
tore
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
// Incre
menta
il m
aggio
re.
Restitu
isce il m
aggio
renon
// incre
menta
to.
int
incre
mM
ag
(in
t*p
a, in
t*p
b)
{if
(*p
a >
*p
b)
re
turn
(*p
a)+
+;
els
e re
turn
(*p
b)+
+;
} int
main
(){
int
i =
10,
j =
100;
co
ut
<<
in
cre
mM
ag
(&i,
&j)
<<
en
dl;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 100
10
101
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
381
14.1
0 E
ffett
i co
llate
rali
(II
I)
// P
rob
lem
a:
pro
pri
eta
' asso
cia
tiva
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
// Incre
menta
il m
aggio
re.
Restitu
isce il m
aggio
renon
// incre
menta
to.
int
incre
mM
ag
(in
t*p
a, in
t*p
b)
{if
(*p
a >
*p
b)
re
turn
(*p
a)+
+;
els
e re
turn
(*p
b)+
+;
} int
main
(){
int
i =
10,
j =
100;
co
ut
<<
in
cre
mM
ag
(&i,
&j)
+ in
cre
mM
ag
(&i,
&j)
;co
ut
<<
en
dl;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;i =
10,
j =
100;
co
ut
<<
in
cre
mM
ag
(&i,
&j)
-in
cre
mM
ag
(&i,
&j)
;co
ut
<<
en
dl;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 201
10
102
-1 10
102
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
382
14.1
0 E
ffett
i co
llate
rali
(IV
)
// P
rob
lem
a:
ord
ine d
i valu
tazio
ne d
eg
li o
pera
nd
i
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
// Incre
menta
il m
aggio
re.
Restitu
isce il m
aggio
renon
// incre
menta
to.
int
incre
mM
ag
(in
t*p
a, in
t*p
b)
{if
(*p
a >
*p
b)
re
turn
(*p
a)+
+;
els
e re
turn
(*p
b)+
+;
} int
main
(){
int
i =
10,
j =
100;
co
ut
<<
i +
j +
in
cre
mM
ag
(&i,
&j)
<<
en
dl;
co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;i =
10,
j =
100;
co
ut
<<
in
cre
mM
ag
(&i,
&j)
+ i +
j <
< e
nd
l;co
ut
<<
i <
< '\t
' <
< j <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 210
10
101
211
10
101
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
383
14.1
0 E
ffett
i co
llate
rali
(V
)
// P
rob
lem
a:
ott
imiz
zazio
ne
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>u
sin
g n
am
esp
ace s
td;
// Incre
menta
il m
aggio
re.
Restitu
isce il m
aggio
renon
// incre
menta
to.
int
incre
mM
ag
(in
t*p
a, in
t*p
b)
{if
(*p
a >
*p
b)
re
turn
(*p
a)+
+;
els
e re
turn
(*p
b)+
+;
} int
main
(){
int
i =
10,
j =
100,
r1,
r2;
r1 =
i +
j +
in
cre
mM
ag
(&i,
&j)
;
// 2
10
r2 =
i +
j +
in
cre
mM
ag
(&i,
&j)
;
// 2
12
co
ut
<<
r1 <
< '\t
' <
< r
2 <
< e
nd
l;i =
10,
j =
100;
r1 =
i +
j +
in
cre
mM
ag
(&i,
&j)
;r2
= r
1;
//
210 2
10
co
ut
<<
r1 <
< '\t
' <
< r
2 <
< e
nd
l;syste
m("
PA
US
E")
;re
turn
0;
} 210
2
12
210
2
10
Pre
mere
un
tasto
per
co
nti
nu
are
. . .
384
14.1
1 M
od
uli
(I)
Mo
du
lo:
•p
art
e d
i p
rog
ram
ma c
he s
vo
lge u
na p
art
ico
lare
fu
nzio
nali
tà e
ch
e r
isie
de s
u u
no
o p
iùfi
le;
•m
od
uli
serv
ito
rie m
od
uli
cli
en
ti.
Mo
du
lo s
erv
ito
re:
•o
ffre
(esp
ort
a)
riso
rse d
i vari
a n
atu
ra, co
me f
un
zio
ni,
vari
ab
ili
(glo
bali
) e t
ipi.
•
co
sti
tuit
o n
orm
alm
en
te d
a d
ue f
ile (
co
n e
ste
nsio
ne h
e c
pp
,ri
sp
ett
ivam
en
te):
–in
tes
tazio
ne
o in
terf
ac
cia
(d
ich
iara
zio
ne
de
i s
erv
izi
off
ert
i);
–re
alizza
zio
ne
.
Sep
ara
zio
ne f
ra i
nte
rfaccia
e r
eali
zzazio
ne:
•h
a p
er
sco
po
l’o
ccu
ltam
en
to d
ell
’in
form
azio
ne
(in
form
ati
on
hid
ing
);
–s
em
plifi
ca
le
dip
en
de
nze
fra
i m
od
uli;
–p
erm
ett
e d
i m
od
ific
are
la
re
alizza
zio
ne
di
un
m
od
ulo
s
en
za
in
flu
en
za
re i
l fu
nzio
na
me
nto
de
i s
uo
i c
lie
nti
.
Mo
du
lo c
lien
te:
•u
tili
zza (
imp
ort
a)
riso
rse o
ffert
e d
ai
mo
du
liserv
ito
ri
(in
clu
de il fi
le d
i in
testa
zio
ne d
i q
uesti
);•
vie
ne s
cri
tto
sen
za c
on
oscere
i d
ett
ag
li r
ela
tivi
all
a
reali
zzazio
ne d
ei m
od
uli
serv
ito
ri.
385
14.1
1 M
od
uli
(II)
// E
SE
MP
IO P
ILA
// M
OD
ULO
SE
RV
ER
// file
pila
.hty
ped
ef
in
t T
;co
nst
int
DIM
= 5
;str
uct
pil
a
{in
t to
p;
T s
tack[D
IM];
}; vo
id i
nip
(pil
a&
pp
);b
oo
l em
pty
(co
nst
pil
a&
pp
);b
oo
l fu
ll(c
on
st
pil
a&
pp
);b
oo
l p
ush
(pil
a&
pp
, T
s);
bo
ol p
op
(pil
a&
pp
, T
& s
);vo
id s
tam
pa(c
on
st
pil
a&
pp
);
// file
pila
.cpp
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>#in
clu
de "
pil
a.h
"u
sin
g n
am
esp
ace s
td;
//in
izia
lizzazio
ne d
ella
pila
vo
id i
nip
(pil
a&
pp
){
pp
.to
p =
-1;
} ….
386
14.1
1 M
od
uli
(III
)
// E
SE
MP
IO P
ILA
// M
OD
ULO
CLIE
NT
// file
pila
Main
.cpp
#in
clu
de <
cstd
lib
>#in
clu
de <
iostr
eam
>#in
clu
de "
pil
a.h
"u
sin
g n
am
esp
ace s
td;
int
main
(){
pil
a s
t;in
ip(s
t);
T n
um
;if
(em
pty
(st)
) co
ut
<<
"P
ila v
uo
ta"
<<
en
dl;
for
(in
t i=
0;
i <
DIM
;i+
+)
if (
pu
sh
(st,
DIM
-i)
)co
ut
<<
"In
seri
to "
<<
DIM
-i <
<
". V
alo
re d
i to
p:
" <
<st.
top
<<
en
dl;
els
e
cerr
<<
"In
seri
men
to d
i "
<<
i <
< "
fall
ito
" <
<
en
dl;
if (
full
(st)
) co
ut
<<
"P
ila p
ien
a"
<<
en
dl;
syste
m("
PA
US
E")
;re
turn
0;
}
387
14.1
1.1
Astr
azio
ni
pro
ced
ura
li
Astr
azio
ni
pro
ced
ura
li.
–i m
od
uli
serv
ito
ri m
ett
on
o a
dis
po
siz
ion
e d
ei
mo
du
li c
lien
tiu
n in
sie
me d
i fu
nzio
ni;
–le
dic
hia
razio
ni d
i ta
li f
un
zio
ni si
tro
van
o i
n u
n
file
di in
testa
zio
ne c
he v
ien
e i
nclu
so
dai
mo
du
li
cli
en
ti;
–la
reali
zzazio
ne d
i ta
li f
un
zio
ni si
tro
va i
n u
n f
ile
div
ers
o (
ch
e n
on
vie
ne i
nclu
so
).
–ta
li f
un
zio
ni ven
go
no
usate
sen
za c
he s
ia
necessari
a a
lcu
na c
on
oscen
za d
ell
a l
oro
str
utt
ura
in
tern
a.
Esem
pio
:
–le
fu
nzio
ni d
i li
bre
ria p
er
l’ela
bo
razio
ne d
ell
e
str
ing
he s
on
o c
on
ten
ute
in
un
mo
du
lo il cu
i fi
le
di in
testa
zio
ne è
<cstr
ing
>, e i
l lo
ro u
tili
zzo
no
n
rich
ied
e a
lcu
na c
on
oscen
za s
ull
a l
oro
re
ali
zzazio
ne.
388
14.1
1.1
Tip
i d
i d
ato
astr
att
o
Tip
i d
i d
ato
astr
att
i:•p
rin
cip
io d
ell
’occu
ltam
en
to d
ell
’in
form
azio
ne:
–l’
org
an
izzazio
ine in
tern
a d
el
tip
o n
on
deve e
ssere
accessib
ile a
i m
od
uli
cli
en
ti;
–i m
od
uli
cli
en
ti p
osso
no
defi
nir
e o
gg
ett
i d
i q
uel
tip
o, e a
cced
erv
iso
ltan
to a
ttra
vers
o l
e f
un
zio
ni
dic
hia
rate
nell
’in
testa
zio
ne,
se
nza
po
ss
ibilit
à d
i a
cc
ed
ere
alla
lo
ro
org
an
izza
zio
ne
in
tern
a.
Le s
ole
regole
di vis
ibili
tà e
colle
gam
ento
del lin
guaggio
non
consento
no d
i avere
moduli
che r
ealiz
zano c
om
piu
tam
ente
tipi di dato
astr
att
i.
#in
clu
de "
pil
a.h
"in
t m
ain
()
{p
ila s
t;in
ip(s
t);
pu
sh
(st,
1);
co
ut
<<
st.
top
<<
en
dl;
// A
TT
EN
ZIO
NE
!st.
top
= 1
0;
// A
TT
EN
ZIO
NE
!//
…} #in
clu
de "
pil
a.h
"in
t f(
pil
a&
p)
{p.t
op
= 5
;}
// A
TT
EN
ZIO
NE
!in
t m
ain
()
{p
ila s
t;in
ip(s
t);
f(st)
;//
...
}
389
390
16.2
Tip
i cla
sse (
I)
Nell
’esem
pio
pre
ced
en
te,
la s
tru
ttu
ra i
nte
rna d
ell
a p
ila è
vis
ibil
e a
i m
od
uli
ch
e u
tili
zzan
o ista
nze d
ell
a p
ila. In
q
uesto
mo
do
no
n s
i ri
esce a
reali
zzare
co
mp
iuta
men
te i
l ti
po
di d
ato
astr
att
o.
Per
ovvia
re a
qu
esto
pro
ble
ma,
il C
++
mett
e a
d
isp
osiz
ion
e le c
lassi.
#in
clu
de <
iostr
eam
>u
sin
gn
am
esp
ace
std
;
typ
ed
ef
int
T;
co
nst
int
DIM
= 5
;cla
ss
pil
a
{
int
top
; T
sta
ck[D
IM];
pu
bli
c:
vo
idin
ip()
;b
oo
lem
pty
();
bo
olfu
ll()
;b
oo
lp
ush
(T s
);b
oo
lp
op
(T&
s);
vo
idsta
mp
a()
;}; in
tm
ain
()
{p
ila s
t;st.
inip
();
st.
pu
sh
(1);
st.
top
= 1
0;
// E
RR
OR
E!
// 'i
ntpila
::to
p' i
sprivate
within
this
conte
xt
}
391
16.2
Tip
i cla
sse (
II)
basic
-cla
ss-t
ype-d
ecla
ration
cla
ss-t
ype-s
pecifie
r ;
cla
ss-t
ype-s
pecifie
r
cla
ss
identifier|
op
t{
cla
ss-e
lem
ent-
seq
}cla
ss-e
lem
ent
access-indic
ato
r|o
pt
cla
ss-m
em
ber-
section
access-indic
ato
r
access-s
pecifie
r :
access-s
pecifie
r
pri
vate
pro
tecte
dp
ub
lic
In g
en
ere
uti
lizzere
mo
la f
orm
a s
em
pli
ficata
seg
uen
te:
cla
ss n
om
e{
part
e p
rivata
pro
tecte
d:
part
e p
rote
tta
pu
bli
c:
part
e p
ub
bli
ca
}; Un
mem
bro
di u
na c
lasse p
uò
essere
:-
un
tip
o (
en
um
era
zio
ne o
str
utt
ura
);-
un
cam
po
dati
(o
gg
ett
o n
on
in
izia
lizzato
);-
un
a f
un
zio
ne (
dic
hia
razio
ne o
defi
niz
ion
e);
-u
na c
lasse (
div
ers
a d
a q
uell
a d
ell
a c
lasse a
cu
i ap
part
ien
e).
392
16.2
Tip
i cla
sse (
III)
// N
um
eri C
om
ple
ssi(p
art
e r
eale
, part
e im
magin
aria)
#in
clu
de<
iostr
eam
>u
sin
g n
am
esp
ace s
td;
cla
ss c
om
ple
sso
{d
ou
ble
re,
im;
pu
bli
c:
vo
id i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i)
{re =
r;
im=
i;}
do
ub
le r
eale
() {
retu
rn r
e;}
do
ub
le im
mag
() {
retu
rn i
m;}
/* .
.. *
/vo
id s
cri
vi(
) {c
ou
t<
< '('
<<
re <
< "
, "
<<
im
<<
')'
;}}; in
tm
ain
()
{co
mp
lesso
c1,
c2;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
//in
izia
lizzazio
ne
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c2.i
niz
_co
mp
l(10.0
, -1
0.0
);c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(10,
-10)
co
mp
lesso
* cp
= &
c1;
cp
->scri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
retu
rn 0
;} (1
, -1
)(1
0,
-10)
(1,
-1)
// E
sem
pio
Num
eri C
om
ple
ssi
#in
clu
de<
iostr
eam
>u
sin
g n
am
esp
ace s
td;
cla
ss c
om
ple
sso
{ pu
bli
c:
vo
id i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i)
{re =
r;
im=
i;}
do
ub
le r
eale
() {
retu
rn r
e;}
do
ub
le im
mag
() {
retu
rn i
m;}
/* .
.. *
/vo
id s
cri
vi(
) {c
ou
t<
< '('
<<
re <
< "
, "
<<
im
<<
')'
;}p
rivate
:d
ou
ble
re,
im;
}; int
main
()
{co
mp
lesso
c1,
c2;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c2.i
niz
_co
mp
l(10.0
, -1
0.0
);c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(10,
-10)
co
mp
lesso
* cp
= &
c1;
cp
->scri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
retu
rn 0
;} (1
, -1
)(1
0,
-10)
(1,
-1)
393
16.2
Tip
i cla
sse (
IV)
394
16.2
Tip
i cla
sse (
V)
// N
um
eri C
om
ple
ssi(r
appre
senta
zio
ne
pola
re)
#in
clu
de<
iostr
eam
>#in
clu
de<
cm
ath
>u
sin
g n
am
esp
ace s
td;
cla
ss c
om
ple
sso
{d
ou
ble
mo
d, arg
;p
ub
lic:
vo
id i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i)
{mo
d =
sq
rt(r
*r +
i*i
); a
rg=
ata
n(i
/r);
}d
ou
ble
reale
() {
retu
rn m
od
*co
s(a
rg);
}d
ou
ble
im
mag
() {
retu
rn m
od
*sin
(arg
);}
/* .
.. *
/vo
id s
cri
vi(
) {c
ou
t<
< '('
<<
reale
() <
< "
, "
<<
im
mag
() <
< ')'
;}}; in
tm
ain
()
{co
mp
lesso
c1,
c2;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c2.i
niz
_co
mp
l(10.0
, -1
0.0
);c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(10,
-10)
co
mp
lesso
* cp
= &
c1;
cp
->scri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
retu
rn 0
;} (1
, -1
)(1
0,
-10)
(1,
-1)
395
16.2
Tip
i cla
sse (
VI)
Le f
un
zio
nim
em
bro
defi
nit
e n
ell
ad
ich
iara
zio
ne
di u
na
cla
sse
so
no
fun
zio
niin
lin
e.
Le f
un
zio
nim
em
bro
po
sso
no
an
ch
eessere
defi
nit
e
este
rnam
en
teu
tili
zzan
do
l’o
pera
tore
di ri
so
luzio
ne
di
vis
ibil
ita’.
#in
clu
de<
iostr
eam
>u
sin
g n
am
esp
ace s
td;
cla
ss c
om
ple
sso
{ pu
bli
c:
vo
id i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i);
d
ou
ble
reale
();
do
ub
le im
mag
();
/* .
.. *
/vo
id s
cri
vi(
);p
rivate
:d
ou
ble
re,
im;
}; vo
id c
om
ple
sso
:: i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i)
{re =
r;
im=
i;}
do
ub
le c
om
ple
sso
:: r
eale
()
{retu
rn r
e;}
do
ub
le c
om
ple
sso
::im
mag
()
{retu
rn i
m;}
vo
id c
om
ple
sso
::scri
vi(
) {c
ou
t<
< '('
<<
re <
< "
, "
<<
im
<<
')'
;}
396
16.3
Op
era
zio
ni
su
og
gett
i cla
sse
Un
og
gett
oap
part
en
en
tead
un
acla
sse
sich
iam
ao
gg
ett
ocla
sse
o ista
nza
dell
a c
lasse
cla
ss c
om
ple
sso
{/*…
*/};
int
main
()
{co
mp
lesso
c1;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
co
mp
lesso
c2 =
c1,
c3(c
2);
//
Iniz
ializ
zazio
ne
-ricopia
tura
mem
bro
a m
em
bro
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
co
mp
lesso
*pc1 =
new
co
mp
lesso
(c1);
pc1->
scri
vi(
); c
ou
t<
< e
nd
l;
// (
1,-
1)
co
mp
lesso
* p
c2 =
&c1;
pc2->
scri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
retu
rn 0
;} (1
, -1
)(1
, -1
)(1
, -1
)(1
, -1
)(1
, -1
)
cla
ss c
om
ple
sso
{/*…
*/};
co
mp
lesso
so
mm
a(c
om
ple
sso
a,
co
mp
lesso
b)
{ co
mp
lesso
s;
s.i
niz
_co
mp
l(a.r
eale
()+
b.r
eale
(),
a.i
mm
ag
() +
b.i
mm
ag
());
retu
rn s
;} in
tm
ain
()
{co
mp
lesso
c1,
c2,
c3;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c2 =
c1;
//A
ssegnam
ento
-ricopia
tura
mem
bro
a m
em
bro
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
c3 =
so
mm
a(c
1,c
2);
// o
ggett
iarg
om
ento
di fu
nzio
ni
// e
restitu
itida f
unzio
ni
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(2,
-2)
retu
rn 0
;} (1
, -1
)(1
, -1
)(2
, -2
)
AT
TE
NZ
ION
E:
no
n e
sis
ton
oalt
reo
pera
zio
nip
red
efi
nit
e
397
16.3
Op
era
zio
ni
su
og
gett
i cla
sse
398
16.4
Pu
nta
tore
th
is (
I)
Nell
a d
efi
niz
ion
ed
i u
na
fun
zio
ne
mem
bro
, il
gen
eri
co
og
gett
oa c
ui la
fu
nzio
ne
vie
ne
ap
pli
cata
pu
ò e
ssere
ri
feri
to t
ram
ite i
l p
un
tato
re c
osta
nte
pre
defi
nit
o t
his
cla
ss c
om
ple
sso
{/*…
*/ co
mp
lesso
scala
(do
ub
le s
)//
restitu
isce
un v
alo
re{
re *
= s
; im
*= s
; re
turn
*th
is;
}}; in
tm
ain
()
{co
mp
lesso
c1;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c1.s
cala
(2);
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(2,
-2)
co
mp
lesso
c2;
c2.i
niz
_co
mp
l(1.0
, -1
.0);
c2.s
cala
(2).
scala
(2);
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(2,
-2)
retu
rn 0
;} (2
, -2
)(2
, -2
)
399
16.4
Pu
nta
tore
th
is (
II)
cla
ss c
om
ple
sso
{/*…
*/ co
mp
lesso
& s
cala
(do
ub
le s
) //
restitu
isce
un r
iferim
ento
{re
*=
s;
im*=
s;
retu
rn *
this
;}
}; int
main
()
{co
mp
lesso
c1;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c1.s
cala
(2);
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(2,
-2)
co
mp
lesso
c2;
c2.i
niz
_co
mp
l(1.0
, -1
.0);
c2.s
cala
(2).
scala
(2);
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(4,
-4)
retu
rn 0
;} (2
, -2
)(4
, -4
)
400
16.5
Vis
ibil
ità a
liv
ell
o d
i cla
sse
(I)
Un
a c
lasse i
nd
ivid
ua u
n c
am
po
di vis
ibil
ità.
–G
li id
en
tifi
cato
ri d
ich
iara
ti a
ll’i
nte
rno
di u
na c
lasse
so
no
vis
ibil
i d
al
pu
nto
dell
a lo
ro d
ich
iara
zio
ne f
ino
all
a f
ine d
ell
a c
lasse s
tessa.
–N
el
co
rpo
dell
e f
un
zio
ni m
em
bro
so
no
vis
ibil
i tu
tti
gli
id
en
tifi
cato
ri p
resen
ti n
ell
a c
lasse (
an
ch
e q
uell
i n
on
an
co
ra d
ich
iara
ti).
–S
e n
ell
a c
lasse v
ien
e r
iuti
lizzato
un
id
en
tifi
cato
re
dic
hia
rato
all
’este
rno
dell
a c
lasse,
la d
ich
iara
zio
ne
fatt
a n
ell
a c
lasse n
asco
nd
e q
uell
a p
iù e
ste
rna.
–A
ll’e
ste
rno
dell
a c
lasse p
osso
no
essere
resi
vis
ibil
i m
ed
ian
te l
’op
era
tore
di ri
so
luzio
ne d
i vis
ibil
ità :
: ap
pli
cato
al
no
me d
ell
a c
lasse:
•L
e f
un
zio
ni m
em
bro
, q
uan
do
ven
go
no
defi
nit
e;
•U
n t
ipo
o u
n e
nu
mera
tore
, se d
ich
iara
ti n
ell
a
part
e p
ub
bli
ca d
ell
a c
lasse
•M
em
bri
sta
tici
–L
’op
era
tore
di vis
ibil
ità n
on
pu
ò e
ssere
uti
lizzato
per
i cam
pi
dati
no
n s
tati
ci.
401
16.5
Vis
ibil
ità a
liv
ell
o d
i cla
sse
(II)
cla
ss g
rafi
ca
{//
...
pu
bli
c:
en
um
co
lore
{ r
osso
, verd
e,
blu
};
}; cla
ss t
raff
ico
{//
...
pu
bli
c:
en
um
co
lore
{ r
osso
, g
iall
o, verd
e }
;co
lore
sta
to()
;//
...
}; traff
ico
::co
lore
tra
ffic
o::
sta
to()
{ /
* ..
. */
}
// ...
gra
fica::
co
lore
pu
nto
;tr
aff
ico
::co
lore
sem
afo
ro;
int
main
(){
// ...
pu
nto
= g
rafi
ca::
rosso
;sem
afo
ro =
tra
ffic
o::
rosso
;//
…}
402
16.5
Vis
ibil
ità a
liv
ell
o d
i cla
sse
(III
)
Nell
ad
ich
iara
zio
ne
di
un
acla
sse
si
pu
òd
ich
iara
reu
n’a
ltra
cla
sse
(cla
sse
an
nid
ata
).In
qu
esto
caso
,p
er
rife
rire
me
mb
rid
ell
acla
sse
an
nid
ata
este
rnam
en
teall
acla
sse
ch
ela
co
nti
en
ed
evo
no
essere
us
ati
du
eo
pera
tori
diri
so
luzio
ne
divis
ibil
ità.
Nessu
na
dell
ed
ue
cla
ssi
ha
dir
itti
di
acces
so
all
ap
art
ep
rivata
dell
’alt
ra.
cla
ss A
{
cla
ss B
{in
t x;
pu
bli
c:
vo
id i
niz
_B
(in
t);
}; int
y;
pu
bli
c:
vo
id i
niz
_A
();
}; vo
id A
::in
iz_
A()
{ y =
0;
}vo
id A
::B
::in
iz_B
(in
t n
){x
= n
;}
//vo
id A
::in
iz_
A()
{x =
3;
} E
RR
OR
E:
A n
on p
uò a
ccedere
// a
lla p
art
e p
rivata
di B
// v
oid
A::
B::
iniz
_B
(in
t n
){y =
n;}
// E
RR
OR
E:
B n
on p
uo’
// a
ccedere
alla
part
e p
rivata
//
di A
403
16.6
Mo
du
lari
tà e
ric
om
pil
azio
ne (
I)
L’u
so
dell
e c
lassi
perm
ett
e d
i scri
vere
pro
gra
mm
i in
cu
i l’
inte
razio
ne t
ra m
od
uli
è l
imit
ata
all
e i
nte
rfacce.
Qu
an
do
si
mo
dif
ica la p
art
e d
ati
di u
na c
lasse,
an
ch
e s
e
gli
alt
ri m
od
uli
uti
lizzan
o s
olo
l’i
nte
rfaccia
, si
ren
de
necessari
a l
a r
ico
mp
ilazio
ne d
ei m
od
uli
. In
fatt
i, s
e i
n u
n
mo
du
lo c
lien
te v
ien
e d
efi
nit
o u
n o
gg
ett
o c
lasse,
il
co
mp
ilato
re h
a b
iso
gn
o d
i sap
ere
la d
imen
sio
ne
dell
’og
gett
o.
Ai
fin
i d
ell
a r
ico
mp
ila
zio
ne
no
n è
ap
pro
pri
ato
s
ep
ara
re u
na
cla
ss
e i
n in
terf
ac
cia
e s
tru
ttu
ra i
nte
rna
, m
a p
iutt
os
to e
ffe
ttu
are
un
a s
ud
div
isio
ne
in
fil
e.
Un
fil
e d
i in
tes
tazio
ne
ch
e c
on
tie
ne
la
dic
hia
razio
ne
d
ell
a c
las
se
e d
eve
es
se
re i
nc
lus
o i
n t
utt
i i m
od
uli
c
lie
nte
.
Un
fil
e d
i re
ali
zza
zio
ne
ch
e c
on
tie
ne
tu
tte
le
d
efi
niz
ion
i d
ell
e f
un
zio
ni m
em
bro
.
La
mo
dif
ica
di u
n f
ile
di in
tes
tazio
ne
ric
hie
de
la
ri
co
mp
ila
zio
ne
di
tutt
i i
file
ch
e l
o i
nc
lud
on
o.
La
mo
dif
ica
di u
n f
ile
di re
ali
zza
zio
ne
ric
hie
de
so
lo l
a
ric
om
pil
azio
ne
di
qu
es
to f
ile
.
404
16.6
Mo
du
lari
tà e
ric
om
pil
azio
ne
(II)
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{d
ou
ble
re,
im;
pu
bli
c:
vo
id i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i);
d
ou
ble
reale
();
do
ub
le im
mag
();
/* .
.. *
/vo
id s
cri
vi(
);co
mp
lesso
& s
cala
(do
ub
le s
);}; //
file
com
ple
sso.c
pp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
g n
am
esp
ace s
td;
vo
id c
om
ple
sso
:: i
niz
_co
mp
l(d
ou
ble
r,
do
ub
le i)
{re =
r;
im=
i;}
do
ub
le c
om
ple
sso
:: r
eale
() {
retu
rn r
e;}
do
ub
le c
om
ple
sso
::im
mag
() {
retu
rn i
m;}
vo
id c
om
ple
sso
::scri
vi(
) {c
ou
t<
< '('
<<
re <
< "
, "
<<
im
<<
')'
;}
co
mp
lesso
& c
om
ple
sso
::scala
(do
ub
le s
){
re
*=
s;
im
*= s
;
retu
rn *
this
;}
405
16.6
Mo
du
lari
tà e
ric
om
pil
azio
ne
(III
)
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
g n
am
esp
ace s
td;
int
main
()
{co
mp
lesso
c1;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c1.s
cala
(2);
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(2,
-2)
co
mp
lesso
c2;
c2.i
niz
_co
mp
l(1.0
, -1
.0);
c2.s
cala
(2).
scala
(2);
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(4,
-4)
retu
rn 0
;}
406
16.7
Fu
nzio
ne g
lob
ali
Fu
nzio
ni g
lob
ali
: fu
nzio
ni ch
e n
on
so
no
mem
bro
di
alc
un
a c
lasse.
No
n p
osso
no
acced
ere
all
a p
art
e p
rivata
dell
e c
lassi
e
no
n p
osso
no
usare
il p
un
tato
re t
his
.
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
co
mp
lesso
so
mm
a(c
on
st
co
mp
lesso
& a
, co
nst
co
mp
lesso
& b
){
co
mp
lesso
s;
s.i
niz
_co
mp
l(a.r
eale
()+
b.r
eale
(),
a.i
mm
ag
() +
b.i
mm
ag
());
retu
rn s
;} u
sin
g n
am
esp
ace s
td;
int
main
()
{co
mp
lesso
c1,
c2,
c3;
c1.i
niz
_co
mp
l(1.0
, -1
.0);
c2.i
niz
_co
mp
l(2.0
, -2
.0);
c3 =
so
mm
a(c
1,c
2);
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(3,
-3)
retu
rn 0
;} (3
, -3
)
407
16.8
Co
str
utt
ori
(I)
Co
str
utt
ore
: fu
nzio
ne m
em
bro
il cu
i n
om
e è
il n
om
e d
ell
a
cla
sse.
Se d
efi
nit
a v
ien
e i
nvo
cata
au
tom
ati
cam
en
te t
utt
e
le v
olt
e c
he v
ien
e c
reata
un
’ista
nza d
i cla
sse (
su
bit
o
do
po
ch
e è
sta
ta r
iserv
ata
la m
em
ori
a p
er
i cam
pi
dati
)
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
, d
ou
ble
i);
d
ou
ble
reale
();
do
ub
le im
mag
();
/* .
.. *
/vo
id s
cri
vi(
);}; //
file
com
ple
sso.c
pp
/*…
.*/
co
mp
lesso
:: c
om
ple
sso
(do
ub
le r
, d
ou
ble
i)
{re =
r;
im =
i;}
// file
main
.cpp
/*…
.*/
int
main
()
{co
mp
lesso
c1(1
.0,
-1.0
);c1.s
cri
vi(
); c
ou
t <
< e
nd
l;//
(1,
-1)
co
mp
lesso
c2;
// E
RR
OR
E:
non e
sis
te c
om
ple
sso()
co
mp
lesso
c3(1
);//
ER
RO
RE
: non e
sis
te c
om
ple
sso(int)
}
408
16.8
Co
str
utt
ori
defa
ult
(I)
Per
defi
nir
e o
gg
ett
i sen
za i
niz
iali
zzato
rio
cco
rre d
efi
nir
e
un
co
str
utt
ore
di d
efa
ult
ch
e p
uò
essere
ch
iam
ato
sen
za
arg
om
en
ti. D
ue m
eccan
ism
i.
1)
Meccan
ism
o d
ell
’overl
oad
ing
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{d
ou
ble
re,
im;
pu
bli
c:
co
mp
lesso
();
co
mp
lesso
(do
ub
le r
, d
ou
ble
i);
d
ou
ble
reale
();
do
ub
le im
mag
();
/* .
.. *
/vo
id s
cri
vi(
);}; //
file
com
ple
sso.c
pp
/*…
.*/
co
mp
lesso
:: c
om
ple
sso
()
// c
ostr
utt
ore
di defa
ult
{re =
0;
im=
0;}
co
mp
lesso
:: c
om
ple
sso
(do
ub
le r
, d
ou
ble
i)
{re =
r;
im=
i;}
// file
main
.cpp
/*…
.*/
int
main
()
{co
mp
lesso
c1(1
.0,
-1.0
);c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(1,
-1)
co
mp
lesso
c2;
co
mp
lesso
c3(3
.0);
// E
RR
AT
O}
409
16.8
Co
str
utt
ori
defa
ult
(II)
2)
Meccan
ism
o d
eg
li a
rgo
men
ti d
efa
ult
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i =
0);
d
ou
ble
reale
();
do
ub
le im
mag
();
/* .
.. *
/vo
id s
cri
vi(
);}; //
file
com
ple
sso.c
pp
/*…
.*/
co
mp
lesso
::
co
mp
lesso
(do
ub
le r
, d
ou
ble
i)
{re =
r;
im =
i;}
// file
main
.cpp
/*…
.*/
int
main
()
{co
mp
lesso
c1(1
.0,
-1.0
);//
(1,
-1)
co
mp
lesso
c2;
// (
0,
0)
co
mp
lesso
c3(3
.0);
// (
3,
0)
co
mp
lesso
c4 =
3.0
; //
(3,
0)
// p
ossib
ile q
uando il costr
utt
ore
puo’ essere
//
invocato
con u
n s
olo
arg
om
ento
} AT
TE
NZ
ION
E:
I d
ue m
eccan
ism
i n
on
po
sso
no
essere
u
tili
zzati
co
nte
mp
ora
neam
en
te.
410
16.8
Co
str
utt
ori
per
all
ocare
mem
ori
a
Sp
esso
un
co
str
utt
ore
ric
hie
de l
’all
ocazio
ne d
i m
em
ori
a
lib
era
per
alc
un
i m
em
bri
dell
’og
gett
o d
a c
ostr
uir
e
// file
str
inga.h
cla
ss s
trin
ga
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
ch
ar
s[]
);//
...
}; // file
str
inga.c
pp
str
ing
a::
str
ing
a(c
on
st
ch
ar
s[]
){
str
= n
ew
ch
ar[
str
len
(s)+
1];
str
cp
y(s
tr,
s);
/
/ copia
la s
trin
ga s
nella
str
inga s
tr} //
...
// file
main
.cpp
int
main
(){
str
ing
a i
nf(
"Fo
nd
am
en
ti d
i in
form
ati
ca
I");
/*..
.*/
} Qu
an
do
defi
nia
mo
un
a v
ari
ab
ile d
i ti
po
str
ing
a,
vie
ne
riserv
ata
mem
ori
a p
er
str
e q
uin
di vie
ne r
ich
iam
ato
il
co
str
utt
ore
ch
e a
llo
ca u
n a
rray d
ell
a d
imen
sio
ne
rich
iesta
.
411
16.8
Co
str
utt
ori
per
og
gett
i d
inam
ici
I co
str
utt
ori
defi
nit
i p
er
un
a c
lasse v
en
go
no
ch
iam
ati
im
pli
cit
am
en
te a
nch
e q
uan
do
un
og
gett
o v
ien
e a
llo
cato
d
inam
icam
en
te
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
* p
c1 =
new
co
mp
lesso
(3.0
, 4.0
);co
mp
lesso
* p
c2 =
new
co
mp
lesso
(3.0
);co
mp
lesso
* p
c3 =
new
co
mp
lesso
;/*
…*/
}
412
16.9
Dis
tru
tto
ri
Dis
tru
tto
re:
fun
zio
ne m
em
bro
ch
e v
ien
e i
nvo
cata
au
tom
ati
cam
en
te q
uan
do
un
og
gett
o t
erm
ina i
l su
o
tem
po
di vit
a.
Un
dis
tru
tto
re n
on
ha a
rgo
men
ti.
Ob
bli
gato
ri q
uan
do
il co
str
utt
ore
all
oca m
em
ori
a
din
am
ica.
// file
str
inga.h
cla
ss
str
ing
a
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
ch
ar
s[]
);~
str
ing
a()
;//
dis
trutt
ore
// ...
}; // file
str
inga.c
pp
str
ing
a::
str
ing
a(c
on
st
ch
ar
s[]
){
str
= n
ew
ch
ar[
str
len
(s)+
1];
str
cp
y(s
tr,
s);
/
/ copia
la s
trin
ga s
nella
str
inga s
tr} str
ing
a::
~str
ing
a()
{d
ele
te[]
str
;}/*
…*/
// file
main
.cpp
/*…
*/in
tm
ain
(){
str
ing
a*
ps
= n
ew
str
ing
a("
Fo
nd
am
en
ti d
i In
f.")
;/*
...*
/d
ele
te p
s;
}
413
16.9
Reg
ole
di
ch
iam
ata
I co
str
utt
ori
ven
go
no
ric
hia
mati
co
n le r
eg
ole
seg
uen
ti:
1.
Pe
r g
li o
gg
ett
i s
tati
ci, a
ll’in
izio
de
l p
rog
ram
ma
;
2.
Pe
r g
li o
gg
ett
i a
uto
ma
tic
i, q
ua
nd
o v
ien
e i
nc
on
tra
ta la
d
efi
niz
ion
e;
3.
Pe
r g
li o
gg
ett
i d
ina
mic
i, q
ua
nd
o v
ien
e i
nc
on
tra
to
l’o
pe
rato
re n
ew
;
4.
Pe
r g
li o
gg
ett
i m
em
bri
di a
ltri
og
ge
tti, q
ua
nd
o q
ue
sti
u
ltim
i ve
ng
on
o c
os
tru
iti.
I d
istr
utt
ori
ven
go
no
ric
hia
mati
co
n le r
eg
ole
seg
uen
ti:
1.
Pe
r g
li o
gg
ett
i s
tati
ci, a
l te
rmin
e d
el
pro
gra
mm
a;
2.
Pe
r g
li o
gg
ett
i a
uto
ma
tic
i, a
ll’u
sc
ita
da
l b
loc
co
in
cu
i s
on
o d
efi
nit
i;
3.
Pe
r g
li o
gg
ett
i d
ina
mic
i, q
ua
nd
o v
ien
e i
nc
on
tra
to
l’o
pe
rato
re d
ele
te;
4.
Pe
r g
li o
gg
ett
i m
em
bri
di a
ltri
og
ge
tti, q
ua
nd
o q
ue
sti
u
ltim
i ve
ng
on
o d
istr
utt
i.
Gli o
gg
ett
i c
on
lo
ste
ss
o t
em
po
di
vit
a v
en
go
no
dis
tru
tti
ne
ll’o
rdin
e i
nve
rso
a q
ue
llo
in
cu
i s
on
o d
efi
nit
i.
414
16.9
Co
str
utt
ori
/Dis
tru
tto
ri E
sem
pio
// file
str
inga.c
pp
/*…
*/str
ing
a::
str
ing
a(c
on
st
ch
ar
s[]
){
str
= n
ew
ch
ar[
str
len
(s)+
1];
str
cp
y(s
tr,
s);
/
/ copia
la s
trin
ga s
nella
str
inga s
trco
ut
<<
"C
" <
< s
tr<
< e
nd
l;
} str
ing
a::
~str
ing
a()
{co
ut
<<
"D
" <
< s
tr<
< e
nd
l;d
ele
te[]
str
;} //
file
main
.cpp
#in
clu
de <
cstd
lib
>#in
clu
de "
str
ing
a.h
"in
tm
ain
(){
str
ing
a*
ps
= n
ew
str
ing
a("
Fo
nd
am
en
ti d
i In
f.")
;{
str
ing
a s
("R
eti
Lo
gic
he")
;} dele
te p
s;
/*..
.*/
retu
rn0;
} C F
on
dam
en
ti d
i In
f.C
Reti
Lo
gic
he
D R
eti
Lo
gic
he
D F
on
dam
en
ti d
i In
f.
415
16.1
0C
ostr
utt
ori
di
co
pia
(I)
Co
str
utt
ore
di co
pia
pre
defi
nit
o:
co
str
utt
ore
ch
e a
gis
ce
fra d
ue o
gg
ett
i d
ell
a s
tessa c
lasse e
ffett
uan
do
un
a
rico
pia
tura
mem
bro
a m
em
bro
dei
cam
pi
dati
.
Vie
ne a
pp
licato
:
1.
Qu
an
do
un
og
ge
tto
cla
ss
e v
ien
e i
niz
ializza
to c
on
un
a
ltro
og
ge
tto
de
lla
ste
ss
a c
las
se
2.
Qu
an
do
un
og
ge
tto
cla
ss
e v
ien
e p
as
sa
to a
d u
na
fu
nzio
ne
co
me
arg
om
en
to v
alo
re;
3.
Qu
an
do
un
a f
un
zio
ne
re
sti
tuis
ce
co
me
va
lore
un
o
gg
ett
o c
las
se
(m
ed
ian
te l
’is
tru
zio
ne
re
turn
)
Nel
caso
dell
a c
lasse c
om
ple
sso
il co
str
utt
ore
di co
pia
p
red
efi
nit
o h
a la s
eg
uen
te f
orm
a:
co
mp
lesso
(co
nst
co
mp
lesso
& c
) {
re =
c.r
e;
im =
c.i
m;}
;
416
16.1
0C
ostr
utt
ori
di
co
pia
(II
)
// file
main
.cpp
#in
clu
de "
co
mp
lesso
.h"
co
mp
lesso
fun
(co
mp
lesso
c)
{/*
….*
/
retu
rn c
;} in
tm
ain
(){
co
mp
lesso
c1 (
3.2
, 4);
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
<3.2
, 4>
co
mp
lesso
c2 (
c1);
//
costr
utt
ore
di copia
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
<3.2
, 4>
co
mp
lesso
c3 =
c1;
//
costr
utt
ore
di copia
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
<3.2
, 4>
c3 =
fu
n(c
1);
//
ista
nza
di fu
nzio
ne
// c
ostr
utt
ore
di copia
applic
ato
2 v
olte:
// c
hia
mata
di fu
nzio
ne
// r
estitu
zio
ne
del valo
re
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
<3.2
, 4>
retu
rn 0
;}
417
16.1
0C
ostr
utt
ori
di
co
pia
(II
I)
Per
osserv
are
qu
an
do
ilco
str
utt
ore
di co
pia
vie
ne
eff
ett
ivam
en
teri
ch
iam
ato
, ri
defi
nia
mo
ilco
str
utt
ore
di
co
pia
nell
acla
sse
co
mp
lesso
ed
eseg
uia
mo
lo s
tesso
pro
gra
mm
ap
rin
cip
ale
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{d
ou
ble
re,
im;
pu
bli
c:
co
mp
lesso
(co
nst
co
mp
lesso
&);
/
/ costr
utt
ore
di copia
/* .
.. *
/}; //
file
com
ple
sso.c
pp
/*…
.*/
co
mp
lesso
:: c
om
ple
sso
(co
nst
co
mp
lesso
& c
) {
re
= c
.re;
im=
c.i
m;
co
ut
<<
"C
ostr
utt
ore
di co
pia
" <
< e
nd
l;} (3
.2,
4)
Co
str
utt
ore
di co
pia
(3.2
, 4)
Co
str
utt
ore
di co
pia
(3.2
, 4)
Co
str
utt
ore
di co
pia
Co
str
utt
ore
di co
pia
(3.2
, 4)
418
16.1
0C
ostr
utt
ori
di
co
pia
(IV
)
Il c
ostr
utt
ore
di co
pia
deve e
ssere
rid
efi
nit
o p
er
qu
ell
e
cla
ssi
ch
e u
tili
zzan
o m
em
ori
a l
ibera
e p
reved
on
o u
n
dis
tru
tto
re.
// file
str
inga.h
cla
ss
str
ing
a
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
ch
ar
s[]
);~
str
ing
a()
;//
dis
trutt
ore
// ...
}; // file
main
.cpp
#in
clu
de <
cstd
lib
>#in
clu
de "
str
ing
a.h
"in
tm
ain
(){
str
ing
a s
1("
og
gi"
);str
ing
a s
2(s
1);
// c
ostr
utt
ore
di copia
pre
definito
retu
rn0;
}
s1.s
trs2
.str
og
gi
\0
419
16.1
0C
ostr
utt
ori
di
co
pia
(V
)
Co
nsid
eri
am
ol’
esem
pio
seg
uen
te.
// file
main
.cpp
#in
clu
de <
cstd
lib
>#in
clu
de "
str
ing
a.h
"
vo
id f
f(str
ing
asg
){
// …
} int
main
(){
str
ing
as1("
og
gi"
);ff
(s1);
retu
rn 0
;}
s1.s
trsg
.str
og
gi
\0
Ter
min
e
esec
uzi
on
e
fun
zio
ne
420
16.1
0C
ostr
utt
ori
di
co
pia
(V
I)
// file
str
inga.h
cla
ss s
trin
ga
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
str
ing
a &
);//
...
}; // file
str
inga.c
pp
/*…
*/str
ing
a::
str
ing
a(c
on
st
str
ing
a&
s)
{str
= n
ew
ch
ar[
str
len
(s.s
tr)
+ 1
];str
cp
y(s
tr,
s.s
tr);
} // file
main
.cpp
/*…
*/in
t m
ain
(){
str
ing
a s
1("
og
gi"
);ff
(s1);
/*…
*/}
s1.s
trsg
.str
og
gi
\0
Ter
min
e
esec
uzi
on
e
fun
zio
ne
og
gi
\0
421
16.1
0C
ostr
utt
ori
di
co
pia
(V
I)
Se i
l co
str
utt
ore
di co
pia
no
n v
ien
e r
idefi
nit
o, vie
ne
usato
il co
str
utt
ore
di co
pia
pre
fefi
nit
o.
Per
imp
ed
irn
e l
’uti
lizzo
, o
cco
rre i
nseri
re l
a s
ua
dic
hia
razio
ne n
ell
a p
art
e p
rivata
dell
a c
lasse s
tessa
sen
za a
lcu
na r
idefi
niz
ion
e.
Nel
caso
in
cu
i il
co
str
utt
ore
di co
pia
ven
ga n
asco
sto
, n
on
si p
osso
no
avere
fu
nzio
ni ch
e a
bb
ian
o a
rgo
men
ti
valo
re d
el
tip
o d
ell
a c
lasse o
un
ris
ult
ato
valo
re d
el ti
po
d
ell
a c
lasse.
// file
str
inga.h
cla
ss s
trin
ga
{ch
ar*
str
;str
ing
a(c
on
st
str
ing
a &
);p
ub
lic:
// ...
}; // file
main
.cpp
/*…
*/vo
id f
f(str
ing
a s
g)
// E
RR
OR
E{
// …
} vo
id f
f(str
ing
a&
sg
)//
OK
{//
…}
422
16.1
1F
un
zio
ni
frie
nd
(I)
Un
a f
un
zio
ne è
fri
en
d (
am
ica)
di u
na c
lasse s
e u
na s
ua
dic
hia
razio
ne, p
reced
uta
dall
a p
aro
la c
hia
ve f
rien
d,
ap
pare
nell
a d
ich
iara
zio
ne d
i ta
le c
lasse.
Un
a f
un
zio
ne
frie
nd
pu
ò a
cced
ere
ai m
em
bri
pu
bb
lici e p
rivati
dell
a
cla
sse,
usan
do
i s
ele
tto
ri d
i m
em
bro
.
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
do
ub
le r
eale
();
do
ub
le im
mag
();
/* .
.. *
/}; //
file
main
.cpp
co
mp
lesso
so
mm
a(c
on
st
co
mp
lesso
& a
, co
nst
co
mp
lesso
& b
){ c
om
ple
sso
s(a
.reale
()+
b.r
eale
(),
a.i
mm
ag
() +
b.i
mm
ag
());
retu
rn s
;//
Non s
ipuo’ accedere
ai
}//
mem
bri
privati
della
cla
sse
int
main
()
{ co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2 (
c1);
co
mp
lesso
c3 =
so
mm
a(c
1,c
2);
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(6.4
, 8)
retu
rn 0
;}
423
16.1
1F
un
zio
ni
frie
nd
(II
)
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
do
ub
le r
eale
();
do
ub
le im
mag
();
frie
nd
co
mp
lesso
so
mm
a(c
on
st
co
mp
lesso
& a
, co
nst
co
mp
lesso
& b
);/*
...
*/
}; // file
main
.cpp
co
mp
lesso
so
mm
a(c
on
st
co
mp
lesso
& a
, co
nst
co
mp
lesso
& b
){ c
om
ple
sso
s(a
.re+
b.r
e,
a.i
m +
b.i
m);
retu
rn s
;//
Si puo’ accedere
ai
}//
mem
bri
privati
della
cla
sse
int
main
()
{ co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2 (
c1);
co
mp
lesso
c3 =
so
mm
a(c
1,c
2);
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(6.4
, 8)
retu
rn 0
;}
424
16.1
1F
un
zio
ni
frie
nd
(II
I)
// E
sem
pio
di u
tili
zzo
dell
a F
RIE
ND
nel caso
di u
na c
lasse
// c
he u
tili
zza u
n'a
ltra
cla
sse:
//
CA
SO
A)
cla
ss
e u
tili
zza
tric
e F
RIE
ND
(p
er
inte
ro)
de
lla
cla
ss
e u
tili
zza
ta
#in
clu
de<
iostr
eam
>u
sin
gn
am
esp
ace
std
;
cla
ss
co
mp
lesso
{ //
dic
hia
razio
ne d
ell
a c
lasse u
tili
zzata
do
ub
le r
e, im
;p
ub
lic:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i =
0){
re=
r; im
=i;
}/*
seg
uo
no
le a
ltre
fu
nzio
ni m
em
bro
dell
a c
lasse c
om
ple
sso
... */
frie
nd
cla
ss
vett
ore
Co
mp
lesso
; //
FR
IEN
D t
utt
a la c
lasse u
tili
zzatr
ice
}; cla
ss
vett
ore
Co
mp
lesso
// d
ich
iara
zio
ne d
ell
a c
lasse u
tili
zzatr
ice
{co
mp
lesso
*vett
; i
nt
siz
e;
pu
bli
c:
vett
ore
Co
mp
lesso
(in
tsz){
if(
sz
<=
0 )
sz
= 1
0;
// in
alt
ern
ati
va, p
rovo
care
la t
erm
inazio
ne (
co
n la 'exit
')siz
e=
sz;
vett
= n
ew
co
mp
lesso
[siz
e];
// ch
iam
ata
al co
str
utt
ore
di d
efa
ult
//
su
og
ni co
mp
lesso
del vett
ore
} do
ub
le m
od
ulo
Qu
ad
ro()
{d
ou
ble
mQ
= 0
;fo
r (i
nt
i=0;
i<siz
e;
i++
){//
essen
do
fri
en
d v
ett
ore
Co
mp
lesso
pu
o'acced
ere
a .re
e .im
// s
en
za d
over
ch
iam
are
le f
un
zio
ni d
i accesso
reale
() e
im
mag
()m
Q+
= v
ett
[i].
re*v
ett
[i].
re +
vett
[i].
im*v
ett
[i].
im;
} retu
rnm
Q;
}}; in
tm
ain
(){
vett
ore
Co
mp
lesso
v(5
); co
ut<
<"M
od
ulo
qu
ad
ro d
i v:
";co
ut<
<v.m
od
ulo
Qu
ad
ro()
<<
en
dl;
r
etu
rn0;
}
425
16.1
1F
un
zio
ni
frie
nd
(IV
)
// E
sem
pio
di
uti
lizzo
della F
RIE
ND
nel
caso
di
un
a c
lasse
// c
he u
tilizza u
n'a
ltra
cla
sse:
//
C
AS
O B
) s
olo
alc
un
i m
eto
di
della c
lasse u
tilizzatr
ice
//
so
no
FR
IEN
D d
i q
uella u
tilizzata
#in
clu
de<
ios
tream
>u
sin
g n
am
esp
ace s
td;
cla
ss c
om
ple
sso
;
//p
re-d
ich
iara
zio
ne d
ella c
lasse u
tilizzata
cla
ss v
ett
ore
Co
mp
less
o /
/ d
ich
iara
zio
ne d
ella c
lasse u
tilizzatr
ice
{co
mp
lesso
*vett
;
in
t siz
e;
pu
blic:
vett
ore
Co
mp
less
o(i
nt)
;d
ou
ble
mo
du
loQ
uad
ro()
;
}; cla
ss c
om
ple
sso
{ // d
ich
iara
zio
ne d
ella c
lasse u
tilizzata
do
ub
le r
e, im
;p
ub
lic:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i =
0){
re=
r; i
m=
i;}
frie
nd
do
ub
le v
ett
ore
Co
mp
less
o::
mo
du
loQ
ua
dro
();
//
FR
IEN
D u
n m
eto
do
so
lo}; // d
efi
niz
ion
e d
elle f
un
zio
ni
mem
bro
della c
lasse u
tilizzatr
ice
vett
ore
Co
mp
less
o::
vett
ore
Co
mp
less
o(i
nt
sz){
siz
e =
sz;
v
ett
= n
ew
co
mp
lesso
[siz
e];
//
ch
iam
ata
al co
str
utt
ore
di
defa
ult
} do
ub
le v
ett
ore
Co
mp
les
so
::m
od
ulo
Qu
ad
ro()
{d
ou
ble
mQ
= 0
;fo
r (i
nt
i=0;
i<siz
e;
i++
){m
Q +
= v
ett
[i].
re*v
ett
[i].
re +
vett
[i].
im*v
ett
[i].
im;
} retu
rn m
Q;
} int
main
(){
vett
ore
Co
mp
les
so
v(5
);
co
ut<
<"M
od
ulo
qu
ad
ro d
i v:
";co
ut<
<v.m
od
ulo
Qu
ad
ro()
<<
en
dl;
retu
rn 0
; }
426
17.1
Overl
oad
ing
di
op
era
tori
(I)
–T
ipo
di d
ato
as
tra
tto
: p
uò
ric
hie
de
re c
he
ve
ng
an
o
de
fin
ite
de
lle
op
era
zio
ni ti
po
so
mm
a,
pro
do
tto
, e
tc.
–O
pp
ort
un
o u
tilizza
re g
li s
tes
si
op
era
tori
us
ati
pe
r le
o
pe
razio
ni a
na
log
he
su
i ti
pi
fon
da
me
nta
li.
–N
ec
es
sa
ria
la
rid
efi
niz
ion
e d
eg
li o
pe
rato
ri
–L
a r
ide
fin
izio
ne
di
un
op
era
tore
ha
la
fo
rma
di
un
a
de
fin
izio
ne
di
fun
zio
ne
, il c
ui
ide
nti
fic
ato
re è
co
sti
tuit
o
da
lla
pa
rola
ch
iave
op
era
tor
se
gu
ita
da
ll’o
pe
rato
re c
he
s
i vu
ole
rid
efi
nir
e,
e o
gn
i o
cc
orr
en
za
de
ll’o
pe
rato
re
eq
uiv
ale
ad
un
a c
hia
ma
ta a
lla
fu
nzio
ne
.
–U
n o
pe
rato
re p
uò
de
sig
na
re u
na
fu
nzio
ne
me
mb
ro o
u
na
fu
nzio
ne
glo
ba
le.
Se Θ
è u
n o
pera
tore
un
ari
o
1.
Fu
nzio
ne
me
mb
ro o
pe
rato
rΘ()
2.
Fu
nzio
ne
glo
ba
le o
pe
rato
rΘ(x
)
Se Θ
è u
n o
pera
tore
bin
ari
o
1.
Fu
nzio
ne
me
mb
ro o
pe
rato
rΘ(x
)
2.
Fu
nzio
ne
glo
ba
le o
pe
rato
rΘ(x
,y)
AT
TE
NZ
ION
E:
si
po
sso
no
usare
so
lo o
pera
tori
già
d
efi
nit
i n
el
lin
gu
ag
gio
e n
on
se n
e p
osso
no
cam
bia
re l
e
pro
pri
età
AT
TE
NZ
ION
E:
un
a n
uo
va d
efi
niz
ion
e d
i u
n o
pera
tore
d
eve a
vere
fra
gli
arg
om
en
ti a
lmen
o u
n a
rgo
men
to d
i u
n
tip
o d
efi
nit
o d
all
’ute
nte
427
17.1
Overl
oad
ing
di
op
era
tori
(II
)
Rid
efi
niz
ion
ed
ell
’op
era
tore
so
mm
ap
er
in
um
eri
co
mp
lessi
co
me f
un
zio
ne
mem
bro
//file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& )
;/*
…*/
}; // file
com
ple
sso.c
pp
/*…
*/co
mp
lesso
co
mp
lesso
::o
pera
tor+
(co
nst
co
mp
lesso
& x
){
co
mp
lesso
z(r
e+
x.r
e,i
m+
x.i
m);
retu
rn z
;} //
file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2 (
c1);
co
mp
lesso
c3 =
c1 +
c2;
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(6.4
, 8)
retu
rn 0
;}
428
17.1
Overl
oad
ing
di
op
era
tori
(II
I)
Rid
efi
niz
ion
ed
ell
’op
era
tore
so
mm
ap
er
in
um
eri
co
mp
lessi
co
me f
un
zio
ne
glo
bale
//file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
fr
ien
d c
om
ple
sso
op
era
tor+
(co
nst
co
mp
lesso
&,
co
nst
co
mp
lesso
&);
/*…
*/}; //
file
com
ple
sso.c
pp
/*…
*/co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& x
,co
nst
co
mp
lesso
& y
){
co
mp
lesso
z(x
.re+
y.r
e,
x.i
m+
y.i
m);
retu
rn z
;} //
file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2 (
c1);
co
mp
lesso
c3 =
c1 +
c2;
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(6.4
, 8)
retu
rn 0
;}
429
17.1
Overl
oad
ing
di
op
era
tori
(IV
)
Op
era
tori
in
cre
men
to
//file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
& o
pera
tor+
+()
;co
mp
lesso
op
era
tor+
+(i
nt)
;
//
arg
om
ento
fittizio
che indiv
idua l’o
pera
tore
postf
isso
/*…
*/}; //
file
com
ple
sso.c
pp
/*…
*/co
mp
lesso
& c
om
ple
sso
::o
pera
tor+
+()
{ re
++
; i
m+
+;
retu
rn *
this
;} co
mp
lesso
co
mp
lesso
::o
pera
tor+
+(i
nt)
{co
mp
lesso
ap
p =
*th
is;
re+
+;
im
++
;re
turn
ap
p;
}
430
17.1
Overl
oad
ing
di
op
era
tori
(V
)
Op
era
tori
incre
men
to
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2 (
c1);
co
mp
lesso
c3 =
c1 +
c2;
c3.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(6.4
, 8)
c1+
+;
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(4.2
, 5)
++
c2;
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(4.2
, 5)
c1+
++
++
+;
c1.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(5.2
, 6)
++
++
++
c2;
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(7.2
, 8)
retu
rn 0
;}
431
17.1
Overl
oad
ing
di
op
era
tori
(V
I)
Tu
tti g
li o
pera
tori
di asseg
nam
en
to s
i ri
defi
nis
co
no
co
me
fun
zio
ni m
em
bro
e r
esti
tuis
co
no
un
rif
eri
men
to
all
’og
gett
o
Nell
a s
celt
a f
ra l
e d
ivers
e v
ers
ion
i d
i u
na f
un
zio
ne
so
vra
pp
osta
(o
di u
n o
pera
tore
so
vra
pp
osto
), i
l co
mp
ilato
re t
ien
e c
on
to d
ell
e p
ossib
ili co
nvers
ion
i d
i ti
po
: q
ueste
po
sso
no
essere
co
nvers
ion
i fr
a t
ipi
fon
dam
en
tali
(im
pli
cit
e o
in
dic
ate
dal p
rog
ram
mato
re),
o
co
nvers
ion
i d
efi
nit
e d
al
pro
gra
mm
ato
re c
he c
oin
vo
lgo
no
ti
pi cla
sse.
No
n c
i so
no
pri
ori
tà f
ra l
e p
ossib
ili co
nvers
ion
i. S
e
esis
ton
o d
ivers
e p
ossib
ilit
à, il
co
mp
ilato
re s
eg
nala
q
uesta
am
big
uit
à.
AT
TE
NZ
ION
E:
no
n a
sseg
nate
ad
un
op
era
tore
un
sig
nif
icato
no
n in
tuit
ivo
AT
TE
NZ
ION
E:
le v
ers
ion
i p
red
efi
nit
e d
eg
li o
pera
tori
assic
ura
no
alc
un
e e
qu
ivale
nze.
Per
esem
pio
, +
+x è
eq
uiv
ale
nte
a x
+=
1. Q
uan
do
si
rid
efi
nis
ce u
n o
pera
tore
, le
eq
uiv
ale
nze t
ra g
li o
pera
tori
no
n v
alg
on
o
au
tom
ati
cam
en
te.
Sarà
co
mp
ito
del
pro
gra
mm
ato
re f
are
in
mo
do
ch
e t
ali
eq
uiv
ale
nze v
en
gan
o r
isp
ett
ate
.
432
17.1
Overl
oad
ing
di
op
era
tori
(V
II)
Am
big
uit
à n
on
ris
olt
a d
al
co
mp
ilato
re.
//file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& )
;o
pera
tor
do
ub
le()
{ re
turn
re+
im;}
/*
…*/
}; // file
com
ple
sso.c
pp
/*…
*/co
mp
lesso
co
mp
lesso
::o
pera
tor+
(co
nst
co
mp
lesso
& x
){
co
mp
lesso
z(r
e+
x.r
e,i
m+
x.i
m);
retu
rn z
;} //
file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
c1 (
3.2
, 4),
c2;
co
ut
<<
do
ub
le(c
1)
<<
en
dl;
// 7
.2c2 =
c1 +
3.0
;//
ER
RO
RE
: am
big
uous o
verload f
or
'opera
tor+
' in 'c
1 +
//
3.0
e+
0'
candid
ate
s a
re:
// o
pera
tor+
(double
, double
) <
built
-in>
//
com
ple
sso
com
ple
sso::
opera
tor+
(const
com
ple
sso&
)
retu
rn 0
;}
433
17.2
Sim
metr
ia t
ra g
li o
pera
tori
(I)
Gli
op
era
tori
rid
efi
nit
ico
me f
un
zio
nim
em
bro
no
n s
on
osim
metr
ici.
//file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& )
;/*
…*/
}; // file
com
ple
sso.c
pp
/*…
*/co
mp
lesso
co
mp
lesso
::o
pera
tor+
(co
nst
co
mp
lesso
& x
){
co
mp
lesso
z(r
e+
x.r
e,i
m+
x.i
m);
retu
rn z
;} //
file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
c1 (
3.2
, 4),
c2;
c2 =
c1 +
3.0
;
// c
hia
mata
implic
ita
al costr
utt
ore
pre
fefinito
con
// a
rgom
ento
att
uale
3. S
om
ma
tra
num
eri c
om
ple
ssi
c2 =
3.0
+ c
1;
// E
RR
OR
E
retu
rn 0
;}
434
17.2
Sim
metr
ia t
ra g
li o
pera
tori
(II
)
Per
man
ten
ere
la s
imm
etr
ia d
eg
li o
pera
tori
(il
pri
mo
o
pera
nd
o p
ossa e
ssere
qu
als
ivo
gli
a e
no
n l’o
gg
ett
o a
cu
i si
ap
pli
ca l’o
pera
tore
) si d
evo
no
uti
lizzare
fu
nzio
ni
glo
bali
.
//file
com
ple
sso.h
cla
ss c
om
ple
sso
{
do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i =
0);
fr
ien
d c
om
ple
sso
op
era
tor+
(co
nst
co
mp
lesso
& x
, co
nst
co
mp
lesso
& y
);fr
ien
d c
om
ple
sso
op
era
tor+
(co
nst
co
mp
lesso
& x
, d
ou
ble
d);
frie
nd
co
mp
lesso
op
era
tor+
(do
ub
le d
, co
nst
co
mp
lesso
& y
);/*
…*/
}; // file
com
ple
sso.c
pp
/*…
*/co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& x
, co
nst
co
mp
lesso
& y
){
co
mp
lesso
z(x
.re+
y.r
e,x
.im
+y.i
m);
retu
rn z
;} co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& x
,do
ub
le d
){
co
mp
lesso
z(x
.re+
d,x
.im
+d
);re
turn
z;
}
435
17.2
Sim
metr
ia t
ra g
li o
pera
tori
(II
I)
// file
com
ple
sso.c
pp
co
mp
lesso
op
era
tor+
(do
ub
le d
, co
nst
co
mp
lesso
& x
){
co
mp
lesso
z(x
.re+
d,x
.im
+d
);re
turn
z;
} // file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
()
{co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2 =
c1 +
4.0
;c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(7.2
, 8)
c2 =
3.0
+ c
1;
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(6.2
, 7)
c2 =
4.0
+ 3
.0;
//
Costr
utt
ore
pre
fefinito
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
(7,
0)
retu
rn 0
;}
436
17.3
Op
era
tore
di
asseg
nam
en
to (
I)
Op
era
tore
di asseg
nam
en
to:
pre
defi
nit
o n
el li
ng
uag
gio
. E
seg
ue u
na c
op
ia m
em
bro
a m
em
bro
. D
eve e
ssere
ri
defi
nit
o in
pre
sen
za d
i all
ocazio
ne d
inam
ica d
ell
a
mem
ori
a.
// file
str
inga.h
cla
ss s
trin
ga
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
ch
ar
s[]
);~
str
ing
a()
;//
dis
trutt
ore
str
ing
a(c
on
st
str
ing
a &
);
// c
ostr
utt
ore
di copia
// ...
}; // file
main
.cpp
vo
id f
un
(){
str
ing
a s
1("
og
gi"
);str
ing
a s
2("
ieri
");
s1 =
s2;
// o
pera
tore
di assegnam
ento
//…
} // A
l te
rmin
e d
ella
funzio
ne v
iene r
ichia
mato
il dis
trutt
ore
due
// v
olte.
Com
port
am
ento
dell’
opera
tore
dele
te q
uando
// a
pplic
ato
ad u
n’a
rea g
ia’ lib
era
ta n
on d
efinito!!!!
s1.s
trs2
.str
og
gi
\0i
er
i\0
437
17.3
Op
era
tore
di
asseg
nam
en
to (
II)
Op
era
tore
di asseg
nam
en
to d
eve:
1.d
eall
ocare
la m
em
ori
a d
inam
ica d
ell
’op
era
nd
o a
sin
istr
a
2.a
llo
care
la m
em
ori
a d
ell
a d
imen
sio
ne u
gu
ale
all
’op
era
nd
o d
estr
o
3.c
op
iare
i m
em
bri
dato
e g
li e
lem
en
ti d
ell
o h
eap
PR
OB
LE
MA
DI
AL
IAS
ING
: arg
om
en
to i
mp
licit
o u
gu
ale
all
’arg
om
en
to e
sp
licit
os1 =
s1
// file
str
inga.h
cla
ss s
trin
ga
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
ch
ar
s[]
);~
str
ing
a()
;//
dis
trutt
ore
str
ing
a(c
on
st
str
ing
a &
); /
/ costr
utt
ore
di copia
str
ing
a&
op
era
tor=
(co
nst
str
ing
a&
s);
// oper.
ass
// ...
}; // file
str
inga.c
pp
str
ing
a&
str
ing
a::
op
era
tor=
(co
nst
str
ing
a&
s)
{if
(th
is !
= &
s)
// C
ON
TR
OLLO
ALIA
SIN
G{
dele
te[]
str
;str
= n
ew
ch
ar[
str
len
(s.s
tr)+
1];
str
cp
y(s
tr,
s.s
tr);
} retu
rn *
this
;}
438
17.3
Op
era
tore
di
asseg
nam
en
to (
III)
OT
TIM
IZZ
AZ
ION
E:
Se l
a m
em
ori
a d
inam
ica h
a l
a g
iusta
dim
en
sio
ne
po
ssia
mo
evit
are
di d
eall
ocare
e r
iall
ocare
la m
em
ori
a
// file
str
inga.c
pp
str
ing
a&
str
ing
a::
op
era
tor=
(co
nst
str
ing
a&
s)
{if
(th
is !
= &
s)
{
if (
str
len
(str
) !=
str
len
(s.s
tr))
{
dele
te[]
str
;str
= n
ew
ch
ar[
str
len
(s.s
tr)+
1];
} str
cp
y(s
tr,
s.s
tr);
} retu
rn *
this
;}
s1.s
trs2
.str
ie
ri
\0i
er
i\0
439
17.3
Op
era
tori
ch
e s
i p
osso
no
rid
efi
nir
e (
I)
Si p
osso
no
rid
efi
nir
e t
utt
i g
li o
pera
tori
tra
nn
e:
–L
’op
era
tore
ris
olu
zio
ne
di
vis
ibil
ità
(::
)
–L
’op
era
tore
se
lezio
ne
di
me
mb
ro (
.)
–L
’op
era
tore
se
lezio
ne
di
me
mb
ro a
ttra
ve
rso
un
p
un
tato
re a
me
mb
ro (
.*)
AT
TE
NZ
ION
E:
gli
op
era
tori
di asseg
nam
en
to (
‘=’)
, d
i in
dic
izzazio
ne (
‘[]’
), d
i ch
iam
ata
di fu
nzio
ne (
‘()’
) e d
i sele
zio
ne d
i m
em
bro
tra
mit
e u
n p
un
tato
re (
‘->
*’)
devo
no
essere
rid
efi
nit
i sem
pre
co
me f
un
zio
ni m
em
bro
.
AT
TE
NZ
ION
E:
olt
re a
ll’o
pera
tore
di asseg
nam
en
to,
so
no
p
red
efi
nit
i an
ch
e q
uell
o d
i in
dir
izzo
(‘&
’) e
di seq
uen
za
(‘,’
).
440
18.1
Co
sta
nti
e r
iferi
men
ti n
ell
e c
lassi
(I)
Il c
am
po
dati
di u
na c
lasse p
uò
avere
l’a
ttri
bu
to c
on
st:
in
q
uesto
caso
il cam
po
deve e
ssere
in
izia
lizzato
nel
mo
men
to i
n c
ui vie
ne d
efi
nit
o u
n o
gg
ett
o a
pp
art
en
en
te
all
a c
lasse s
tessa
INIZ
IAL
IZZ
AZ
ION
E:
avvie
ne t
ram
ite l
a lis
ta d
i in
izia
lizzazio
ne d
el co
str
utt
ore
.
// file
com
ple
sso.h
cla
ss
co
mp
lesso
{
co
nst
do
ub
le r
e;
do
ub
le im
;p
ub
lic:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i =
0);
co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
&);
/*…
*/
}; // file
com
ple
sso.c
pp
co
mp
lesso
:: c
om
ple
sso
(do
ub
le r
, d
ou
ble
i)
: re
(r)
{ im
= i;}
// a
nche p
erm
essa la s
critt
ura
seguente
// c
om
ple
sso::
com
ple
sso(d
ouble
r, double
i)
: re
(r),
im
(i)
{}
co
mp
lesso
::
co
mp
lesso
(co
nst
co
mp
lesso
& c
) :
re(c
.re)
{ im
= c
.im
;}
AT
TE
NZ
ION
E:
in u
na c
lasse s
i p
osso
no
dic
hia
rare
ri
feri
men
ti n
on
in
izia
lizzati
, p
urc
hé s
ian
o in
izia
lizzati
co
n
la l
ista
di in
izia
lizzazio
ne
441
18.2
Mem
bro
cla
sse a
ll’i
nte
rno
di
cla
ssi (I
)
In u
na c
lasse (
cla
sse p
rin
cip
ale
) p
osso
no
essere
p
resen
ti m
em
bri
di ti
po
cla
sse (
cla
sse s
eco
nd
ari
a)
div
ers
a d
all
a c
lasse p
rin
cip
ale
.
// file
record
.hcla
ss r
eco
rd//
cla
sse p
rincip
ale
{str
ing
a n
om
e, co
gn
om
e;
pu
bli
c:
//…
.}; Q
uan
do
vie
ne d
ich
iara
to u
n o
gg
ett
o a
pp
art
en
en
te a
lla
cla
sse p
rin
cip
ale
:
1.
ve
ng
on
o r
ich
iam
ati
i c
os
tru
tto
ri d
elle
cla
ss
i s
ec
on
da
rie
, s
e d
efi
nit
i, n
ell’o
rdin
e i
n c
ui
qu
es
te
co
mp
aio
no
ne
lla
dic
hia
razio
ne
de
i m
em
bri
de
lla
cla
ss
e
pri
nc
ipa
le;
2.
qu
ind
i, v
ien
e e
se
gu
ito
il
co
rpo
de
l c
os
tru
tto
re d
ella
c
las
se
pri
nc
ipa
le,
se
de
fin
ito
.
Qu
an
do
un
og
gett
o a
pp
art
en
en
te a
lla c
lasse p
rin
cip
ale
vie
ne
dis
tru
tto
:
1.
vie
ne
es
eg
uit
o il
co
rpo
de
l d
istr
utt
ore
de
lla
cla
ss
e
pri
nc
ipa
le,
se
de
fin
ito
;
2.
Qu
ind
i, v
en
go
no
ric
hia
ma
ti i
dis
tru
tto
ri d
elle
cla
ss
i s
ec
on
da
rie
, s
e d
efi
nit
i, n
ell’o
rdin
e i
nve
rso
in
cu
i q
ue
ste
c
om
pa
ion
o n
ella
dic
hia
razio
ne
de
i m
em
bri
de
lla
cla
ss
e
pri
nc
ipa
le.
442
18.2
Mem
bro
cla
sse a
ll’i
nte
rno
di
cla
ssi (I
I)
Se a
lcu
ne c
lassi
seco
nd
ari
e p
ossie
do
no
co
str
utt
ori
co
n
arg
om
en
ti f
orm
ali
, an
ch
e p
er
la c
lasse p
rin
cip
ale
deve
essere
defi
nit
o u
n c
ostr
utt
ore
e q
uesto
deve p
reved
ere
u
na lis
ta d
i in
izia
lizzazio
ne
// file
record
.h#in
clu
de "
str
ing
a.h
"cla
ss r
eco
rd//
cla
sse p
rincip
ale
{str
ing
a n
om
e, co
gn
om
e;
pu
bli
c:
reco
rd(c
on
st
ch
ar
n[]
, co
nst
ch
ar
c[]
);//
…}; //
file
record
.cpp
reco
rd::
reco
rd(c
on
st
ch
ar
n[]
, co
nst
ch
ar
c[]
):
no
me(n
), c
og
no
me(c
){/
*….*
/}//
…
// file
main
.cpp
#in
clu
de "
reco
rd.h
"in
t m
ain
(){
reco
rd p
ers
("M
ari
o",
"R
ossi"
);//
…}
443
18.2
Mem
bro
cla
sse a
ll’i
nte
rno
di
cla
ssi (I
II)
Se a
lcu
ne c
lassi
seco
nd
ari
e p
reved
on
o c
ostr
utt
ori
d
efa
ult
, q
uesti
ven
go
no
ric
hia
mati
.S
e t
utt
e l
e c
lassi
seco
nd
ari
e h
an
no
co
str
utt
ori
defa
ult
, an
ch
e q
uell
o d
ell
a c
lasse p
rin
cip
ale
pu
ò e
ssere
un
co
str
utt
ore
defa
ult
o m
an
care
(vie
ne u
sato
il co
str
utt
ore
p
red
efi
nit
o).
// file
str
inga.h
cla
ss s
trin
ga
{ch
ar*
str
;p
ub
lic:
str
ing
a(c
on
st
ch
ar
s[]
=""
);//
…}; //
file
record
.h#in
clu
de "
str
ing
a.h
"cla
ss r
eco
rd//
cla
sse p
rincip
ale
{str
ing
a n
om
e, co
gn
om
e;
pu
bli
c:
// …
}; // file
main
.cpp
#in
clu
de "
reco
rd.h
"in
t m
ain
(){
reco
rd p
ers
;//
…}
444
18.3
Arr
ay d
i o
gg
ett
i cla
sse (
I)
Un
arr
ay p
uò
avere
co
me e
lem
en
ti o
gg
ett
i cla
sse:
se
nell
a c
lasse s
on
o d
efi
nit
i co
str
utt
ore
e d
istr
utt
ore
, q
uesti
ven
go
no
ric
hia
mati
per
og
ni ele
men
to d
ell
’arr
ay
//file
com
ple
sso.h
cla
ss
co
mp
lesso
{
d
ou
ble
re,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i =
0);
//
….
}; // file
com
ple
sso.c
pp
co
mp
lesso
:: c
om
ple
sso
(do
ub
le r
, d
ou
ble
i)
{re =
r;
im=
i;}
/*…
*/
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
gn
am
esp
ace
std
;in
tm
ain
()
{co
mp
lesso
vc[3
];fo
r (i
nt
i=0;
i<3;
i++
)vc[i
].scri
vi(
); c
ou
t<
< e
nd
l;
re
turn
0;
} (0,
0)
(0,
0)
(0,
0)
445
18.3
Arr
ay d
i o
gg
ett
i cla
sse (
II)
Inzia
lizzazio
ne
esp
licit
a
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
gn
am
esp
ace
std
;in
tm
ain
()
{co
mp
lesso
vc[5
] =
{co
mp
lesso
(1.1
,2.2
),
co
mp
lesso
(1.5
,1.5
), c
om
ple
sso
(4.1
,2.5
)};
for
(in
ti=
0;
i<5;
i++
){
v
c[i
].scri
vi(
); c
ou
t<
< e
nd
l;}
retu
rn0;
} (1.1
, 2.2
)(1
.5,
1.5
)(4
.1,
2.5
)(0
, 0)
(0,
0)
AT
TE
NZ
ION
E:
se l
a l
ista
di co
str
utt
ori
no
n è
co
mp
leta
, n
ell
a c
lasse d
eve e
ssere
defi
nit
o u
n c
ostr
utt
ore
defa
ult
, ch
e v
ien
e r
ich
iam
ato
per
gli
ele
men
ti n
on
esp
licit
am
en
te
iniz
iali
zzati
.
AT
TE
NZ
ION
E:
se l
’arr
ay d
i o
gg
ett
i è a
llo
cato
in
mem
ori
a
din
am
ica, se n
ell
a c
lasse è
defi
nit
o u
n c
ostr
utt
ore
, q
uesto
deve e
ssere
necessari
am
en
te d
efa
ult
, in
qu
an
to
no
n s
on
o p
ossib
ili in
izia
lizzazio
ni esp
licit
e.
446
18.4
Mem
bri
sta
tici
(I)
Mem
bri
dati
sta
tici:
mo
dell
an
o in
form
azio
ni g
lob
ali
, ap
part
en
en
ti a
lla c
lasse n
el
su
o c
om
ple
sso
e n
on
all
e
sin
go
le ista
nze.
// file
entity
.hcla
ss
en
tity
{in
td
ato
;p
ub
lic:
// ... en
tity
(in
tn
);sta
tic
int
co
nto
;//
dic
hia
razio
ne
della
var.
conto
}; // file
entity
.cpp
#in
clu
de "
en
tity
.h"
int
en
tity
::co
nto
= 0
;//
definiz
ione
della
var.
conto
en
tity
::en
tity
(in
tn
){
co
nto
++
; d
ato
= n
; }
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
en
tity
.h"
usin
gn
am
esp
ace
std
;in
tm
ain
(){
en
tity
e1(1
), e
2(2
);co
ut
<<
"N
um
ero
ista
nze:
" <
< e
nti
ty::
co
nto
<<
en
dl;
retu
rn0;
} Nu
mero
ista
nze:
2
447
18.4
Mem
bri
sta
tici
(II)
Fu
nzio
ne m
em
bro
sta
tica:
op
era
zio
ne c
he n
on
vie
ne
ap
pli
cata
ad
un
a s
ing
ola
ista
nza d
ell
a c
lasse,
ma s
vo
lge
ela
bo
razio
ni su
lla c
lasse i
n q
uan
to t
ale
.
// file
entity
1.h
cla
ss
en
tity
1{
int
dato
;sta
tic
int
co
nto
;p
ub
lic:
// ... e
nti
ty1(i
nt
n);
sta
tic
int
nu
mero
();
// F
unzio
ne m
em
bro
sta
tica
}; // file
entity
1.c
pp
#in
clu
de "
en
tity
1.h
"in
ten
tity
1::
co
nto
= 0
;
en
tity
1::
en
tity
1(i
nt
n)
{ c
on
to+
+;
dato
= n
; }
int
en
tity
1::
nu
mero
(){
retu
rnco
nto
;}
// file
main
.cpp
//…
int
main
(){
en
tity
1 e
1(1
), e
2(2
);co
ut
<<
"N
um
. is
tan
ze:
" <
< e
nti
ty1::
nu
mero
() <
< e
nd
l;co
ut
<<
"N
um
. is
tan
ze:
" <
< e
1.n
um
ero
() <
< e
nd
l;
retu
rn0;
} Nu
m.
ista
nze:
2N
um
.is
tan
ze:
2
448
18.4
Mem
bri
sta
tici
(III
)
Un
a f
un
zio
ne m
em
bro
sta
tica n
on
pu
ò a
cced
ere
im
pli
cit
am
en
te a
nessu
n m
em
bro
no
n s
tati
co
né u
sare
il
pu
nta
tore
th
is.
// file
entity
2.h
cla
ss e
nti
ty2
{in
t d
ato
;in
t id
en
t;sta
tic i
nt
co
nto
;p
ub
lic:
// ... e
nti
ty2(i
nt
n);
sta
tic i
nt
nu
mero
();
// F
unzio
ne m
em
bro
sta
tica
sta
tic v
oid
avan
zaC
on
to(i
nt
n);
}; // file
entity
2.c
pp
#in
clu
de "
en
tity
2.h
"in
t en
tity
2::
co
nto
= 0
;
en
tity
2::
en
tity
2(i
nt
n)
{ c
on
to+
+;
dato
= n
; id
en
t =
co
nto
;}
int
en
tity
2::
nu
mero
(){
retu
rn c
on
to;}
vo
id e
nti
ty2::
avan
za
Co
nto
(in
t n
){
co
nto
+=
n;
iden
t =
co
nto
++
;//
ER
RO
RE
: in
valid
use o
f m
em
ber
`entity
2::
ident'
in
// s
tatic m
em
ber
function
}
449
18.5
Fu
nzio
ni
co
nst
(I)
Fu
nzio
ne
mem
bro
co
nst:
fu
nzio
nich
en
on
po
sso
no
mo
dif
icare
l’o
gg
ett
oa c
ui so
no
ap
pli
cate
.Im
po
rtan
tip
erc
hé
ad
og
gett
i cla
sse c
osta
nti
po
sso
no
essere
ap
pli
cate
so
lo f
un
zio
ni m
em
bro
co
sta
nti
.
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{ do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
d
ou
ble
reale
();
do
ub
le im
mag
();
//…
}; // file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
g n
am
esp
ace s
td;
int
main
()
{ co
nst
co
mp
lesso
c1 (
3.2
, 4);
co
ut
<<
"P
art
e R
eale
" <
< c
1.r
eale
() <
< e
nd
l;//
ER
RO
RE
: c1 e
’ costa
nte
retu
rn 0
;}
450
18.5
Fu
nzio
ni
co
nst
(II)
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{ do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
d
ou
ble
reale
() c
on
st;
do
ub
le im
mag
() c
on
st;
//…
}; // file
com
ple
sso.c
pp
do
ub
le c
om
ple
sso
:: r
eale
() c
on
st
{retu
rn r
e;}
do
ub
le c
om
ple
sso
::im
mag
() c
on
st
{retu
rn i
m;}
//…
// file
main
.cpp
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
g n
am
esp
ace s
td;
int
main
()
{co
nst
co
mp
lesso
c1 (
3.2
, 4);
co
ut
<<
"P
art
e R
eale
" <
< c
1.r
eale
() <
< e
nd
l;
retu
rn 0
;} P
art
e R
eale
3.2
451
18.5
Fu
nzio
ni
co
nst
(III
)
Il m
eccan
ism
od
i o
verl
oad
ing
dis
tin
gu
e d
ue v
ers
ion
id
i u
na
fun
zio
ne
ch
ed
iffe
risco
no
so
lo p
er
la p
rop
rietà
di
essere
co
sta
nti
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{ do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
d
ou
ble
reale
() c
on
st;
do
ub
le r
eale
();
//…
}; // file
com
ple
sso.c
pp
do
ub
le c
om
ple
sso
:: r
eale
() c
on
st
{co
ut
<<
"C
OS
TA
NT
E"
<<
en
dl;
retu
rn r
e;}
do
ub
le c
om
ple
sso
:: r
eale
()
{retu
rn r
e;}
//…
.
// file
main
.cpp
//…
int
main
()
{co
nst
co
mp
lesso
c1 (
3.2
, 4);
co
mp
lesso
c2(3
.2,4
);co
ut
<<
"P
art
e R
eale
" <
< c
1.r
eale
() <
< e
nd
l;co
ut
<<
"P
art
e R
eale
" <
< c
2.r
eale
() <
< e
nd
l;//
…N
OT
AR
E L
’US
CIT
A} C
OS
TA
NT
EP
art
e R
eale
3.2
Part
e R
eale
3.2
452
18.7
Esp
ressio
ni le
ttera
li
No
n è
po
ssib
ile d
efi
nir
e e
sp
ressio
ni
lett
era
li p
er
i ti
pi
defi
nit
i d
all
’ute
nte
. I co
str
utt
ori
po
sso
no
co
mu
nq
ue
svo
lgern
e l
a f
un
zio
ne
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{ do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& x
);//
…}; //
file
com
ple
sso.c
pp
co
mp
lesso
co
mp
lesso
::o
pera
tor+
(co
nst
co
mp
lesso
& x
){
co
mp
lesso
z(r
e+
x.r
e,i
m+
x.i
m);
retu
rn z
;} //
….
// file
main
.cpp
//…
int
main
()
{co
mp
lesso
c1 (
3.2
, 4),
c2;
c2 =
co
mp
lesso
(0.3
,3.0
) +
c1;
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
…} (3
.5,
7)
453
18.8
Co
nvers
ion
i m
ed
ian
te c
ostr
utt
ori
Un
co
str
utt
ore
ch
ep
uò
essere
ch
iam
ato
co
n u
n s
olo
arg
om
en
to v
ien
e u
sato
per
co
nvert
ire v
alo
ri d
el ti
po
d
ell
’arg
om
en
to n
el ti
po
dell
a c
lasse a
cu
i ap
part
ien
e i
l co
str
utt
ore
.
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{ do
ub
le r
e,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0);
co
mp
lesso
op
era
tor+
(co
nst
co
mp
lesso
& x
);//
…}; //
file
main
.cpp
//…
int
main
()
{co
mp
lesso
c1 (
3.2
, 4),
c2;
c2 =
c1 +
2.5
;//
Il costr
utt
ore
trasfo
rma
ilre
ale
2.5
nelcom
ple
sso
(2.5
,0)
c2.s
cri
vi(
); c
ou
t<
< e
nd
l;//
…} (5
.7,
4)
454
18.8
Op
era
tori
di
co
nvers
ion
e
Op
era
tore
di co
nvers
ion
e:
co
nvert
eu
n o
gg
ett
ocla
sse
in
un
valo
red
i u
n a
ltro
tip
o.
// file
com
ple
sso.h
cla
ss c
om
ple
sso
{ do
ub
le r
e,
im;
pu
bli
c:
op
era
tor
do
ub
le()
;o
pera
tor
int(
);//
…}; //
file
com
ple
sso.c
pp
co
mp
lesso
::o
pera
tor
do
ub
le()
{ re
turn
re+
im;}
co
mp
lesso
::o
pera
tor
int(
){
retu
rn s
tati
c_cast<
int>
(re+
im);
}
// file
main
.cpp
//…
int
main
()
{co
mp
lesso
c1 (
3.2
, 4);
co
ut
<<
(d
ou
ble
)c1 <
< e
nd
l;co
ut
<<
(in
t)c1 <
< e
nd
l;//
…} 7.2
7
455
20.
Cla
ssi p
er
l’in
gre
sso
e l
’uscit
a (
I)
Le l
ibre
rie d
i in
gre
sso
/uscit
a f
orn
isco
no
cla
ssi
per
ela
bo
rare
vari
e c
ate
go
rie d
i str
eam
Cla
sse p
er
l’in
gre
sso
dati
cla
ss i
str
eam
{//
sta
to: configura
zio
ne d
i bit
pu
bli
c:
istr
eam
(){…
};is
tream
& o
pera
tor>
>(i
nt&
);is
tream
& o
pera
tor>
>(d
ou
ble
&);
istr
eam
& o
pera
tor>
>(c
har&
);is
tream
& o
pera
tor>
>(c
har*
);
int
get(
);//
(1)
istr
eam
& g
et(
ch
ar&
c);
// (
2)
istr
eam
& g
et(
ch
ar*
bu
f, in
t d
im , c
har
deli
m =
'\n
');
//
(3)
istr
eam
& r
ead
(ch
ar*
s, in
t n
)//
(4)
//…
}; L’o
gg
ett
o c
in e
un
’ista
nza p
red
efi
nit
a d
ell
a c
lasse
istr
eam
.
(1)L
a f
un
zio
ne g
et(
)p
rele
va u
n c
ara
ttere
e l
o
resti
tuis
ce c
on
vert
ito
in
in
tero
(2)L
a f
un
zio
ne g
et(
c)
pre
leva u
n c
ara
ttere
e l
o a
sseg
na
all
a v
ari
ab
ile c
(3)L
a f
un
zio
ne g
et(
bu
f,d
im,d
eli
m)
leg
ge c
ara
tteri
dall
o
str
eam
di in
gre
sso
e l
i tr
asfe
risce i
n b
uf
ag
giu
ng
en
do
il cara
ttere
nu
llo
fin
ale
fin
ch
é n
el
bu
ffer
no
n v
i so
no
dim
cara
tteri
o n
on
si in
co
ntr
a i
l cara
ttere
deli
m (
ch
e n
on
vie
ne l
ett
o).
(4)L
a f
un
zio
ne r
ead
(s,n
) le
gg
e n
byte
e l
i m
em
ori
zza a
p
art
ire d
all
’in
dir
izzo
co
nte
nu
to in
s.
456
20.
Cla
ssi p
er
l’in
gre
sso
e l
’uscit
a (
II)
Cla
sse p
er
l’u
scit
a d
ati
cla
ss o
str
eam
{//
sta
to: configura
zio
ne d
i bit
// …
.p
ub
lic:
ostr
eam
(){…
};o
str
eam
& o
pera
tor<
<(i
nt)
;o
str
eam
& o
pera
tor<
<(d
ou
ble
);o
str
eam
& o
pera
tor<
<(c
har)
;o
str
eam
& o
pera
tor<
<(c
on
st
ch
ar*
);
ostr
eam
& p
ut(
ch
ar
c)
ostr
eam
& w
rite
(co
nst
ch
ar*
s, in
t n
)o
str
eam
& o
pera
tor<
< (
ostr
eam
& (
*p
f )(
ostr
eam
&))
;
//…
}; Gli
og
gett
i co
ut
e c
err
so
no
ista
nze p
red
efi
nit
e d
ell
a
cla
sse o
str
eam
.
La f
un
zio
ne p
ut(
)tr
asfe
risce i
l cara
ttere
csu
llo
str
eam
di
uscit
aL
a f
un
zio
ne w
rite
()tr
asfe
risce l
a s
eq
uen
za d
i n
cara
tteri
co
nte
nu
ti in
s s
ull
o s
tream
di u
scit
a.
457
20.
Co
ntr
oll
o d
el
form
ato
(I)
Co
ntr
oll
o d
el
form
ato
: p
uò
avven
ire a
ttra
vers
o i
m
an
ipo
lato
ri
Man
ipo
lato
ri:
pu
nta
tori
a f
un
zio
ne.
Gli
op
era
tori
di le
ttu
ra e
scri
ttu
ra s
on
o r
idefi
nit
i p
er
overl
oad
ing
in
mo
do
da a
ccett
are
tali
pu
nta
tori
.
iostr
eam
en
dl
\\ostr
eam
& e
ndl (
ostr
eam
& o
s )
;in
serisce ‘\n
’ e s
vuota
il buff
er
co
ut
<<
x <
< e
nd
l;d
ec,
hex, o
ct
sele
zio
nano la b
ase d
i num
era
zio
ne
co
ut
<<
16 <
< ' ' <
< o
ct
<<
16 <
< e
nd
l;b
oo
lalp
ha
inserisce o
estr
ae o
ggett
i di tipo b
oole
ano c
om
e n
om
i (t
rue o
fals
e)
piu
ttosto
che c
om
e v
alo
ri n
um
erici
co
ut
<<
bo
ola
lph
a <
< t
rue <
< e
nd
l;
iom
an
ipsetw
(in
t)n
um
ero
min
imo
di cara
tteri
usati
per
la s
tam
pa
di alc
un
e r
ap
pre
sen
tazio
ni (w
sta
per
wid
th)
setf
ill(
ch
ar)
sp
ecif
ica q
uale
cara
ttere
pre
pen
dere
per
arr
ivare
all
a
lun
gh
ezza d
esid
era
ta (
defa
ult
: sp
azio
bia
nco
).
setp
recis
ion
(in
t)
nu
mero
di cif
re s
ign
ific
ati
ve (
part
e in
tera
+ p
art
e
decim
ale
) p
er
la s
tam
pa d
i n
um
eri
reali
I m
an
ipo
lato
ri h
an
no
eff
ett
o f
ino
all
a n
uo
va o
cco
rren
za
del m
an
ipo
lato
re;
eccett
o s
etw
() c
he h
a e
ffett
o s
olo
su
ll’i
str
uzio
ne d
i scri
ttu
ra i
mm
ed
iata
men
te s
uccessiv
a
458
20.
Co
ntr
oll
o d
el
form
ato
(II
)
#in
clu
de <
iostr
eam
>#in
clu
de <
iom
an
ip>
usin
g n
am
esp
ace s
td;
int
main
(){
d
ou
ble
d =
1.5
64e-2
; in
t i;
bo
ol b
;co
ut
<<
d <
< e
nd
l;co
ut
<<
setp
recis
ion
(2)
<<
d <
< e
nd
l;co
ut
<<
setw
(10)
<<
d <
< e
nd
l;co
ut
<<
setf
ill(
'0')
<<
setw
(10)
<<
d <
< e
nd
l;cin
>>
hex >
> i;
// s
up
po
nen
do
di in
seri
re 'b
'co
ut
<<
hex <
< i <
< '\t
' <
< d
ec <
< i <
< e
nd
l;cin
>>
oct
>>
i;
// s
up
po
nen
do
di in
seri
re “
12”
co
ut
<<
oct
<<
i <
< '\t
' <
< d
ec <
< i <
< e
nd
l;cin
>>
bo
ola
lph
a >
> b
; //
su
pp
on
en
do
di in
s. “fa
lse”
co
ut
<<
b <
< b
oo
lalp
ha <
< ' ' <
< b
<<
en
dl;
co
ut
<<
tru
e <
< e
nd
l;re
turn
0;
}
0.01564
0.016
0.016
000000.016
b b 11
12
12 10
false
0 false
true
459
20.2
Co
ntr
oll
i su
gli
str
eam
Sta
to d
i u
no
str
eam
: co
nfi
gu
razio
ne d
i b
it, d
ett
i b
it d
i sta
to.
Lo
sta
to è
co
rrett
o (
go
od
) se t
utt
i i b
it d
i sta
to
valg
on
o 0
.
�B
it f
ail
–p
osto
ad
1 o
gn
iqu
alv
olt
a s
i veri
fica u
n
err
ore
recu
pera
bil
e
�B
it b
ad
–d
iscri
min
a s
e l
’err
ore
è r
ecu
pera
bil
e (
0)
o
men
o (
1)
�B
it e
of
–p
osto
ad
1 q
uan
do
vie
ne l
ett
a l
a m
arc
a d
i fi
ne s
tream
I b
it p
osso
no
essere
esam
inati
co
n le f
un
zio
ni seg
uen
ti,
ch
e r
esti
tuis
co
no
valo
ri b
oo
ela
ni:
�fa
il()
–re
sti
tuis
ce t
rue s
e a
lmen
o u
no
dei d
ue b
it f
ail
e b
ad
so
no
ad
1
�b
ad
() –
resti
tuis
ce t
rue s
e i
l b
it b
ad
è a
d 1
�eo
f()
–re
sti
tuis
ce t
rue s
e i
l b
it e
of
è a
d 1
�g
oo
d()
–re
sti
tuis
ce t
rue
se t
utt
i i
bit
so
no
a 0
I b
it p
osso
no
essere
man
ipo
lati
via
so
ftw
are
co
n la
fun
zio
ne c
lear(
), c
he h
a p
er
arg
om
en
to (
di d
efa
ult
è 0
) u
n
valo
re i
nte
ro c
he r
ap
pre
sen
ta i
l n
uo
vo
valo
re d
ell
o s
tato
.
Po
sso
no
essere
usati
i s
eg
uen
ti e
nu
mera
tori
:
�io
s::
fail
bit
–co
rris
po
nd
e a
l b
it f
ail
ad
1
�io
s::
bad
bit
–co
rris
po
nd
e a
l b
it b
ad
ad
1
�io
s::
eo
fbit
–co
rris
po
nd
e a
l b
it e
of
ad
1
Og
ni valo
re d
ell
o s
tato
pu
ò e
ssere
ott
en
uto
ap
pli
can
do
l’
op
era
tore
OR
bit
a b
it c
on
op
era
nd
i ta
li e
nu
mera
tori
.
NO
TA
BE
NE
: Q
uan
do
un
o s
tream
vie
ne p
osto
in
un
a
co
nd
izio
ne, vie
ne r
esti
tuit
o il co
mp
lem
en
to d
el ri
su
ltato
d
ell
a f
un
zio
ne f
ail
().
460
20.3
Uso
dei
file
Le c
lassi
fstr
eam
, if
str
eam
e o
fstr
eam
han
no
un
astr
utt
ura
sim
ile a
qu
ell
avis
ta p
er
gli
str
eam
di
ing
resso
/uscit
a.
#in
clu
de<
iostr
eam
>#in
clu
de<
fstr
eam
>u
sin
gn
am
esp
ace
std
;in
tm
ain
()
{if
str
eam
inp
ut(
"no
nE
sis
te.t
xt"
); c
har
in;
co
ut
<<
in
pu
t.fa
il()
<<
' ' <
< in
pu
t.b
ad
() <
< ' '
<<
in
pu
t.eo
f()
<<
' ' <
< in
pu
t.g
oo
d()
<<
en
dl;
inp
ut.
cle
ar(
);co
ut
<<
in
pu
t.fa
il()
<<
' ' <
< in
pu
t.b
ad
() <
< ' '
<<
in
pu
t.eo
f()
<<
' ' <
< in
pu
t.g
oo
d()
<<
en
dl;
inp
ut.
cle
ar(
ios::
bad
bit
);co
ut
<<
in
pu
t.fa
il()
<<
' ' <
< in
pu
t.b
ad
() <
< ' '
<<
in
pu
t.eo
f()
<<
' ' <
< in
pu
t.g
oo
d()
<<
en
dl;
inp
ut.
cle
ar(
);in
pu
t.o
pen
("E
sis
te.t
xt"
);w
hil
e(i
np
ut>
>in
);co
ut
<<
in
pu
t.fa
il()
<<
' ' <
< in
pu
t.b
ad
() <
< ' '
<<
in
pu
t.eo
f()
<<
' ' <
< in
pu
t.g
oo
d()
<<
en
dl;
retu
rn0;
} 1 0
0 0
0 0
0 1
1 1
0 0
1 0
1 0
461
20.4
Rid
ef.
op
era
tori
in
gre
sso
/uscit
a(I
)
Il m
eccan
ism
od
i o
verl
oad
ing
perm
ett
ed
i ri
defi
nir
e g
li
op
era
tori
di le
ttu
ra e
di scri
ttu
ra p
er
i ti
pi d
efi
nit
i d
all
’ute
nte
.
AT
TE
NZ
ION
E:
Tali
op
era
tori
devo
no
essere
rid
efi
nit
ico
me f
un
zio
nig
lob
ali
.
// file
com
ple
sso.h
#in
clu
de<
iostr
eam
>cla
ss c
om
ple
sso
{d
ou
ble
re,
im;
pu
bli
c:
co
mp
lesso
(do
ub
le r
= 0
, d
ou
ble
i=
0){
re=
r;im
=i;
};
do
ub
le r
eale
() c
on
st
{retu
rn r
e;}
do
ub
le im
mag
() c
on
st
{retu
rn i
m;}
//…
}; usin
g n
am
esp
ace s
td;
ostr
eam
& o
pera
tor<
<(o
str
eam
& o
s, co
mp
lesso
z);
istr
eam
& o
pera
tor>
>(i
str
eam
& i
s, co
mp
lesso
& z
);
462
20.5
Rid
ef.
op
era
tori
in
gre
sso
/uscit
a(I
I)
// file
com
ple
sso.c
pp
#in
clu
de "
co
mp
lesso
.h"
ostr
eam
& o
pera
tor<
<(o
str
eam
& o
s, co
nst
co
mp
lesso
& z
){
os <
< '('
<<
z.r
eale
() <
< ',' <
< z
.im
mag
() <
< ')'
;re
turn
os;
} istr
eam
& o
pera
tor>
>(i
str
eam
& i
s, co
mp
lesso
& z
) {
d
ou
ble
re =
0, im
= 0
; ch
ar
c =
0;
is >
> c
;if
(c !
= '('
) is
.cle
ar(
ios::
fail
bit
);els
e{
is >
> r
e >
> c
;if
(c !
= ',')
is.c
lear(
ios::
fail
bit
);els
e
{is
>>
im
>>
c;
if (
c !
= ')'
) is
.cle
ar(
ios::
fail
bit
);}
} z =
co
mp
lesso
(re,
im);
retu
rn i
s;
}
463
20.5
Rid
ef.
op
era
tori
in
gre
sso
/uscit
a(I
II)
#in
clu
de<
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
usin
g n
am
esp
ace s
td;
int
main
()
{co
mp
lesso
c1(1
.0,
10.0
);co
mp
lesso
c2(1
.1,
10.1
);co
ut
<<
c1 <
< '\t
' <
< c
2 <
< e
nd
l;if
(!(
cin
>>
c2))
{
cerr
<<
"E
rro
ren
ell
ale
ttu
rad
i u
n n
um
ero
co
mp
lesso
" <
< e
nd
l;exit
(1);
} co
ut
<<
c1 <
< '\t
' <
< c
2 <
< e
nd
l;
retu
rn 0
;} (1
,10)
(1.1
,10.1
)(2
,12)
(1,1
0)
(2,1
2)
464
21
Pre
pro
cesso
re (
I)
Pre
pro
cesso
re:
part
e d
i co
mp
ilato
re c
he e
lab
ora
il te
sto
d
el p
rog
ram
ma p
rim
a d
ell
’an
ali
si le
ssic
ale
e s
inta
ttic
a
-P
uò
in
clu
dere
nel
testo
alt
ri f
ile
-E
sp
an
de i
sim
bo
li d
efi
nit
i d
all
’ute
nte
seco
nd
o le
loro
defi
niz
ion
i
-In
clu
de o
esclu
de p
art
i d
i co
dic
e d
al
testo
ch
e v
err
à
co
mp
ilato
Qu
este
op
era
zio
ni so
no
co
ntr
oll
ate
dall
e d
irett
ive p
er
il
pre
pro
cesso
re (
il p
rim
o c
ara
ttere
è #
)
Inclu
sio
ne d
i fi
le h
ead
er.
Du
e p
ossib
ilit
à:
-P
erc
ors
o a
part
ire d
a c
art
ell
e s
tan
dard
#in
clu
de <
file
.h>
-P
erc
ors
o a
part
ire d
all
a c
art
ell
a i
n c
ui avvie
ne l
a
co
mp
ilazio
ne o
perc
ors
o a
sso
luto
#in
clu
de "
file
.h"
Esem
pio
:#in
clu
de "
su
bd
ir\f
ile.h
"#in
clu
de "
c:\
su
bd
ir\f
ile.h
"
465
21
Pre
pro
cesso
re (
II)
Macro
Sim
bo
lo c
he v
ien
e s
osti
tuit
o c
on
un
a s
eq
uen
za d
i ele
men
ti l
essic
ali
co
rris
po
nd
en
ti a
lla s
ua d
efi
niz
ion
e
#d
efi
ne C
ON
ST
123
#d
efi
ne L
INU
X#d
efi
ne M
AX
(A,B
) ((
A)>
(B)
? (
A)
: (B
))
int
main
(){
int
z =
10;
X =
CO
NS
T;
// X
= 1
23
Y =
MA
X(4
, (z
+2))
// Y
= (
(4)
> (
z+
2)
? (
4)
: (z
+2))
} AT
TE
NZ
ION
E a
lle p
are
nte
si!
!!!
#d
efi
ne M
AX
(A,B
) (A
)>(B
)?
(A
) :
(B)
int
main
(){
Y =
1 +
MA
X(1
, 3)
// Y
= 1
+ (
1)
> (
3)
? (
1)
: (3
)} D
iven
tere
bb
e
int
main
(){
Y =
1 +
(1)
> (
3)
? (
1)
: (3
)//
3 invece d
i 4,
per
via
della
// m
aggio
re p
riorita
’ dell’
op.
+
// r
ispett
o a
ll’op.
>
}
466
21
Co
mp
ilazio
ne c
on
diz
ion
ale
(I)
Co
mp
ilazio
ne c
on
diz
ion
ale
#if
, #eli
f, #
els
e,
#en
dif
#if
consta
nt-
expre
ssio
n(c
ode if-
part
)#eli
fconsta
nt-
expre
ssio
n(c
ode e
lif-p
art
s)
#eli
fconsta
nt-
expre
ssio
n(c
ode e
lif-p
art
s)
#els
e(c
ode e
lse-p
art
)#en
dif
I valo
ri d
ell
e e
sp
ressio
ni
co
sta
nti
ven
go
no
in
terp
reta
ti
co
me v
alo
ri l
og
ici ed
in
base a
essi
ven
go
no
co
mp
ilati
o
no
i f
ram
men
ti t
esto
(te
xt)
seg
uen
ti.
Esem
pio
:
#d
efi
ne D
EB
UG
_L
EV
EL
1 /
/ all
’in
izio
del fi
le
int
main
(){
#if
DE
BU
G_L
EV
EL
==
2co
ut<
<i<
<j;
//
deb
ug
di i
e j
#eli
f D
EB
UG
_L
EV
EL
==
1co
ut<
<i;
// d
eb
ug
dell
a s
ola
vari
ab
ile i
#els
e
// D
EB
UG
_L
EV
EL
==
0(n
essu
na c
ou
t)#en
dif
retu
rn 0
;}
467
21
Co
mp
ilazio
ne c
on
diz
ion
ale
(II
)
FO
RM
E C
ON
CIS
E
#if
de
f id
en
tifi
er
pe
r#
if d
efi
ne
d i
de
nti
fie
r
#if
nd
ef
ide
nti
fie
r p
er
#if
!d
efi
ne
d i
de
nti
fie
r
ES
EM
PIO
// f
ile
ma
in.c
pp
#d
efi
ne
LIN
UX
/
/ c
om
me
nta
re q
ue
sta
rig
a e
// #
de
fin
e W
IND
OW
S
//
s
co
mm
en
tare
qu
es
ta//
pe
r c
om
pil
are
so
tto
Win
do
ws
#in
clu
de
<c
std
lib
>#
inc
lud
e <
ios
tre
am
>u
sin
g n
am
es
pa
ce
std
;
int
ma
in()
#if
de
f L
INU
X
/
/ e
qu
iva
le a
‘#
if d
efi
ne
d L
INU
X’
sys
tem
(" C
LE
AR
");
#e
lif
de
fin
ed
WIN
DO
WS
sys
tem
("C
LS
");
#e
lse
co
ut<
<"S
iste
ma
op
era
tivo
no
n s
up
po
rta
to"<
<e
nd
l;e
xit
(1);
#e
nd
ifre
turn
0;
}
DE
FIN
E A
RIG
A D
I C
OM
AN
DO
Alt
ern
ati
vam
en
te,
gli
id
en
tifi
cato
ri p
er
il p
rocesso
re s
i p
osso
no
defi
nir
e in
vece c
he i
n m
ain
.cp
p d
irett
am
en
teall
a c
hia
mata
del
co
mp
ilato
re:
// P
er
co
mp
ilare
so
tto
LIN
UX
g+
+ -
DL
INU
X m
ain
.cp
p –
o m
ain
.ex
e
// P
er
co
mp
ila
re s
ott
o W
IND
OW
S
g+
+ -
DW
IND
OW
S m
ain
.cp
p –
o m
ain
.ex
e
468
21
Co
mp
ilazio
ne c
on
diz
ion
ale
(II
I)
Alt
ro u
tilizzo
de
lla
co
mp
ila
zio
ne
co
nd
izio
na
le:
evit
are
ch
e u
no
ste
ss
o f
ile
ve
ng
a i
nc
lus
o p
iù v
olt
e i
n u
na
u
nit
à d
i c
om
pila
zio
ne
. O
gn
i fi
le d
i in
tes
tazio
ne
, p
er
es
em
pio
co
mp
les
so
.h,
do
vre
bb
e i
niz
iare
co
n le
se
gu
en
ti
dir
ett
ive
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-//
file
com
ple
sso.h
#if
nd
ef
CO
MP
LE
SS
O_H
#d
efi
ne
CO
MP
LE
SS
O_H
// q
ui va il conte
nuto
vero
e p
roprio d
el file
cla
ss
com
ple
sso{
double
re, im
;public
://
funzio
ni della
cla
sse c
om
ple
sso
};#en
dif
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-//
file
main
.cpp
#in
clu
de "
co
mp
lesso
.h"
#in
clu
de <
iostr
eam
>#in
clu
de "
co
mp
lesso
.h"
int
main
(){
co
mp
lesso
c;
retu
rn0;
} ----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-
l’ag
giu
nta
erro
nea
di
qu
esto
seco
nd
oin
clu
de
ora
no
nca
usa
più
il
pro
ble
ma
di
rid
efin
izio
ne
del
lacl
asse
com
ple
sso,
per
ché
ladef
iniz
ion
ed
ella
clas
seco
mple
sso
vie
ne
incl
usa
solo
lap
rim
av
olt
a
Università di Pisa
Corso di Laurea in Ingegneria Informatica
Note sull’ambiente di lavoro utilizzato nei
Laboratori di Fondamenti di Informatica I
a cura di
Marco Cococcioni
Un po’ di terminologia (1/2)
Processore (anche detto CPU-
Central Processing Unit)
Unità di calcolo centrale del calcolatore. Si tratta del cuore di un personal computer, perché è
l’unità che effettua tutte le operazioni fondamentali: lettura/scrittura in memoria, operazioni
aritmetiche e logiche, esecuzioni di istruzioni, ecc… I processori possono essere significativamente
diversi fra logo e generare incompatibilità di software. Alcuni dei principali produttori di processori
sono: Intel, AMD, ARM e NVIDIA.
Memoria centrale (anche detta
RAM)
Dispositivo che permette la memorizzazione temporanea dell’informazione, in unità elementari
delle celle, ciascuna delle quali è dotata di un proprio indirizzo.
Memoria di massa (anche detto
disco rigido – hard disk)
Dispositivo che consente di salvare dell’informazione in maniera persistente nel calcolatore, in
modo che sia disponibile anche dopo lo spegnimento del calcolatore.
Periferiche di ingresso e uscita Sono i dispositivi utilizzati per inserire informazioni dentro al calcolatore (tastiera, mouse, ecc…) e
per portare verso l’esterno i risultati dell’elaborazione (monitor, casse audio, ecc…)
Sistema operativo Software che serve a rendere facilmente utilizzabili al programmatore le risorse di calcolo (CPU,
memoria centrale, ecc…) e le periferiche di ingresso e uscita disponibili, senza doversi preoccupare
dei relativi dettagli hardware. In questo laboratorio si utilizzerà il sistema operativo Linux Debian.
Altri sistemi operativi popolari sono: Windows 7/8 (Microsoft), Mac Os X (Apple) (Linux e Mac Os X
sono basati sullo stesso predecessore: Unix).
File (anche detto archivio) In un calcolatore le informazioni (sequenze di bit) vengono memorizzate all’interno di archivi logici
detti file. I file si distinguono in file ASCII (sequenza di caratteri) e file binari (sequenza di
numeri/codici). Un’altra distinzione possibile è in file eseguibili e file non eseguibili. Scopo della
programmazione è scrivere file eseguibili dal calcolatore partendo da file ASCII contenenti
istruzioni di un particolare linguaggio di programmazione.
Directory (anche detta cartella o
folder)
Contenitore logico di file. Utilizzato per organizzare i file in maniera gerarchica, all’interno della
directory principale (directory root: “/”)
File System Meccanismo fornito dal sistema operativo per la creazione di file e di directory, per la gestione
della loro organizzazione logica all’interno di una struttura ad albero, per il controllo degli accessi, il
controllo dell’integrità, ecc…2 /16
Un po’ di terminologia (2/2)Directory root (‘/ ‘) Directory principale del File System (radice, letteralmente). Tutte le altre sono sotto-directory di root. Per spostarsi
nella directory di root dare il seguente comando: cd /
Directory home
Per accedere al sistema operativo occorre autenticarsi con nome utente e password. Ad ogni utente corrisponde una
directory speciale, detta directory home, dove può creare e cancellare file e directory a piacimento (infatti le
directory di sistema non sono modificabili). Tale directory è /home/nomeUtente (/home/studenti, nel nostro caso).
File Manager (anche detto file browser, o
esplora risorse)
Si tratta di un programma dotato di interfaccia grafica (GUI-Graphical User Interface) che permette di gestire i file e le
cartelle (creazione, cancellazione, spostamento) comodamente utilizzando il mouse. Linux Debian mette a
disposizione thunar come FM (thunar nomeDir).
Programma (detto anche file eseguibile o
applicazione)
Sequenza di operazioni eseguibili da un certo calcolatore (ossia da uno specifico sistema operativo ed uno specifico
processore).
GUI (Graphical User Interface) I programmi dotati di GUI sono quelli che sono dotati di una interfaccia grafica che facilita l’interazione con il
programma attraverso bottoni ed altri elementi grafici.
Console (anche detta finestra terminale,
terminal window, finestra di comando,
riga di comando)
Si tratta di un particolare programma eseguibile che permette di inviare comandi al sistema operativo (esempi: ls,
pwd, cat nomeFile). Inoltre possono essere posti in esecuzioni dei file eseguibili creati dall’utente, lanciando il
comando: ./nomeFileEseguibile
Quando si apre una finestra di comando essa ci posiziona in un punto preciso del file system (tipicamente la directory
home). La directory corrente può essere visualizzata con il comando pwd e cambiata con il comando:
cd nomeNuovaDirectory.
Ambiente Desktop Si tratta di un insieme di programmi che fornisce una interfaccia grafica al sistema operativo, presentandolo come
una sorta di scrivania (Desktop), dotata di un menu start.
In laboratorio viene utilizzato Xfce versione 4 (si avvia con il comando startxfce4).
Editor Programma che consente di creare, modificare e salvare file ASCII. L’editor di riferimento del corso è gedit. Un editor
alternativo è Mousepad, ma ne viene sconsigliato l’uso.
Compilatore e Linker Sono i due programmi chiave con cui è possibile generare un file eseguibile partendo da un file ASCII. Nel caso di
programmi C++ la compilazione ed il collegamento (linking) avvengono mediante la chiamata al programma g++.
Debugger Programma per la verifica della correttezza di un programma scritto dall’utente. In laboratorio verrà utilizzato il Data
Display Debugger.
3 /16
Ambiente di sviluppo utilizzato a laboratorio
Sistema operativo utilizzato Linux (distribuzione Debian)
Compilatore g++, versione 4.4.5
Debugger gdb (gnu debugger)
Debugger Grafico Data Display Debugger (ddd) -
interfaccia grafica per gdb
Ambiente Desktop Xfce versione 4 (startxfce4)
File Manager Grafico thunar
L’immagine «iso» di un DVD «bootable», ossia avviabile,
può essere scaricata al seguente link:
http://www.iet.unipi.it/m.cococcioni/FondamentiDiInformatica/debian.iso
Le istruzioni su come effettuare la masterizzazione dell’immagine affinché
risulti «bootable» si possono reperire qui:
http://www.iet.unipi.it/m.cococcioni/FondamentiDiInformatica
L’ambiente di sviluppo utilizzato a laboratorio
4 /16
Un’occhiata al sistema operativo Linux Debian
ed al desktop manager Xfce
Browser web
File Manager
(thunar)
Desktop
Mostra
Desktop
Per uscire
(logout)
Ora
Terminale
Menu Start
5 /16
Il Menu Start (di Xfce)
Menu start, sottomenu
impostazioni
(Xfce4 settings)
Cliccando su Keyboard è
possibile cambiare il
layout della tastiera, da
americana ad italiana
6 /16
Organizzazione delle directory (1/4)
Linux Debian implementa molto fedelmente in File System
Standard dei sistemi unix-like. Questo standard definisce il
nome e la posizione delle directory del File System
Directory root (‘/’)
Contenuto della
directory root
7 /16
Organizzazione delle directory (2/4)
Pennina usb di nome
ad esempio «marco»:
viene montata su
/media/marco
Home directory
(/home/studenti)
8 /16
Organizzazione delle directory (3/4)
Directory home per
l’utente root
(amministratore di sistema)
Directory delle periferiche
(device). Ad esempio:
/dev/null
Configurazione del sistema
(etc sta per etcetera)
Directory bin
Contiene i file eseguibili:
pwd, ls, cd, cat, ecc…
9 /16
Organizzazione delle directory (4/4)
Eseguibili per
l’amministrazione del
sistema (system binary:
init, route, ecc…)
File per il boot loader
(kernel, initrd)
File Variabili come log,
database, siti web e file
temporanei delle e-mail
10 /16
La console (finestra terminale)
Comando da eseguire (in
questo caso g++ -c es1.cpp)
Prompt dei
comandi
11 /16
Comandi base per la consoleComandi base
pwd Mostra il percorso (path) della directory corrente, ossia della working directory
(pwd sta per path of the working directory)
ls Mostra i file e le directory presenti nella directory corrente. ls –al mostra anche i file
nascosti e altre informazioni sui file/directory (dimensione, data, ecc…)
cd percorso Fa sic he la nuova directory corrente sia percorso.
Esempio: ‘cd /media’ ci porta su ‘/media’.
Invece ‘cd ..’ ci sposta nella directory superiore.
cp file1 file2 Copia file1 in file2.
mv file1 file2 Rinomina file1 come file2. Vale anche per directory.
rm nomeFile Cancella il file nomeFile. Il file non può più essere recuperato, in quanto non finisce nel
cestino.
cat nomeFile Mostra a video il file nomeFile.
mkdir nomeDir Crea la nuova directory nomeDir.
rmdir nomeDir Cancella la directory nomeDir, purché sia vuota.
rm -r nomeDir Rimuove la directory dopo averla svuotata.
./nomeFile Esegue nomeFile, qualora esso sia un file eseguibile presente nella directory corrente
(per renderlo eseguibile: chmod +x nomeFile).
clear Pulisce lo schermo.
g++ -c esX.cpp Compila esX.cpp (produce file binario in codice oggetto esX.o).
g++ esX.o Collega (linking) il file esX.o e produce l’eseguibile a.out (per eseguirlo: ./a.out).
12 /16
Altri comandi per la console
Comandi avanzati
more nomeFile Alternativa a cat: mostra a video nomeFile, una pagina per volta. Si passa alla
pagina successiva premendo la barra spaziatrice. Si esce con q.
PS1=“nuovo prompt” Comando per cambiare il prompt (es.: PS1=“$ ”).
Contrl + C Interrompe il processo in esecuzione (utile per terminare programmi errati che
vanno in ciclo o quando un programma non risponde)
ps Visualizza i programmi attualmente in esecuzione (i così detti processi). Ad ogni
processo è assegnato un numero univoco X.
ps -A Visualizza tutti i processi, compresi quelli di sistema.
kill X Termina il processo avente numero X.
tree Visualizza il sotto-albero della directory corrente in maniera grafica.
find –name nomeFile Mostra il percorso del file nomeFile qualora si trovi nella directory corrente o in
una delle sue sottodirectory (equivale al comando windows dir /s nomeFile)
Esempi: find –name *.cpp, find /home/studenti –name main.cpp
chmod +x nomeFile Rende eseguibile il file nomeFile (x sta per eXecutable). Altre opzioni
interessanti del comando sono: chmod +w nomeFile (lo rende modificabile),
chmod –w nomeFile rende il file accessibile in sola lettura.
iceweasel sitoWeb Apre la pagina web http://sitoWeb usando il browser iceweasel
epdfview nomeFilePdf Visualizza il file pdf nomeFilePdf (ePDFViewer è una alternativa ad Acrobat
Reader)
cmd --help Fornisce l’help per il comando cmd (Es: ls --help)
soffice -impress filePpt Visualizza il file Power Point filePpt , mediante Open Office Impress
13 /16
L’editor (gedit)
Può essere avviato anche da riga di comando:gedit nomefile
Un modo molto conveniente di avviare gedit è il seguente:gedit main.cpp compito.cpp compito.h & >/dev/null
14 /16
Cambiare le impostazioni di gedit
Visualizza il
numero di riga
(molto utile in
fase di debug)
Visualizza la parentesi chiusa
(aperta) corrispondente ogni volta
che il mouse si trova sopra una
parentesi aperta (chiusa)
15 /16
Il Debugger Grafico (ddd)
Può essere avviato anche da riga di comando:ddd esercizio.exe
purché l’eseguibile contenga le informazioni di debug, ossia sia stato compilato
con opzione –g: g++ -g –o esercizio.exe esercizio.cpp
16 /16
Università di Pisa
Corso di Laurea in Ingegneria Informatica
Guida al Debuggingdi programmi C, C++ e Assembler
utilizzando il Data Display Debugger (DDD)
a cura di Marco Cococcioni
Cos’è DDD
• DDD sta per Data Display Debugger
• DDD è una intefaccia grafica (GUI) per lo GNU debugger, un programma di debug disponibile alla riga di comando.
• Come si avvia DDD alla diga di comando?
• Passo 1: compilare e linkare inserendo le informazioni per il debugger (opzione -g):$ g++ -g es1.cpp –o es1.exe
• Passo 2: avviare ddd:$ ddd es1.exe &
Come appare DDD
Customizzazione di DDD
• Numero di riga: Source � Display Line Numbers
• Ancoraggio della barra degli strumenti: Edit � Preferences
Come impostare i punti di interruzione
• Prima di mettere in esecuzione il programma occorre impostare uno o più punti di interruzione (breakpoints), altrimenti una volta avviato andrebbe immediatamente alla fine
• Per impostare un breakpoint:
– click-pulsante-destro alla linea in cui si desidera impostare l’interruzione
– Selezione dell’opzione Set Breakpoint
– (ora dovrebbe comparire un segnale di stop all’inizio di quella linea)
Avvio del programma da debuggare
• In cima allo schermo, selezionare il bottone “Run” per avviare il programma
– Run può anche essere trovato nel menu ‘program’
• Il programma si arresterà in corrispondenza della riga in cui è posizionato il brackpoint– (La linea nera indica la prossima riga che verrà eseguita)
Next, Hover, e Step
• Usare Next per muoversi nel programma una riga alla volta
• Dopo ogni Next è possibile posizionare il cursore sopra una variabile per vederne il valore
– Questa operazione è chiamata hovering
• Step può essere usata in alternativa a Next
– Step fa andare il programma una riga avanti, ma nel caso di chiamata di funzioni ci fa eseguire passo passo anche la funzione
– Next fa andare il programma una riga avanti. Nel caso di chiamata di funzione, salta la chiamata e ci porta alla riga successiva alla chiamata stessa.
Correzione del programma (Bug Fixing)
• Per correggere il programma, una volta rilevato l’errore (baco):
– chiudere DDD
– aprire il file sorgente usando l’editor (gedit es1.cpp)
– correggere il programma
– ricompilare e rilinkare con opzione -g
– riaprire l’eseguibile con DDD
Inspezione delle variabili (1/2)
• Fare click sul pulsantedestro sopra una variabilee poi scegliere Display nomeVariabile
– questo provoca l’apertura del display editor
• Fare ancora click sulpulsante destro sopra al nome della variable e scegliere
Display *nomeVariabile
(notare l’asterisco)
Inspezione delle variabili (2/2)
• Le variabili possono essere visualizzate nell’area di display in diverse rappresentazioni:
– /t nomeVar : binario
– /d nomeVar : decimale
– /x nomeVar : esadecimale
– /o nomeVar : ottale
• Nel caso di programmi assembler si può visualizzare nella finestra di display (quella in alto) il contenuto dei registri come fossero variabili:
– /t $eax: mostra eax in bin
– /d $ebx: mostra ebx in decimale, ecc…
• Il contenuto dei registri può essere visualizzato anche nella finestra console di dello GNU debugger (GDB), nel seguente modo:
– i r eax (che sta per info register eax)
• NB1: qui non serve $, né %, prima del nome del registro
• NB2: esiste una limitazione: il contenuto dei registri a 8 e 16 bit (al, ah, ax, bl, …) non può essere visualizzato
Per tornare indietro nell’esecuzione
• Per andare indietro rispetto alla linea di interruzione
– clickare e trascinare la freccia in alto, alla linea desiderata