Sei sulla pagina 1di 60

Corso di

‘Fondamenti di Informatica’
‘Tecnologie dell’Informatica’
prof.Longo Fabrizio

Accademia delle Belle Arti –


1
Lecce - Longo Fabrizio
Seconda parte:
Come nasce un programma?
I linguaggi di programmazione
e gli algoritmi

Accademia delle Belle Arti – Lecce - Longo


2
Fabrizio
Prima Parte:
A che punto siamo arrivati?

“La parte precedente è stata pesantissima: non


mi ricordo nulla!”
Accademia delle Belle Arti – Lecce - Longo
3
Fabrizio
Lezione scorsa
• Come funziona un computer?
– processore
– memoria
– programmi:
• serie di istruzioni elementari
• vengono eseguiti dal computer in linguaggio macchina
(istruzioni binarie)

Accademia delle Belle Arti – Lecce - Longo


4
Fabrizio
Seconda parte:
Come si scrivono i programmi?

“Non vorrà mica farci scrivere dei programmi


questa qua, vero?!”
Accademia delle Belle Arti – Lecce - Longo
5
Fabrizio
Linguaggio macchina
• Un programma è una serie di istruzioni
elementari codificate in linguaggio macchina
– la serie è molto lunga (anche milioni di righe di
codice) che prende il nome di oggetto binario
– ricordiamoci: un’istruzione è composta da 4 byte:

– Ad es. 10011111 00101000 00000011 01110100


• Scrivere un programma direttamente in
linguaggio macchina è un processo:
– lungo e soggetto ad errori
– praticamente impossibile
Accademia delle Belle Arti – Lecce - Longo
Fabrizioper programmi complessi!
6
Assembly
• E’ possibile scrivere istruzioni più semplici:
ADD 2000 2040 2080  assembly
→ usiamo lettere e numeri invece che bit
• Ognuna di queste istruzioni viene poi
trasformata in un’istruzione in linguaggio
macchina,ossia sequenze di 0 e 1:
– il programma che effettua la trasformazione in
linguaggio macchina si chiama assembler
– il linguaggio si chiama assembly
Accademia delle Belle Arti – Lecce - Longo
7
Fabrizio
“Questo l’ho capito!”
• “Voi informatici siete degli
scansafatiche e, al posto che
scrivere direttamente in
linguaggio macchina (che è
l’unica cosa che i computer
possono eseguire), scrivete in
assembly (che è un po’ più
semplice) e poi chiedete
all’assembler di trasformarlo in
linguaggio macchina.”
Accademia delle Belle Arti – Lecce - Longo
8
Fabrizio
Tutto in assembly?
• Abbiamo detto:
– l’assembler trasforma un’istruzione scritta in
assembly in una istruzione scritta in linguaggio
macchina
– Il file binario così creato (l’insieme delle istruzioni di
un programma) è lungo anche milioni di istruzioni.
E’ il file eseguibile!
• Quindi, per scrivere un programma, dovremmo
scrivere migliaia (anche milioni) di istruzioni in
assembly…
– E’ ancora troppo difficile!
Accademia delle Belle Arti – Lecce - Longo
9
Fabrizio
Linguaggi di programmazione di
alto livello
• I linguaggi di programmazione di alto livello
permettono di specificare istruzioni in
linguaggi più semplici per l’uomo:
– istruzioni più complesse rispetto alle istruzioni
elementari eseguite dal processore
– il compilatore trasforma ogni istruzione di un
programma di alto livello in una o più (spesso
molte di più!) istruzioni elementari

Accademia delle Belle Arti – Lecce - Longo


10
Fabrizio
Codifica del software

Accademia delle Belle Arti – Lecce - Longo


11
Fabrizio
Quanta automazione?
• Il passaggio dal codice di alto livello al codice
in linguaggio macchina è automatico
• E’ possibile semplificare ulteriormente la
creazione di codice?
– in parte sì (ad esempio, riutilizzo del codice)
– in buona parte no: è un’operazione che deve
essere svolta manualmente dai programmatori

Accademia delle Belle Arti – Lecce - Longo


12
Fabrizio
Quanto è difficile?

