Fondamenti Di Programmazione (Parte - 1)
Fondamenti Di Programmazione (Parte - 1)
Fondamenti di Programmazione
...
• oppure su Amazon
Orario
Lu Ma Me Gi Ve Sa
Analisi Fond. di Progr. Algebra Analisi
8:30/9:30 Mat. I F9 (teoria) Lineare F9 Mat. I F9
Analisi Fond. di Progr. Algebra Analisi
9:30/10:30 Mat. I F9 (teoria) Lineare F9 Mat. I F9
Algebra Fond. di Progr. Analisi Analisi
10:30/11:30 Lineare F9 (teoria) Mat. I F9 Mat. I F9
Fond. di
Progr. Analisi Analisi Algebra
11:30/12:30 (teoria) Mat. I F9 Mat. I F9 Lineare F9
Fond. di
Progr. Analisi Analisi Algebra
12:30/13:30 (teoria) Mat. I F9 Mat. I F9 Lineare F9
14:00/15:00
Fond. di
Progr.
15:00/16:00 (teoria) F9
Fond. di
Progr.
16:00/17:00 (LAB) F9
Fond. di
Progr.
17:00/18:00 (LAB) F9
Argomenti del corso
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.
Rappresentazione dell’informazione
Rappresentazione dei caratteri, dei numeri naturali, dei numeri interi e dei numeri reali.
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.
Programmare in C++
Classi. Operatori con oggetti classe. Altre proprietà delle classi. Classi per l’ingresso e per
l’uscita.
Esempi di algoritmi:
1
Calcolatore elettronico come risolutore di problemi
2
Algoritmo (1)
1. Operazioni sequenziali
Realizzano una singola azione. Quando l’azione è terminata passano all’operazione
successiva.
2. Operazioni condizionali
Controllano una condizione. In base al valore della condizione, selezionano
l’operazione successiva da eseguire.
3. Operazioni iterative
Ripetono l’esecuzione di un blocco di operazioni, finchè non è verificata una
determinata condizione.
3
Algoritmo (2)
risultati
dati
esecutore
4
Algoritmo (3)
5
Algoritmo (4)
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
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
7
Algoritmo (6)
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
8
Algoritmo (7)
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)
9
Algoritmo (8)
Efficienza:
– un algoritmo è efficiente se perviene alla soluzione del compito cui è
preposto nel modo più veloce possibile, compatibilmente con la sua
correttezza.
10
Programmazione
La formulazione testuale di un algoritmo in un linguaggio comprensibile ad un
calcolatore è detta PROGRAMMA.
11
Linguaggi di Programmazione (1)
Si può stabilire quali sono gli elementi linguistici primitivi, quali sono le frasi
lecite e se una frase appartiene al linguaggio.
12
Linguaggi di Programmazione (2)
13
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*
14
Grammatiche
15
Grammatica BNF (1)
GRAMMATICA BNF (Backus-Naur Form) è una grammatica le cui regole di
produzione sono della forma
X
A1 A2 ... An
dove X è un simbolo non terminale ed A1 A2 ... An è una sequenza di simboli
(terminali oppure non terminali).
X
one of // one of è un costrutto del metalinguaggio. Indica che X
A1 A2 ... An // può assunere una unica alternativa tra A1, …, An
16
Grammatica BNF (2)
G = <V, VN, P, S>
frase
soggetto verbo
articolo nome
il lupo mangia .
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 in BNF.
18
Altri costrutti del matalinguaggio: gli elementi opzionali (1/2)
Analogamente
X
A1 A2|opt
19
Altri costrutti del matalinguaggio: la sequenza (2/2)
20
Esempio di grammatica per produrre numeri interi (1/2)
Come vengono scritti i numeri interi, usando le cifre arabe alle quali siamo abituati?
Come si fa a dare un procedimento per produrre tutti i possibili numeri arabi interi
corretti, ossia il linguaggio L dei numeri arabi interi?
21
Esempio di grammatica per generare numeri interi (2/2)
Una possibile grammatica per i numeri interi
V = {-, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} // alfabeto, contenente i simboli terminali
VN = {cifra, cifra-seq, intero} // simboli non terminali
S = intero // simbolo non terminale iniziale
Regole di produzione P
cifra
one of
0123456789
cifra-seq Notare che il ‘-’ è opzionale e può
cifra cifra-seq|opt comparire solo all’inizio
intero
-|opt cifra-seq
Esempi: Con la grammatica introdotta non abbiamo univocità
-23 della rappresentazione, però abbiamo la garanzia di
4506 costruire/accettare solo numeri interi validi
0023 // equivale a 23
-067 // equivale a -67
Numeri come --56 oppure -87-4 oppure 634- non verranno nè prodotti, nè accettati.
22
Che aspetto avrà la grammatica per il linguaggio C++?
Diamo ora un piccolo assaggio di come potrebbe essere fatta una grammatica
per il linguaggio C++ (la daremo più avanti)
int main(){
istruzione-seq
}
istruzione-seq
istruzione istruzione-seq|opt
istruzione
one of
definizione // int a = 3;
selezione // if (a == 5) ...
iterazione // while (a < 10 ) ...
23
Il più semplice programma C++
24
Struttura del generico programma C++
<istruzione 1>
<istruzione 2>
...
<istruzione n>
return 0;
}
Un programma C++ sorgente è una sequenza di caratteri che deve essere salvata
su disco come file di testo, assegnandogli un nome
Esempio:
programma1.cpp // è importante usare l’estensione .cpp per i sorgenti C++
25
Sintassi e semantica
Scrivere un programma sintatticamente corretto non implica che il programma
faccia quello per cui è stato scritto
3) esecuzione
28
I tre passi su CLion: Editing, Compilazione ed Esecuzione
29
Laboratorio di C++ basato su CLion
Durante il primo laboratorio verrete assistiti nella:
30
Rappresentazione dell’informazione
31
Rappresentazione dell’Informazione (1/2)
32
Rappresentazione dell’Informazione (2/2)
Esempio: n=2.
00
01
10
11
33
Calcolatore e Informazione
Ca c at re
34
Rappresentazione del testo (1/2)
Seque e Caratteri
00110000 0 01000011
00110001 1 01100001
00110010 2 01110010
... ... 01101111
00111001 9 00100000
... ... 01100001
01000001 A 01101110 Caro amico,
01000010 B 01101001
01000011 C 01100011
... ... 01101111
01100001 a 00101100
01100010 b
... ...
35
Rappresentazione del testo (2/2)
36
Rappresentazione dei numeri naturali (1/14)
Base dieci
Cifre: 0, 1, 2, 3, 4, 6, 7, 8, 9
Rappresentazione posizionale
(123)dieci significa 1102 + 2101 + 3100
Base due
Cifre: 0, 1
Rappresentazione posizionale
37
Rappresentazione dei numeri naturali (2/14)
BASE CIFRE
due 01
ci que 01234
tt 01234567
sedici 0123456789ABCDEF
38
Rappresentazione dei numeri naturali (3/14)
I numeri naturali maggiori o uguali a possono essere rappresentati in maniera unica
da una sequenza di cifre secondo la rappresentazione posizionale.
Se un numero naturale N è rappresentato in base dalla sequenza di cifre:
a p -1 a p - 2 … a 1 a 0
allora N può essere espresso come segue:
p-1
i p-1 p-2 2
Ν = ai β = ap-1 β + ap-2 β +...+ a2 β + a1 β + a0
i=0
39
Rappresentazione dei numeri naturali (4/14)
20 1
21 2
$sserva i e1
22 4
(a rapprese ta i e i base due di u a qua u que
23 8
24 16
p te a di due si pu) tte ere i ediata e te
25 32 uti i a d u u seguit da p eri* se p + a p te a,
26 64
27 128
2p (10000)due
28 256 p
29 512
210 1024 1 Kilo
Esempio:
... ...
40
Rappresentazione dei numeri naturali (5/14)
Data una sequenza di cifre in base , a quale numero naturale
corrisponde?
Seque e Seque e
di si b i di si b i
(i base ) (i base 10)
a p -1 a p - 2 … a 1 a 0 N?
6568 6 ·8 2 6 5 ·8 1 6 6 · 8 0 430
A0316 10 ·16 2 6 0 ·16 1 6 3 ·16 0 2563
11012 1 ·2 3 6 1 ·2 2 6 0 ·2 1 6 1 ·2 0 13
41
Rappresentazione dei numeri naturali (6/14)
Seque e Seque e
di si b i di si b i
(i base ) (i base 10)
a p -1 a p - 2 … a 1 a 0 N
42
Rappresentazione dei numeri naturali (7/14)
fi e
(10111)due
a4a3a2a1a0
43
Rappresentazione dei numeri naturali (8/14)
Sia mod il resto e div il quoziente della divisione intera
Esempio:
Procedimento “Div & Mod” 23 div 2 = 11
23 mod 2 = 1
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 NB: Il risultato
... della mod è sempre
una cifra valida in base ,
qp = qp-1 div ap-1 = qp-1 mod perché restituisce sempre
un numero fra 0 e -1
(estremi inclusi).
fino a quando qp diventa uguale a 0
I i i q0 9
QUOZIENTE REST$
q0 = N 4
div
q1 = q0 / a0
div
q2 = q1 / a1
div
q3 = q2 / a2
div
q4 = q3 / a3
div
q5 = q4 / a4
div
q6 = q5 / a5
q7 = 0 a6
fi e
N = a6 · 6 + a5 · 5 + a4 · 4 + a3 · 3 + a2 · 2 + a1 · 1 + a0 · 0
45
Rappresentazione dei numeri naturali (10/14)
46
Rappresentazione dei numeri naturali (11/14)
A = 1111111111111111 (65535)
B = 1111111111111111 (65535)
11111111111111110 (131070)
47
Rappresentazione dei numeri naturali (12/14)
1
Da base X a base Y
Rapprese ta i i
;u eri base X
;atura i
2 Rapprese ta i i
base Y
49
Rappr. Naturali - Cambio di base (14/14)
(FFE4)sedici
(657) tt (A03)sedici
( 110 101 111 )due (1010 0000 0011)due (1111 1111 1110 0100)due
50
Numeri Interi (1/14)
a=+3 => segno_a = 0, ABS_a = 011 (naturale 3 rappresentato su 3 cifre) => A=0011
a= -3 => segno_a = 1, ABS_a = 011 (naturale 3 rappresentato su 3 cifre) => A=1011
51
Numeri Interi (2/14)
52
Numeri Interi (3/14)
4
A 0,1 a
0 0000 +0
1 0001 +1
2 0010 +2 Rappresentazione di interi
3 0011 +3
in modulo e segno su
4 0100 +4
5 0101 +5 calcolatore con p=4 bit
6 0110 +6
7 0111 +7
8 1000 -0
9 1001 -1
10 1010 -2 u er egativ bit pi sig ificativ
11 1011 -3 de a rapprese ta i e ugua e a 1
12 1100 -4
13 1101 -5 ( er rapprese tat due v te)
14 1110 -6
15 1111 -7
53
Numeri Interi (4/14)
•p 9 4 ?77*67]
•p 9 8 ?7127*6127]
•p 9 16 ?732767*632767]
+B pri a di app icare ’a g rit per a9CA cc rre verificare che a sia
rapprese tabi e su p bit* a tri e ti ’a g rit c duce a risu tati sbag iati
Ad ese pi ,
te ta d di rapprese tare a979 su p94 bit* si ttie e,
A9(seg a* ABS a)* d ve seg a91 e ABS a 9 9
a i atura e 9 (1001) + rapprese tabi e su 3 bit!!
54
Numeri Interi (5/14)
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
55
Numeri Interi (6/14)
a = (ap-1 == 0) ? +A : -(duep-A)
56
Numeri Interi (7/14)
4
A 0,1 a
0 0000 0
1 0001 +1
Rappresentazione di interi
2 0010 +2 in complemento a due su
3 0011 +3 calcolatore con p=4 bit
4 0100 +4
5 0101 +5
6 0110 +6 A che i quest cas ,
7 0111 +7
8 1000 -8 u er egativ bit pi sig ificativ
9 1001 -7 de a rapprese ta i e ugua e a 1
10 1010 -6 I tre* a differe a de a
11 1011 -5 rapprese ta i e i du e seg *
12 1100 -4 vie e sprecata essu a
13 1101 -3 rapprese ta i e ( er +
14 1110 -2 rapprese tat u a v ta s a)
15 1111 -1
57
Numeri Interi (8/14)
58
Numeri Interi (9/14)
Terza Rappresentazione: rappresentazione con bias
Trasformazione 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 come
un naturale su p bit. La quantità (2p-1 - 1) è detta bias e A = a + 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 = 0111
a = 1 => 1+(24-1-1) = 8, e il naturale 8 ha rappr. 1000 su 4 bit => A = 1000
a = 8 => 8+(24-1-1) = 15, e il naturale 15 ha rappr. 1111 su 4 bit => A = 1111
a = -1 => -1+(24-1-1) = 6, e il naturale 6 ha rappr. 0110 su 4 bit => A = 0110
a = -2 => -2+(24-1-1) = 5, e il naturale 5 ha rappr. 0101 su 4 bit => A = 0101
a = -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
NB2: come si vedrà nelle prossime slides, questa rappresentazione viene
utilizzata nella rappresentazione dei numeri reali in virgola mobile
59
Numeri Interi (10/14)
NB: Lo zero viene rappresentato una sola volta (come accade in compl. a 2).
60
Numeri Interi (11/14)
+B pri a di app icare ’a g rit per a2>A cc rre verificare che a sia
rapprese tabi e su p bit3 a tri e ti ’a g rit c duce a risu tati sbag iati.
61
Numeri Interi (12/14)
62
Numeri Interi (13/14)
-2 1110
+1 c p! 0001 S at re per
a due atura i
1111
-1
"pera i i su "pera i i su e
u eri rapprese ta i i
63
Numeri Interi (14/14)
7+5=12 0 1 1 1 + (+7)
0 1 0 1 = (+5) 7-1=6 0 1 1 1 + (+7)
------------------------------ 1 1 1 1 = (-1)
1 1 0 0 (-4) overflow! ------------------------------
1 0 1 1 0 (+6) corretto!
-6 -8 = -14 1 0 1 0 + (-6)
1 0 0 0 = (-8)
-------------------------------
1 0 0 1 0 (+2) overflow!
64
Numeri Reali
S tt i sie e Seque e
discret dei ;u eri di bit
Ra i a i
"verf w "verf w
U derf w
65
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.
Siano p i bit per rappresentare r: f per la parte frazionaria e (p-f) i bit la parte
intera:
p-f-1
i p-f-1 0 1 f
R = ap-f-1…a0 a-1...a-f r ai β = a β +...+a0 β a-1 β ...a-f β
p-f-1
i =-f
parte
frazionaria
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:
66
Numeri Reali – Virgola fissa(2/5)
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
Ese pi
p = 16 e f = 5
r = +331,6875
67
Numeri Reali – Virgola fissa(3/5)
QU$*IE+TE REST$
331 7
165 1
82 1
41 0
20 1
10 0
5 0
2 1
1 0
0 1
68
Numeri Reali – Virgola fissa(4/5)
F I
f719F(0 68758291.375)90 375 a719I(1 375)91
f729F(0 3758290.75)90 75 a729I(0 75)90
f729F(0 758291.5)90 5 a739I(1 5)91
f739F(0 58291.0)90 a749I(1 0)91
69
Numeri Reali – Virgola fissa(5/5)
ERRORE DI TRONCAMENTO F I
f719F(0 38290.6)90 6 a719I(0.6)90
f729F(0 68291.2)90 2 a729I(1 2)91
Rappresentare r = 2.3 con f = 6. f739F(0 28290.4)90 4 a739I(0 4)90
f749F(0 48290.8)90 8 a749I(0 8)90
f759F(0 88291.6)90 6 a759I(1 6)91
f769F(0 68291.2)90 2 a769I(1 2)91
70
Numeri Reali – Virgola mobile(1/10)
ta i e Scie tifica
e
r 9 a tissaF e 9 esp e te
(’i terva di rapprese tabi it3 + fissat da u er di cifre
de ’esp e te
(’accurate a + deter i ata da u er di cifre de a a tissa
Se e sceg ie u a i partic are* che verr3
Diverse rapprese ta i i
chia ata f r a r a i ata*i d da
3 14 0 314 1061 31 4 1071 avere u a rapprese ta i e u ica
71
Numeri Reali – Virgola mobile(2/10)
+1.11001·due+11 … … +111001·due-10
(alcune possibili rappresentazioni in virgola mobile)
72
Numeri Reali – Virgola mobile(3/10)
73
Numeri Reali – Virgola mobile(4/10)
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)
Esempio 2
R = {0,01111,0000000001} rappresenta il numero reale positivo:
f = F/2G = 1/2G = due-dieci=0.0009765625
e = E -(2K-1 - 1) = 01111-01111 = 15-15=0
74
Numeri Reali – Virgola mobile(5/10)
76
Numeri Reali – Virgola mobile(7/10)
77
Numeri Reali – Virgola mobile(8/10)
78
Numeri Reali – Virgola mobile(9/10)
79
Numeri Reali - Virgola mobile (10/10)
half precision
r1 r2
0692715 +∞ ≅ 2+17
06927127 +∞ ≅ 2+129
0
single precision
80