• E’ difficile scrivere codice di alto livello?


– molto meno che scrivere il codice in linguaggio
macchina ☺
– semplici programmi sono facili da scrivere
• un corso universitario è sufficiente per imparare le basi
– programmi complessi e/o di grandi dimensioni sono
più difficili da scrivere
• spesso contengono errori
Accademia delle Belle Arti – Lecce - Longo
13
Fabrizio
Java (Sun)

Accademia delle Belle Arti – Lecce - Longo


14
Fabrizio
Java o Kotlin su Android Studio
(Google)

Accademia delle Belle Arti – Lecce - Longo


15
Fabrizio
Visual C# (Microsoft)

Accademia delle Belle Arti – Lecce - Longo


16
Fabrizio
XCode (Apple)

Accademia delle Belle Arti – Lecce - Longo


17
Fabrizio
Errori dei programmi

Accademia delle Belle Arti – Lecce - Longo


18
Fabrizio
Errori dei programmi (2)

Accademia delle Belle Arti – Lecce - Longo


19
Fabrizio
Errori dei programmi (3)

Accademia delle Belle Arti – Lecce - Longo


20
Fabrizio
Terza Parte:
Cosa sono gli algoritmi

Non c’entrano nulla con i “logaritmi”!


Accademia delle Belle Arti – Lecce - Longo
21
Fabrizio
Gli “algoritmi” che conoscete già
• Serie di istruzioni finalizzate a conseguire uno
scopo:
– come si cucina una torta?
– come si fa una somma in colonna?
– come si monta un mobiletto?
• Queste sono procedure, non algoritmi, ora
scopriamo la differenza...

Accademia delle Belle Arti – Lecce - Longo


22
Fabrizio
Cos’è un algoritmo
• Procedimento che permette di risolvere un
dato problema attraverso una serie di passi
eseguiti in una sequenza specificata:
– assume in input delle informazioni
– produce in output delle informazioni

Problema

Input Algoritmo Output


Accademia delle Belle Arti – Lecce - Longo
23
Fabrizio
Algoritmo: 5 proprietà fondamentali
• Input specificato:
– bisogna specificare cosa l’algoritmo assume in
input
• Output specificato:
– quali risultati può generare l’algoritmo
• Determinatezza
• Efficacia
• Terminazione
Accademia delle Belle Arti – Lecce - Longo
24
Fabrizio
Determinatezza
• L’algoritmo specifica precisamente la sequenza
di operazioni
• Ogni operazione deve avere una sola
interpretazione possibile
• Esempio:
– “eseguire i passi necessari” → “eseguire i passi 1,
2, 5”
– “aggiungete un po’ di sale” → “aggiungete 4g di
sale”
Accademia delle Belle Arti – Lecce - Longo
25
Fabrizio
Efficacia (o calcolabilità)
• L’algoritmo deve poter essere eseguito in
modo meccanico
• Deve essere possibile calcolare ogni
operazione
• Ad ogni passo si ha la conoscenza:
– degli input dell’algoritmo
– dei risultati calcolati nei passi precedenti

Accademia delle Belle Arti – Lecce - Longo


26
Fabrizio
Terminazione
• Come potrebbe non terminare una
procedura?
– alcune operazioni possono essere ripetute
– se fossero ripetute all’infinito, la procedura
potrebbe non terminare

Accademia delle Belle Arti – Lecce - Longo


27
Fabrizio
Programmi e algoritmi
• Un programma è un algoritmo espresso in un
particolare linguaggio di programmazione:
– un programma implementa un algoritmo
– un algoritmo può essere implementato in diversi
modi
• Gli informatici studiano principalmente gli
algoritmi
– ma anche come possono essere implementati

Accademia delle Belle Arti – Lecce - Longo


28
Fabrizio
Programmi e algoritmi

Problema
possono esistere più algoritmi
per risolvere lo stesso problema

Input Algoritmo Output


un algoritmo può essere
implementato con linguaggi diversi

Programma

Accademia delle Belle Arti – Lecce - Longo


29
Fabrizio
Dal problema al programma
Espressi in
Problema linguaggio
naturale
lavoro umano

Espressi in
Algoritmo
linguaggi formali
implementazione
(fatta dall’uomo)

Codice di Compilazione e File eseguibile


assemblamento (ling. macchina)
alto livello
30
Linguaggi naturali vs formali
• Linguaggi naturali:
– es: italiano, inglese, etc...
– sono soggetti ad interpretazioni
• Linguaggi formali:
– es: assembly, C++, Java, Python sono
univocamente interpretabili

Accademia delle Belle Arti – Lecce - Longo


31
Fabrizio
Terza Parte:
Pensiamo in modo algoritmico!

“Mmm, qua diventa difficile....”


Accademia delle Belle Arti – Lecce - Longo
32
Fabrizio
Prendiamo un problema reale
• Abbiamo dei CD in una scaffalatura
– uno spazio per ogni CD
• Ogni CD ha un prezzo
• Vogliamo mettere il CD con il prezzo minore
all’inizio della scaffalatura (a sinistra)
• Definiamo l’algoritmo

Accademia delle Belle Arti – Lecce - Longo


33
Fabrizio
Input e Output
• Input: una sequenza di CD che riempie
completamente una scaffalatura orizzontale.
• Es: 5 2 4 1

• Output: al termine, i CD in input sono in un


ordine tale che il CD con il prezzo minore è
nella prima posizione a sinistra dello scaffale.
• Es: 1 5 4 2
Accademia delle Belle Arti – Lecce - Longo
34
Fabrizio
Procedura (ALG1)
1. Sia alfa la prima posizione a sinistra
2. Sia beta la posizione appena a destra di alfa
3. Se il CD in posizione beta costa meno del CD
in posizione alfa, allora scambia il CD in
posizione alfa con il CD in posizione beta
4. Se c’è almeno una posizione a destra di beta,
sposta beta a destra di una posizione e torna
al passo 3, altrimenti termina

Accademia delle Belle Arti – Lecce - Longo


35
Fabrizio
Esempio
• Input: 5 2 4 1
• Passo 1: 5 2 4 1
alfa

• Passo 2: 5 2 4 1
alfa beta

• Passo 3: 2 5 4 1
alfa beta

• Passo 4: 2 5 4 1 + torna al passo 3


alfa beta 36
Esempio (cont.)
• Passo 3: 2 5 4 1
alfa beta

• Passo 4: 2 5 4 1 + torna al passo 3


alfa beta

• Passo 3: 1 5 4 2
alfa beta

• Passo 4: termina.

Accademia delle Belle Arti – Lecce - Longo


37
Fabrizio
La procedura è un algoritmo?
• Input e un output sono definiti
• Ogni istruzione è deterministica
• Ogni istruzione può essere calcolata
• L’algoritmo termina:
– perché ad ogni iterazione del ciclo (istruzioni 3 e
4) beta indica una posizione sempre più a destra e
le posizioni sono finite
• Dunque la procedura ALG1 è un algoritmo
Accademia delle Belle Arti – Lecce - Longo
38
Fabrizio
Diagramma di flusso
• Serve per rappresentare in forma grafica i
passi di un algoritmo
– permette di visualizzare i blocchi di istruzioni, le
scelte, le iterazioni, …
• Serve ai programmatori, non ai computer…

Accademia delle Belle Arti – Lecce - Longo


39
Fabrizio
Diagramma di flusso Inizio

Beta è la posizione Alfa è la prima


successiva posizione a sinistra

CD in pos.
beta costa sì Scambia CD in pos
meno CD in alfa e beta
pos. alfa?

no

C’è almeno
Sposta beta a sì no
una
destra di una Fine
posizione
posizione
dopo beta?
40
Ordinamento dei CD
• Consideriamo un nuovo problema:
– vogliamo ordinare tutti i CD in base al loro prezzo
• Possiamo:
– trovare un metodo completamente nuovo
oppure
– estendere il metodo precedente

Accademia delle Belle Arti – Lecce - Longo


41
Fabrizio
Input e Output
• Input: una sequenza di CD che riempie
completamente una scaffalatura orizzontale.
• Es: 5 2 4 1

• Output: al termine tutti i CD in input sono


ordinati a seconda del loro prezzo, da sinistra
(il più basso) a destra (il più alto).
• Es: 1 2 4 5
Accademia delle Belle Arti – Lecce - Longo
42
Fabrizio
Idea!

• Eseguo l’algoritmo precedente (chiamiamolo


ALG1) una volta e
metto il CD più economico a sinistra
• Poi lo eseguo un’altra volta, considerando
tutte le posizioni tranne la prima (il più
economico è già nella prima posizione)
– metto il secondo più economico al secondo posto
• Continuo fino a quando non l’ho fatto per
tutti! Accademia delle Belle Arti – Lecce - Longo
43
Fabrizio
Esempio
• Applico ALG1 a 5 2 4 1
– ottengo: 1 5 4 2
• Nella prima posizione c’è il CD giusto
• Applico ALG1 a 5 4 2
– ottengo: 2 5 4
• Nella seconda posizione c’è il CD giusto
• Applico ALG1 a 5 4
– ottengo: 4 5
• Nella 3° e 4° posizione ci sono i CD giusti
Accademia delle Belle Arti – Lecce - Longo
44
Fabrizio
Procedura OrdinaCD (algoritmo)
1. Sia alfa la prima posizione a sinistra
2. Sia beta la posizione appena a destra di alfa
3. Se il CD in posizione beta costa meno del CD in
ALG1

posizione alfa, allora scambia il CD il posizione alfa


con il CD in posizione beta
4. Se c’è almeno una posizione a destra di beta, sposta
beta a destra di una posizione e torna al passo 3
5. Se ci sono almeno due posizioni a destra di alfa,
sposta alfa alla posizione appena a destra di alfa e
torna al passo 2
6. Termina
Accademia delle Belle Arti – Lecce - Longo
45
Fabrizio
Per capire meglio
• Alfa è la posizione in cui vogliamo mettere il CD più
economico rimasto tra quelli da considerare
– all’inizio è la prima posizione, poi si sposta verso destra
• Ogni volta che cambio il valore di alfa, beta
“scorre” tutti quelli successivi alla ricerca del CD
più economico rimasto

Accademia delle Belle Arti – Lecce - Longo


46
Fabrizio
Prova tu!
• Inventati qualche input e prova ad “eseguire a
mano” l’algoritmo OrdinaCD:
– esempio: 7 2 9 3 4

• Prova a disegnare il diagramma di flusso di


OrdinaCD:
– parti dal diagramma di flusso di ALG1 e modificalo

Accademia delle Belle Arti – Lecce - Longo


47
Fabrizio
OrdinaCD è un algoritmo?
• Input e un output sono definiti
• Ogni istruzione è deterministica
• Ogni istruzione può essere calcolata
• L’algoritmo termina:
– perché beta indica una posizione sempre più
spostata a destra (e le posizioni sono finite!)
– ogni volta che beta arriva all’ultima posizione, alfa
viene spostato a destra (e le posizioni sono finite!)
• Dunque la procedura OrdinaCD è un algoritmo
Accademia delle Belle Arti – Lecce - Longo
48
Fabrizio
Quarta parte:
La complessità computazionale

“Ahi, se si chiama “complessità”,


tanto facile non deve essere…”
Accademia delle Belle Arti – Lecce - Longo
49
Fabrizio
Avremmo potuto usare un
algoritmo diverso?
• Certo, esistono diversi algoritmi diversi per
ordinare
• “Ma allora qual è il migliore?”
• Quello che utilizza meglio le risorse del
computer:
– tempo di calcolo
– spazio di memoria

Accademia delle Belle Arti – Lecce - Longo


50
Fabrizio
“Qua stai barando!”
• “Mi hai appena detto che un
algoritmo è una cosa teorica,
indipendente da come viene implementata ed
eseguita su un computer!”
• “Non mi puoi mica venire a dire che per
confrontare due algoritmi vai a guardare
quanto tempo ci mettono le loro
implementazioni (cioè i programmi) ad essere
eseguite su un computer!”
Accademia delle Belle Arti – Lecce - Longo
51
Fabrizio
La complessità computazionale
• E’ possibile misurare la complessità di un
algoritmo, indipendentemente dalla sua
implementazione o dal computer sul quale
viene eseguito
• Il tempo non è misurato in termini di secondi
ma in termini di altri parametri:
– nell’esempio dei CD, potremmo scegliere il
numero di scambi che dobbiamo fare

Accademia delle Belle Arti – Lecce - Longo


52
Fabrizio
Esempio: la complessità di ALG1
• Assumiamo che il nostro input sia composto
da n CD: quante volte eseguiamo il ciclo per
confrontare il prezzo di due CD?
• Soluzione: “circa” n
– “circa”: non ci interessa il risultato esatto (es: n-1
o 2n), ci interessa il comportamento asintotico
• Il tempo di calcolo di ALG1 è lineare nella
dimensione dell’input:
– se raddoppia l’input (il numero di CD), raddoppia il
tempo necessario per calcolare l’output
Accademia delle Belle Arti – Lecce - Longo
53
Fabrizio
Esempio: la complessità di OrdinaCD
• Vai a rivedere i due algoritmi: quale sarà la
complessità di OrdinaCD?
• Per spostare alfa a destra di una posizione
bisogna eseguire ALG1 una volta
– alfa deve essere spostato a destra n volte
• Soluzione: la complessità di ordinaCD è di n2
– se raddoppia il numero di CD in input, il tempo
necessario per completare l’algoritmo è di 4 volte
tanto
Accademia delle Belle Arti – Lecce - Longo
54
Fabrizio
“Non mi sembra così importante”
• “I computer sono così veloci, cosa vuoi che mi
interessi se un algoritmo risolve un problema
un po’ più velocemente di un altro?”

– esistono problemi così “difficili” che, se non si


trovano algoritmi efficienti, la loro
implementazione (cioè il programma) potrebbe
richiedere anni di esecuzione (anche migliaia di
anni!) prima di trovare la soluzione

Accademia delle Belle Arti – Lecce - Longo


55
Fabrizio
Un esempio: la ricerca (1)
• Problema: ricercare un valore in un elenco di
n elementi
• Soluzione semplice:
– scorro tutti i valori fino a quando non trovo quello
che mi serve
– complessità computazione: n (lineare)
• Soluzione avanzata (richede che l’elenco sia
ordinato)
– complessità computazionale: log2 n (logaritmica)
Accademia delle Belle Arti – Lecce - Longo
56
Fabrizio
Un altro esempio: la ricerca (2)
• Per elenchi piccoli, quasi non fa differenza
– ma per elenchi lunghi, la differenza è enorme!
• Esempio: n = 1012 = 1 000 000 000 000
– soluzione semplice: 1 000 000 000 000 di
confronti
– soluzione avanzata: log2 1012 ≈ 40
• Esempio: se Google usasse la soluzione semplice ci
metterebbe anni per effettuare una sola ricerca...
invece ci mette pochi millisecondi!
Accademia delle Belle Arti – Lecce - Longo
57
Fabrizio
Un «semplice» esercizio
Siano dati tre numeri interi (relativi) che
non conosciamo ma che chiamiamo per
comodità A, B e C. Trovare un algoritmo
che individui sempre il più grande tra i tre.

Se A=1 B=-2 C=0 allora A


Se A=-3 B=-1 C=0 allora C
Accademia delle Belle Arti – Lecce - Longo
58
Fabrizio
Un semplice esercizio: la soluzione

Accademia delle Belle Arti – Lecce - Longo


59
Fabrizio
Un semplice esercizio: la soluzione
scritta in C++
#include<iostream>
using namespace std;

int main() {
int a,b,c;

cout<<"Inserisci il primo numero: ";


cin>>a;
cout<<"Inserisci il secondo numero: ";
cin>>b;
cout<<"Inserisci il terzo numero: ";
cin>>c;

if(a>b)
if(a>c)
cout<<"Il numero maggiore e': "<<a;
else
cout<<"Il numero maggiore e': "<<c;
else
if (b>c)
cout<<"Il numero maggiore e': "<<b;
else
cout<<"Il numero maggiore e': "<<c;
return 0;
} Accademia delle Belle Arti – Lecce - Longo
60
Fabrizio

Potrebbero piacerti anche