SlideShare a Scribd company logo
1 of 67
Fondamenti di Informatica
Algoritmi e Programmi
La catena di programmazione

1
Algoritmo

2
Algoritmo
(definizione informale)
Una sequenza finita di operazioni
elementari, comprensibili da un
esecutore,che portano alla realizzazione
di un compito
– Esecutore: chiunque sappia comprendere la
specifica delle operazioni (tipicamente uno
strumento automatico)
– Compito: la risoluzione di un problema

3
Osservazioni sulla definizione
• Mette in luce gli aspetti progettuali e
realizzativi dell’attività dell’informatico
• Dice che si può svolgere attività
informatica senza usare un computer
– Esempio: progettare/applicare regole precise
per le operazioni aritmetiche su numeri grandi
usando solo carta e matita
– Il computer (calcolatore elettronico) è solo un
esecutore potente, che gestisce quantità di
informazioni altrimenti intrattabili
4
Un esempio di algoritmo
(scritto in linguaggio naturale)
Ricetta di cucina:
1. Metti un ricciolo di burro in una padella
2. Metti la padella sul fuoco
3. Aspetta due minuti
4. Rompi un uovo
(è un'istruzione “semplice”?)
5. Versa il tuorlo e l’albume nella padella
6. Aggiungi un pizzico di sale
(quanto sale?)
7. Quando l’albume si è rappreso, togli dal fuoco

5
Altri esempi
• Istruzioni di montaggio di un elettrodomestico

(comprensibile?)
• Uso di un terminale Bancomat
• Calcolo del massimo comune divisore di due
numeri naturali
– È essenziale che un algoritmo sia
comprensibile al suo esecutore

6
Problemi ed esecutori
• Ogni algoritmo risolve una sola classe di
problemi
• Ogni algoritmo dipende strettamente
dall’esecutore per cui è formalizzato
– Operazioni “elementari” per un esecutore
possono non esserlo affatto per un altro

7
Revisione: definizione di
algoritmo
• Dati un problema specifico e un
esecutore specifico, un algoritmo è:
– una successione finita di passi elementari tale
che:
• i passi sono effettuabili senza ambiguità da parte
dell’esecutore
• la successione risolve il problema dato

• Nel nostro caso: algoritmi sequenziali
– i passi si eseguono in ordine, uno alla volta
8
Risoluzione automatica di
problemi
• Le attitudini umane si adattano tipicamente a
individuare metodi per ottenere le soluzioni
• I calcolatori elettronici, invece, eccellono in:
– Ripetizione di un grande numero di operazioni di per
sé relativamente semplici
– Capacità di trattare grandi quantità di dati senza errori
(trattare: leggere, scrivere, trasferire)
– Rapidità e precisione nell’esecuzione
Ma non trovano da soli i metodi di soluzione
9
I mattoni elementari di un algoritmo
•
•
•
•

Azione
Sequenza
Decisione
Ripetizione (detta anche Iterazione)
Sequence matters!
1.
2.
3.
4.
5.
6.

Alzarsi dal letto
Togliersi il pigiama
Fare la doccia
Vestirsi
Fare colazione
Prendere il bus per andare a scuola

NB: I passi sono eseguiti in sequenza e l'ordine delle istruzioni è
essenziale per la correttezza dell'algoritmo! (2,3  3,2 ... !!!)

11
Oltre la sequenza
1.
2.
3.
4.
5.
6.

Alzarsi dal letto
Togliersi il pigiama
Fare la doccia
Vestirsi
Fare colazione
Se piove allora

Controllo del flusso
se … allora …

prendere ombrello

1. Prendere il bus per andare a scuola

12
Controllo del flusso
(se … allora … altrimenti …)
1.
2.
3.
4.
5.
6.

Alzarsi dal letto
Togliersi il pigiama
Fare la doccia
Vestirsi
Fare colazione
Se piove allora
prendere la macchina
altrimenti
prendere il bus
13
Controllo del flusso
(ciclo “fintantoché")
1.
2.
3.
4.
5.
6.

Alzarsi dal letto
Togliersi il pigiama
Fare la doccia
Vestirsi
Fare colazione
Fintantoché piove
restare in casa

1. Prendere il bus per andare a scuola

14
Esempio: gestione biblioteca
• Libri disposti sugli scaffali
• Ogni libro si trova in una precisa posizione
definita con due coordinate 〈s,p〉
– scaffale e posizione nello scaffale

• La biblioteca ha uno schedario, ordinato per
autore/i e titolo
– Ogni scheda contiene, nell’ordine:
•
•
•
•

cognome e nome dell’autore
titolo del libro, editore e data di pubblicazione
numero dello scaffale in cui si trova (s)
numero d’ordine della posizione nello scaffale (p)
15
Esempio di scheda
Autore/i:Atzeni, Paolo
Ceri, Stefano
Fraternali, Piero
Paraboschi, Stefano
Torlone, Riccardo
Titolo:
Basi di dati
Scaffale: 35
Posizione: 21

16
Formulazione del problema e
dell'algoritmo
1.
2.
•

Problema: deciso un libro da richiedere, prelevarlo
Algoritmo: Preleva il libro desiderato
Se un passo dell'algoritmo non è direttamente
comprensibile ed eseguibile dall'esecutore, occorre
dettagliarlo a sua volta (mediante un algoritmo più
preciso!)
Tale procedimento incrementale si dice
top-down o anche procedimento per
raffinamenti successivi (stepwise
refinement)

17
Un algoritmo per il prelievo
1.
2.
3.
4.
5.

Ricerca la scheda del libro richiesto
Segnati scaffale e posizione 〈s,p〉
Cerca lo scaffale s
Preleva il libro alla posizione p
Compila la “scheda prestito”

18
Il “sotto-algoritmo” di ricerca
1. Prendi la prima scheda
2. Titolo e autore/i sono quelli cercati?

2.1 Se sì,
la ricerca è termina con successo,
altrimenti
prendi la scheda successiva
2.2 Se le schede sono esaurite
il libro cercato non esiste (in biblioteca)
altrimenti
ricomincia dal punto 2.

Che cosa succede se l’autore cercato è
“Manzoni, A.” o, peggio, “Zola, E.” ?
19
Un “sotto-algoritmo” migliore
1. Esamina la scheda centrale dello schedario
2. Se la scheda centrale corrisponde al libro
cercato, termina
3. Se non corrisponde, prosegui nello stesso
modo nella metà superiore (inferiore) dello
schedario se il libro cercato segue (precede)
quello indicato sulla scheda
L’algoritmo è incompleto
Esiste un’altra condizione di terminazione:
quando il libro non esiste
20
Revisione del passo 2
2. Se la scheda centrale corrisponde al libro
cercato oppure se la parte di schedario da
consultare è vuota, termina

Libro trovato

Libro inesistente

21
Qualità degli algoritmi
Criteri di valutazione di un algoritmo:
– Correttezza: capacità di pervenire alla soluzione
in tutti i casi significativi possibili

– Efficienza: proprietà strettamente correlata al
tempo di esecuzione e alla memoria occupata

La correttezza è imprescindibile
L’efficienza è auspicabile

22
Il problema e la soluzione
• Prima di formulare la soluzione occorre capire
esattamente il problema
• Non serve risolvere il problema sbagliato
– In questo corso supporremo che il problema sia ben noto e
chiaramente formulato e ci concentreremo prevalentemente
sulla formulazione delle soluzioni
– Spesso, in pratica, è più difficile capire esattamente la natura del
problema che non trovare una soluzione
• Analisi dei requisiti in Ingegneria del Software

• Analisi dei requisiti da svolgere in QUESTO corso
– Il testo del compito scritto
– Le specifiche del progetto

23
Dal problema alla soluzione
• Specifiche dei requisiti: descrizione
precisa e corretta dei requisiti
(verificabilità) ⇒ cosa?
• Progetto: procedimento con cui si
individua la soluzione ⇒ come?
• Soluzione: un algoritmo

24
Esempio: prodotto di interi
positivi
•

Specifiche: ideare un algoritmo che calcoli il
prodotto di due numeri positivi usando solo
l’operazione di somma
Soluzione
Dati

•
•
–

•

2 addendi (X,Y) la loro somma (Z)

Operazioni
–
–
–
–

Leggi il primo numero (X) da terminale
Leggi il secondo numero (Y) da terminale
Somma a 0 il valore di X per Y volte
Scrivi il risultato (Z) sul terminale

25
I due pilastri della soluzione
• Che dati devo usare (ricordare,
modificare, leggere, scrivere…)?
– X, Y, Z, 0…

• Quali operazioni devo svolgere e in che
sequenza?
– Leggi, somma, scrivi…
Prodotto per somme ripetute di due
interi positivi
1
2
3
4
5
6
7

Leggi X
Leggi Y
SP = 0
NS = Y
SP = SP + X
NS = NS - 1
NS è uguale a 0 ?
Se no: torna al passo 5
8 Z = SP
9 Scrivi Z

•
•
•
•

Procedimento sequenziale
Non ambiguo
Formulazione generale, non
dipende dal valore dei numeri
letti
Prevede tutti i casi ?
SP e NS sono VARIABILI,
introdotte come ausilio alla
scrittura dell’algoritmo
SP: SommaParziale
NS: NumeroSomme

27
Sintassi & Semantica
Sintassi & Semantica dei programmi
• Determina la corretta interpretazione delle istruzioni di
un algoritmo
• Sintassi [come si scrivono: forma e struttura]
<variabile> = <espressione>
• Semantica [come si interpretano: significato]
– Interpretazione: “calcola il valore dell’espressione e assegna
al contenuto della variabile il valore calcolato”
• Si perde il valore precedentemente contenuto nella variabile

• NON è la semantica delle equazioni !!
• SP=SP+X
• NS=NS-1

se e solo se X=0
è una contraddizione ∀ valore di NS

• Il simbolo = denota l’ASSEGNAMENTO di valore
• Le istruzioni di assegnamento modificano i valori
29
Evoluzione dello stato
• Durante la computazione evolve lo stato del sistema
– stato: il complesso dei valori contenuti nelle variabili

• Ad ogni ripetizione delle istruzioni 5-6 l’evoluzione dello
stato può essere tale da cambiare l’esito dell’istruzione 7
– Se questo non accadesse mai?
• L’algoritmo entrerebbe in un ciclo infinito (loop)

– Tuttavia in questo caso è impossibile:
• Si ricevono in ingresso due interi positivi
• Continuando a decrementare Y inevitabilmente il valore arriva a
zero

– Se ricevesse in ingresso un valore Y<=0 l’algoritmo “entrerebbe
in loop”
– D’altra parte il problema non apparterrebbe più alla classe per
cui l’algoritmo è stato progettato (numeri positivi)

30
M.C.D. di due numeri positivi
• PROBLEMA: dati due interi positivi
calcolare il massimo comun divisore, cioè
il numero più grande che li divide entrambi
in modo esatto
• Dati
– I due interi (N,M), un divisore di prova (X)

• Algoritmo
– Determina il minimo tra N e M e prova tutti i
divisori da 1 a tale minimo
M.C.D. di due numeri positivi
1. Leggi N ed M
2. MIN = il minimo tra N ed M
3. Parti con X=1 ed assumi che MCD sia 1
4. Fintantoché X < MIN
1. X = X + 1
2. se X divide sia N che M, assumi che MCD
sia X

5. Mostra come risultato MCD
Possiamo fare meglio?
32
Trovare algoritmi migliori
• Partire con X=MIN e decrementare fino a
trovare un divisore (il primo!)
– ci si arresta senz’altro ad 1!

• Algoritmo di Euclide
idea:
• se N è uguale a M, allora il risultato è N
• altrimenti il risultato sarà il massimo comune
divisore tra il più piccolo dei due e la differenza tra il
più grande e il più piccolo [ne riparleremo]
http://en.wikipedia.org/wiki/File:Euclids-algorithm-example-1599-650.gif
33
Linguaggi per esprimere gli
algoritmi
• Semi-formali
– specifiche iniziali, ancora intelligibili solo
all’essere umano

• Formali
– programmi da eseguire, intelligibili anche alla
macchina

linguaggi di programmazione

34
Linguaggi semi-formali
(per la specifica iniziale)
• Pseudo-codice:
se A > 0 allora A = A + 1 altrimenti A = 0
• Diagrammi di flusso
– Detti anche flow chart o schemi a blocchi
leggi…
inizio

•Blocco di input dati
fine

assegnamento
…test…?

…test… ?
scrivi…

•Blocchi di inizio/fine dell’esecuzione
•Blocco esecutivo
•Blocco condizionale
•Blocco di output dati
•Flusso di controllo delle operazioni
35
Flow charts
Somma dei primi N numeri naturali
INIZIO

Leggi: N

N: il numero di interi da
sommare

S=0

S: la somma parziale

I=1
S=S+I

I: un "contatore"

I=I+1
SI

Quante volte
viene eseguita?

NO

I>N
"condizione di
uscita"

Scrivi: "la
somma è" S
FINE

37
Prodotto per somme ripetute di due
interi positivi
INIZIO

Leggi: X
Leggi: Y
SP = 0
NS = Y

no

NS > 0 ?
sì
SP = SP + X
NS = NS - 1
Z = SP
Scrivi: Z
FINE

1.
2.
3.
4.
5.
6.
7.

Legenda:

Leggi X
NS: numero somme
Leggi Y
SP: somma parziale
SP = 0
NS = Y
SP = SP + X
NS = NS - 1
NS è uguale a 0 ?
Se no: torna al passo 5
8. Z = SP
9. Scrivi Z
Notare la diversa posizione del test
Che differenza produce?
Prodotto per somme ripetute
Variante: l’algoritmo non
calcola il prodotto nei casi in
cui il secondo fattore (Y) è < 0

Leggi: X

INIZIO

Leggi: Y
sì

Y >= 0 ?

no

SP = 0
NS = Y
no

Scrivi: “Secondo
fattore negativo”

NS > 0 ?
sì
SP = SP + X
NS = NS - 1
Z = SP
Scrivi: Z
FINE

39
Prodotto per somme ripetute
Leggi: X

INIZIO

Leggi: Y
sì

Y >= 0 ?

no

NS = Y

NS = – Y

CS = 1

L’algoritmo calcola il
prodotto in ogni caso,
anche con entrambi i
fattori negativi

CS = – 1
SP = 0

no

NS > 0 ?
sì
SP = SP + X

Legenda:

NS = NS – 1
sì

CS = 1 ?

Z = SP

NS: numero somme
no
Z = – SP

Scrivi: Z

SP: somma parziale
CS: coeff. segno

FINE
40
Perimetro del triangolo
•Problema: date le coordinate di tre punti,
riconoscere se sono i vertici di un triangolo non
degenere, e nel caso calcolarne il perimetro
•Che dati servono: le coordinate dei 3 punti (6
numeri) e il valore del perimetro
•Che operazioni servono (caso normale):
– Calcolo della distanza tra due punti
– Somma delle tre lunghezze che rappresentano i lati

•Che operazioni servono (casi “degeneri”):
– Verifica della coincidenza tra due punti
– Verifica dell’allineamento di tre punti

41
Algoritmo: versione base
INIZIO
Leggere i valori delle
coordinate dei vertici
Triangolo degenere?

sì

no
Calcolare la lunghezza dei lati
Calcolare il perimetro
come somma delle lunghezze

Scrivi: “Triangolo
degenere”

Scrivi il valore del perimetro
Vuoi continuare?
no
FINE

sì
INIZIO

Raffinamento

Leggere coord. punto A

Raffinamento della lettura
dei valori delle coordinate

Leggere coord. punto B
Leggere coord. punto C
Coincidono (A,B)?
no
Coincidono (B,C)?
no
Coincidono (C,A)?
no
Allineati (A,B,C)?
no
LAB = distanza(A,B)
LBC = distanza(B,C)
LCA = distanza(C,A)
PERIM = LAB + LBC + LCA
Scrivi: PERIM

sì
sì
sì

Raffinamento della valutazione
della condizione di triangolo
degenere

sì

Raffinamento del calcolo della
lunghezza dei lati e del perimetro
Scrivi: “Triangolo
degenere”

Scrivi: "Continuare? (s/n)"
Leggi: RISP
sì

RISP = ‘s’ ?
FINE

Raffinamento della valutazione
della condizione “Vuoi
continuare?”
43
Concetto di sottoprogramma
• Operazioni elementari: direttamente eseguibili
dall'esecutore
• Direttive complesse: devono essere raffinate ed
espresse in termini di operazioni elementari
• Raffinamento di direttive complesse: realizzabile a parte
rispetto all'algoritmo principale
• Le direttive complesse possono essere considerate
come sottoproblemi da risolvere con un algoritmo
dedicato
• Sottoprogrammi: descrizioni di questi algoritmi
"accessori"
• Direttive Complesse: sono chiamate ai sottoprogrammi
all'interno dei programmi principali
44
Vantaggi nell'impiego dei
sottoprogrammi
• Chiarezza del programma principale
– Tutti i dettagli sono descritti nei sottoprogrammi
– Il programma principale descrive la struttura di controllo
generale

• Si evitano ripetizioni
– Alcuni sottoproblemi devono essere affrontati più volte nella
soluzione di un problema principale
– il sottoprogramma può essere richiamato tutte le volte che sia
necessario

• Disponibilità di "sottoprogrammi" prefabbricati
– Sottoproblemi ricorrenti già sviluppati da programmatori esperti,
raccolti nelle cosiddette "librerie" di sottoprogrammi

45
Sottoprogrammi lettura e confronto
• Espansione delle direttive complesse
Leggere valore reale AX
Leggere coord. punto A

Leggere valore reale AY

Leggere coord. punto B

Leggere valore reale BX

Leggere coord. punto C

Leggere valore reale BY
Leggere valore reale CX
Leggere valore reale CY
no

Coincidono (A,B)?
no

sì

AX = BX ?
sì
AY = BY ?
no

sì

46
Sottoprogrammi allineamento e distanza
C
Y
DYAC

A
DXAC

B
DXAB

DYAB

X

Se A, B, C sono allineati,vale la proporzione DYAB : DXAB = DYAC : DXAC

Allineati (A,B,C)?

sì

no

DYAB = AY – BY
DXAB = AX – BX
DYAC = AY – CY
DXAC = AX – CX
sì
DYAB*DXAC = DXAB*DYAC ?
no

LAB = distanza(A,B)
LBC = distanza(B,C)
LCA = distanza(C,A)

Sottoprogrammi “predefiniti” in una
“libreria” o forniti dal linguaggio

LAB = radiceq(quad(AX-BX)+quad(AY-BY))
LBC = radiceq(quad(BX-CX)+quad(BY-CY))
LCA = radiceq(quad(CX-AX)+quad(CY-AY))

quad(N) indica N*N
radiceq(N) indica

N
47
Linguaggi di programmazione
(formali, per la codifica)
• Consentono di scrivere gli algoritmi sotto
forma di programmi eseguibili dal calcolatore
– Codificare gli algoritmi

• Sono suddivisi in:
– Linguaggi di alto livello
• linguisticamente più vicini al linguaggio naturale

– Linguaggi di basso livello
• Assembler
• Linguaggio macchina
Il concetto di “livello” dei linguaggi
di programmazione
Il programmatore
alto

Il livello del linguaggio

basso

La macchina hardware
Esempi
• Linguaggio C++
• Linguaggio assembler
• Linguaggio macchina

TOT=PAGA+STRAORD;
LOAD PAGA
ADD STRAORD
STORE TOT
0100001111
1100111001
0110001111

50
La “Babele” dei linguaggi
– Problemi di comunicazione e compatibilità
+ Opportunità di specializzazione
 Inizialmente si usava direttamente il linguaggio della
macchina
 Nella seconda metà degli anni '50, il linguaggio si alza
di livello
 Si usano programmi che traducono (programmi scritti ne)i
linguaggi di più alto livello nel linguaggio della macchina
 Opportunità: traduzioni diverse dello stesso programma
“alto” verso i linguaggi “bassi” di macchine diverse
Storia dei linguaggi di
programmazione

http://blog.newrelic.com/2013/06/03/the-history-of-programming-languages-infographic-fro
La classifica dei linguaggi di programmazione

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

53
Problemi, Algoritmi, Programmi
• Compito dell’informatico è inventare
(creare) algoritmi ...
– cioè escogitare e formalizzare le sequenze di
passi che risolvono un problema

• ... e codificarli in programmi
– cioè renderli comprensibili al calcolatore

54
Problemi, Algoritmi, Programmi
Problema
progettazione
Algoritmo 1

Algoritmo 2

codifica
Programma C++

Programma Java

compilazione
Programma per la
macchina M1

Programma per la
macchina M2
55
Il ciclo di vita del software

•
•

Il passaggio dal problema al programma che lo risolve richiede un
insieme organizzato di attività, di cui la codifica è solo una
componente
Diversi “modelli del ciclo di vita del software” sono stati proposti
Le attività del ciclo di vita
• Analisi dei requisiti: capire e specificare che cosa
serve
• Progettazione: specificare come risolvere il problema
• Implementazione: esprimere il progetto in una forma
eseguibile
• Verifica: controllare la corrispondenza tra soluzione
informatica e requisiti
• Manutenzione: correggere gli errori e applicare le
richieste di modifica, mentre il sistema è in uso
• Nel corso vedremo (su scala ridotta) tutte le prime
quattro attività, con particolare attenzione
all’implementazione
La catena di programmazione
(nel caso dei linguaggi compilati)
• Si parte dalla codifica di un algoritmo
– fatta tramite un linguaggio simbolico
• di basso livello (Assembler)
• o di alto livello (C++, C, Fortran, …)

detta programma sorgente
• Si genera un programma scritto in un
codice trattabile dalla macchina, chiamato
programma eseguibile
58
Componenti di un linguaggio
• Vocabolario: parole chiave che costituiscono il
linguaggio
– riconosciute dal parser (analizzatore lessicale)

• Sintassi: regole per comporre i simboli del
vocabolario
– Il controllo della sintassi avviene tramite
l’analizzatore sintattico

• Semantica: significato delle espressioni
– Il controllo della semantica è il più difficile
– Un errore semantico si può rilevare, in genere, solo a
tempo di esecuzione
59
Compilatori e Interpreti
• I compilatori sono programmi che traducono i
programmi di alto livello in codice macchina
• Gli interpreti, invece, ne interpretano
direttamente le operazioni, eseguendole
Esempi di linguaggi interpretati
– LISP, PROLOG (usati nell’intelligenza artificiale)
– BASIC, PYTHON

Esempi di linguaggi compilati
– COBOL, C, C++, PASCAL, FORTRAN
60
Macchine virtuali
• Una via di mezzo tra compilazione ed
interpretazione
• Il codice nel linguaggio di alto livello viene
compilation in un codice intermedio
(bytecode) che viene interpretato da una
«macchina virtuale» (virtual machine)
• La macchina virtuale offre servizi utili che la
macchina reale non prevede (sicurezza,
analisi del codice a tempo di esecuzione,
ecc)
• Esempi: Java, C#
61
Fasi della produzione in C++ e C
1. Videoscrittura
• produzione del programma, svolta dal programmatore tramite
un programma di videoscrittura (editor)

1. Pre-compilazione (pre-processing)
• svolta da un programma detto preprocessore

1. Traduzione (compilazione)
• svolta dal compilatore (compiler)

1. Collegamento (linking)
• svolto dal collegatore (linker)

1. Caricamento (loading)
• svolto dal caricatore (loader)

1. Esecuzione
• a cura del Sistema Operativo

62
1. Videoscrittura (editing)
• Il testo del programma sorgente, costituito da
una sequenza di caratteri, viene composto e
modificato usando uno specifico
programma: l’editor
• Così otteniamo un File Programma
Sorgente memorizzato in memoria di massa
in un file di testo di nome:
– XXX.asm
per programmi in assembler
– XXX.c
per programmi in C
– XXX.cpp
per programmi in C++
–…
…
63
2. Traduzione
• Linguaggio di alto livello ⇒ Linguaggio macchina
(compilatore)
• Durante questa fase si riconoscono i simboli, le
parole e i costrutti del linguaggio:
– eventuali messaggi diagnostici segnalano errori
lessicali e sintattici

• Si genera la forma binaria del codice macchina
corrispondente: a partire dal File Programma
Sorgente si genera un File Programma
Oggetto, cioè in un file binario di nome
XXX.obj o XXX.o
64
3. Collegamento (linking)
•
•
•
•
•
•

Il programma collegatore (linker) deve collegare fra loro il file
oggetto e i sottoprogrammi richiesti (es. le funzioni di C++ e C)
I sottoprogrammi sono estratti dalle librerie oppure sono individuati
tra quelli definiti dal programmatore (nel qual caso si trovano
anch’essi nel file oggetto)
Si rendono globalmente coerenti i riferimenti agli indirizzi dei vari
elementi collegati
Si genera un File Programma Eseguibile, un file binario che
contiene il codice macchina del programma eseguibile completo, di
nome (solitamente) XXX.exe
Messaggi di errore possono essere dovuti ad errori nel citare i nomi
delle funzioni da collegare
Il programma sarà effettivamente eseguibile solo dopo che il
contenuto del file sarà stato caricato nella memoria di lavoro
(centrale) del calcolatore (a cura del Sistema Operativo)
65
4. Caricamento (loading)
• Il caricatore (loader) individua una
porzione libera della memoria di lavoro e
vi copia il contenuto del file XXX.exe
– Eventuali messaggi rivolti all’utente possono
segnalare che non c'è abbastanza spazio in
memoria

66
5. Esecuzione
• Per eseguire il programma occorre fornire in ingresso i
dati richiesti e in uscita riceveremo i risultati (su video o
file o stampante)
• Durante l’esecuzione possono verificarsi degli errori
(detti “errori di run-time”), quali:
• calcoli con risultati scorretti (per esempio un overflow)
• calcoli impossibili (divisioni per zero, logaritmo di un numero
negativo, radice quadrata di un numero negativo,….)
• errori nella concezione dell’algoritmo (l’algoritmo non risolve il
problema dato)
Tutti gli esempi citati si riferiscono ai cosiddetti errori semantici

67

More Related Content

Similar to 02 algo programmi

Elaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabElaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabprofman
 
Modulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ictModulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ictAndreina Concas
 
Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)STELITANO
 
Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)STELITANO
 
Algoritmi di ordinamento
Algoritmi di ordinamentoAlgoritmi di ordinamento
Algoritmi di ordinamentoMarco Liverani
 
Programmazione Dinamica.pdf
Programmazione Dinamica.pdfProgrammazione Dinamica.pdf
Programmazione Dinamica.pdfsteccami
 
Algoritmi e complessità computazionale
Algoritmi e complessità computazionaleAlgoritmi e complessità computazionale
Algoritmi e complessità computazionaleMarco Liverani
 
Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)STELITANO
 
Laboratorio Programmazione: Funzioni
Laboratorio Programmazione: FunzioniLaboratorio Programmazione: Funzioni
Laboratorio Programmazione: FunzioniMajong DevJfu
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?mattuzzi
 
Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmimattuzzi
 

Similar to 02 algo programmi (20)

Elaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabElaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlab
 
Modulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ictModulo 1 concetti di base dell'ict
Modulo 1 concetti di base dell'ict
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)
 
Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)
 
01 1 introduzione_a_ges
01 1 introduzione_a_ges01 1 introduzione_a_ges
01 1 introduzione_a_ges
 
Algoritmi di ordinamento
Algoritmi di ordinamentoAlgoritmi di ordinamento
Algoritmi di ordinamento
 
Programmazione Dinamica.pdf
Programmazione Dinamica.pdfProgrammazione Dinamica.pdf
Programmazione Dinamica.pdf
 
Algoritmi e complessità computazionale
Algoritmi e complessità computazionaleAlgoritmi e complessità computazionale
Algoritmi e complessità computazionale
 
Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)
 
Laboratorio Programmazione: Funzioni
Laboratorio Programmazione: FunzioniLaboratorio Programmazione: Funzioni
Laboratorio Programmazione: Funzioni
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?
 
Algoritmi
AlgoritmiAlgoritmi
Algoritmi
 
Modulo 1 - Dispensa
Modulo 1 - DispensaModulo 1 - Dispensa
Modulo 1 - Dispensa
 
Algoritmi
Algoritmi Algoritmi
Algoritmi
 
Correzione Flow Chart Riepilogo
Correzione Flow Chart RiepilogoCorrezione Flow Chart Riepilogo
Correzione Flow Chart Riepilogo
 
Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmi
 
1 Programmazione
1   Programmazione1   Programmazione
1 Programmazione
 

More from Piero Fraternali

Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016Piero Fraternali
 
presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015Piero Fraternali
 
Fraternali concertation june25bruxelles
Fraternali concertation june25bruxellesFraternali concertation june25bruxelles
Fraternali concertation june25bruxellesPiero Fraternali
 
Crowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della modaCrowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della modaPiero Fraternali
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioniPiero Fraternali
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusionePiero Fraternali
 
Human computation and participatory systems
Human computation and participatory systems Human computation and participatory systems
Human computation and participatory systems Piero Fraternali
 
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Piero Fraternali
 
Human and social computation
Human and social computation Human and social computation
Human and social computation Piero Fraternali
 
Web technologies: Model Driven Engineering
Web technologies: Model Driven EngineeringWeb technologies: Model Driven Engineering
Web technologies: Model Driven EngineeringPiero Fraternali
 

More from Piero Fraternali (20)

Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016Multimedia on the mountaintop: presentation at ACM MM2016
Multimedia on the mountaintop: presentation at ACM MM2016
 
presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015presentation at European Utility Week, Vienna, Nov. 2015
presentation at European Utility Week, Vienna, Nov. 2015
 
Fraternali concertation june25bruxelles
Fraternali concertation june25bruxellesFraternali concertation june25bruxelles
Fraternali concertation june25bruxelles
 
Crowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della modaCrowsourcing (anche) per le aziende del settore tessile e della moda
Crowsourcing (anche) per le aziende del settore tessile e della moda
 
07 2 ricorsione
07 2 ricorsione07 2 ricorsione
07 2 ricorsione
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
03 2 arit_bin
03 2 arit_bin03 2 arit_bin
03 2 arit_bin
 
03 1 alg_bool
03 1 alg_bool03 1 alg_bool
03 1 alg_bool
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
Human computation and participatory systems
Human computation and participatory systems Human computation and participatory systems
Human computation and participatory systems
 
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
Better society: Meet us at #ICT2013eu for #trustedsocialmedia http://bit.ly/1...
 
So human presentation
So human presentationSo human presentation
So human presentation
 
Human and social computation
Human and social computation Human and social computation
Human and social computation
 
Web technologies: Model Driven Engineering
Web technologies: Model Driven EngineeringWeb technologies: Model Driven Engineering
Web technologies: Model Driven Engineering
 
Common Gateway Interface
Common Gateway InterfaceCommon Gateway Interface
Common Gateway Interface
 

02 algo programmi

  • 1. Fondamenti di Informatica Algoritmi e Programmi La catena di programmazione 1
  • 3. Algoritmo (definizione informale) Una sequenza finita di operazioni elementari, comprensibili da un esecutore,che portano alla realizzazione di un compito – Esecutore: chiunque sappia comprendere la specifica delle operazioni (tipicamente uno strumento automatico) – Compito: la risoluzione di un problema 3
  • 4. Osservazioni sulla definizione • Mette in luce gli aspetti progettuali e realizzativi dell’attività dell’informatico • Dice che si può svolgere attività informatica senza usare un computer – Esempio: progettare/applicare regole precise per le operazioni aritmetiche su numeri grandi usando solo carta e matita – Il computer (calcolatore elettronico) è solo un esecutore potente, che gestisce quantità di informazioni altrimenti intrattabili 4
  • 5. Un esempio di algoritmo (scritto in linguaggio naturale) Ricetta di cucina: 1. Metti un ricciolo di burro in una padella 2. Metti la padella sul fuoco 3. Aspetta due minuti 4. Rompi un uovo (è un'istruzione “semplice”?) 5. Versa il tuorlo e l’albume nella padella 6. Aggiungi un pizzico di sale (quanto sale?) 7. Quando l’albume si è rappreso, togli dal fuoco 5
  • 6. Altri esempi • Istruzioni di montaggio di un elettrodomestico (comprensibile?) • Uso di un terminale Bancomat • Calcolo del massimo comune divisore di due numeri naturali – È essenziale che un algoritmo sia comprensibile al suo esecutore 6
  • 7. Problemi ed esecutori • Ogni algoritmo risolve una sola classe di problemi • Ogni algoritmo dipende strettamente dall’esecutore per cui è formalizzato – Operazioni “elementari” per un esecutore possono non esserlo affatto per un altro 7
  • 8. Revisione: definizione di algoritmo • Dati un problema specifico e un esecutore specifico, un algoritmo è: – una successione finita di passi elementari tale che: • i passi sono effettuabili senza ambiguità da parte dell’esecutore • la successione risolve il problema dato • Nel nostro caso: algoritmi sequenziali – i passi si eseguono in ordine, uno alla volta 8
  • 9. Risoluzione automatica di problemi • Le attitudini umane si adattano tipicamente a individuare metodi per ottenere le soluzioni • I calcolatori elettronici, invece, eccellono in: – Ripetizione di un grande numero di operazioni di per sé relativamente semplici – Capacità di trattare grandi quantità di dati senza errori (trattare: leggere, scrivere, trasferire) – Rapidità e precisione nell’esecuzione Ma non trovano da soli i metodi di soluzione 9
  • 10. I mattoni elementari di un algoritmo • • • • Azione Sequenza Decisione Ripetizione (detta anche Iterazione)
  • 11. Sequence matters! 1. 2. 3. 4. 5. 6. Alzarsi dal letto Togliersi il pigiama Fare la doccia Vestirsi Fare colazione Prendere il bus per andare a scuola NB: I passi sono eseguiti in sequenza e l'ordine delle istruzioni è essenziale per la correttezza dell'algoritmo! (2,3  3,2 ... !!!) 11
  • 12. Oltre la sequenza 1. 2. 3. 4. 5. 6. Alzarsi dal letto Togliersi il pigiama Fare la doccia Vestirsi Fare colazione Se piove allora Controllo del flusso se … allora … prendere ombrello 1. Prendere il bus per andare a scuola 12
  • 13. Controllo del flusso (se … allora … altrimenti …) 1. 2. 3. 4. 5. 6. Alzarsi dal letto Togliersi il pigiama Fare la doccia Vestirsi Fare colazione Se piove allora prendere la macchina altrimenti prendere il bus 13
  • 14. Controllo del flusso (ciclo “fintantoché") 1. 2. 3. 4. 5. 6. Alzarsi dal letto Togliersi il pigiama Fare la doccia Vestirsi Fare colazione Fintantoché piove restare in casa 1. Prendere il bus per andare a scuola 14
  • 15. Esempio: gestione biblioteca • Libri disposti sugli scaffali • Ogni libro si trova in una precisa posizione definita con due coordinate 〈s,p〉 – scaffale e posizione nello scaffale • La biblioteca ha uno schedario, ordinato per autore/i e titolo – Ogni scheda contiene, nell’ordine: • • • • cognome e nome dell’autore titolo del libro, editore e data di pubblicazione numero dello scaffale in cui si trova (s) numero d’ordine della posizione nello scaffale (p) 15
  • 16. Esempio di scheda Autore/i:Atzeni, Paolo Ceri, Stefano Fraternali, Piero Paraboschi, Stefano Torlone, Riccardo Titolo: Basi di dati Scaffale: 35 Posizione: 21 16
  • 17. Formulazione del problema e dell'algoritmo 1. 2. • Problema: deciso un libro da richiedere, prelevarlo Algoritmo: Preleva il libro desiderato Se un passo dell'algoritmo non è direttamente comprensibile ed eseguibile dall'esecutore, occorre dettagliarlo a sua volta (mediante un algoritmo più preciso!) Tale procedimento incrementale si dice top-down o anche procedimento per raffinamenti successivi (stepwise refinement) 17
  • 18. Un algoritmo per il prelievo 1. 2. 3. 4. 5. Ricerca la scheda del libro richiesto Segnati scaffale e posizione 〈s,p〉 Cerca lo scaffale s Preleva il libro alla posizione p Compila la “scheda prestito” 18
  • 19. Il “sotto-algoritmo” di ricerca 1. Prendi la prima scheda 2. Titolo e autore/i sono quelli cercati? 2.1 Se sì, la ricerca è termina con successo, altrimenti prendi la scheda successiva 2.2 Se le schede sono esaurite il libro cercato non esiste (in biblioteca) altrimenti ricomincia dal punto 2. Che cosa succede se l’autore cercato è “Manzoni, A.” o, peggio, “Zola, E.” ? 19
  • 20. Un “sotto-algoritmo” migliore 1. Esamina la scheda centrale dello schedario 2. Se la scheda centrale corrisponde al libro cercato, termina 3. Se non corrisponde, prosegui nello stesso modo nella metà superiore (inferiore) dello schedario se il libro cercato segue (precede) quello indicato sulla scheda L’algoritmo è incompleto Esiste un’altra condizione di terminazione: quando il libro non esiste 20
  • 21. Revisione del passo 2 2. Se la scheda centrale corrisponde al libro cercato oppure se la parte di schedario da consultare è vuota, termina Libro trovato Libro inesistente 21
  • 22. Qualità degli algoritmi Criteri di valutazione di un algoritmo: – Correttezza: capacità di pervenire alla soluzione in tutti i casi significativi possibili – Efficienza: proprietà strettamente correlata al tempo di esecuzione e alla memoria occupata La correttezza è imprescindibile L’efficienza è auspicabile 22
  • 23. Il problema e la soluzione • Prima di formulare la soluzione occorre capire esattamente il problema • Non serve risolvere il problema sbagliato – In questo corso supporremo che il problema sia ben noto e chiaramente formulato e ci concentreremo prevalentemente sulla formulazione delle soluzioni – Spesso, in pratica, è più difficile capire esattamente la natura del problema che non trovare una soluzione • Analisi dei requisiti in Ingegneria del Software • Analisi dei requisiti da svolgere in QUESTO corso – Il testo del compito scritto – Le specifiche del progetto 23
  • 24. Dal problema alla soluzione • Specifiche dei requisiti: descrizione precisa e corretta dei requisiti (verificabilità) ⇒ cosa? • Progetto: procedimento con cui si individua la soluzione ⇒ come? • Soluzione: un algoritmo 24
  • 25. Esempio: prodotto di interi positivi • Specifiche: ideare un algoritmo che calcoli il prodotto di due numeri positivi usando solo l’operazione di somma Soluzione Dati • • – • 2 addendi (X,Y) la loro somma (Z) Operazioni – – – – Leggi il primo numero (X) da terminale Leggi il secondo numero (Y) da terminale Somma a 0 il valore di X per Y volte Scrivi il risultato (Z) sul terminale 25
  • 26. I due pilastri della soluzione • Che dati devo usare (ricordare, modificare, leggere, scrivere…)? – X, Y, Z, 0… • Quali operazioni devo svolgere e in che sequenza? – Leggi, somma, scrivi…
  • 27. Prodotto per somme ripetute di due interi positivi 1 2 3 4 5 6 7 Leggi X Leggi Y SP = 0 NS = Y SP = SP + X NS = NS - 1 NS è uguale a 0 ? Se no: torna al passo 5 8 Z = SP 9 Scrivi Z • • • • Procedimento sequenziale Non ambiguo Formulazione generale, non dipende dal valore dei numeri letti Prevede tutti i casi ? SP e NS sono VARIABILI, introdotte come ausilio alla scrittura dell’algoritmo SP: SommaParziale NS: NumeroSomme 27
  • 29. Sintassi & Semantica dei programmi • Determina la corretta interpretazione delle istruzioni di un algoritmo • Sintassi [come si scrivono: forma e struttura] <variabile> = <espressione> • Semantica [come si interpretano: significato] – Interpretazione: “calcola il valore dell’espressione e assegna al contenuto della variabile il valore calcolato” • Si perde il valore precedentemente contenuto nella variabile • NON è la semantica delle equazioni !! • SP=SP+X • NS=NS-1 se e solo se X=0 è una contraddizione ∀ valore di NS • Il simbolo = denota l’ASSEGNAMENTO di valore • Le istruzioni di assegnamento modificano i valori 29
  • 30. Evoluzione dello stato • Durante la computazione evolve lo stato del sistema – stato: il complesso dei valori contenuti nelle variabili • Ad ogni ripetizione delle istruzioni 5-6 l’evoluzione dello stato può essere tale da cambiare l’esito dell’istruzione 7 – Se questo non accadesse mai? • L’algoritmo entrerebbe in un ciclo infinito (loop) – Tuttavia in questo caso è impossibile: • Si ricevono in ingresso due interi positivi • Continuando a decrementare Y inevitabilmente il valore arriva a zero – Se ricevesse in ingresso un valore Y<=0 l’algoritmo “entrerebbe in loop” – D’altra parte il problema non apparterrebbe più alla classe per cui l’algoritmo è stato progettato (numeri positivi) 30
  • 31. M.C.D. di due numeri positivi • PROBLEMA: dati due interi positivi calcolare il massimo comun divisore, cioè il numero più grande che li divide entrambi in modo esatto • Dati – I due interi (N,M), un divisore di prova (X) • Algoritmo – Determina il minimo tra N e M e prova tutti i divisori da 1 a tale minimo
  • 32. M.C.D. di due numeri positivi 1. Leggi N ed M 2. MIN = il minimo tra N ed M 3. Parti con X=1 ed assumi che MCD sia 1 4. Fintantoché X < MIN 1. X = X + 1 2. se X divide sia N che M, assumi che MCD sia X 5. Mostra come risultato MCD Possiamo fare meglio? 32
  • 33. Trovare algoritmi migliori • Partire con X=MIN e decrementare fino a trovare un divisore (il primo!) – ci si arresta senz’altro ad 1! • Algoritmo di Euclide idea: • se N è uguale a M, allora il risultato è N • altrimenti il risultato sarà il massimo comune divisore tra il più piccolo dei due e la differenza tra il più grande e il più piccolo [ne riparleremo] http://en.wikipedia.org/wiki/File:Euclids-algorithm-example-1599-650.gif 33
  • 34. Linguaggi per esprimere gli algoritmi • Semi-formali – specifiche iniziali, ancora intelligibili solo all’essere umano • Formali – programmi da eseguire, intelligibili anche alla macchina linguaggi di programmazione 34
  • 35. Linguaggi semi-formali (per la specifica iniziale) • Pseudo-codice: se A > 0 allora A = A + 1 altrimenti A = 0 • Diagrammi di flusso – Detti anche flow chart o schemi a blocchi leggi… inizio •Blocco di input dati fine assegnamento …test…? …test… ? scrivi… •Blocchi di inizio/fine dell’esecuzione •Blocco esecutivo •Blocco condizionale •Blocco di output dati •Flusso di controllo delle operazioni 35
  • 37. Somma dei primi N numeri naturali INIZIO Leggi: N N: il numero di interi da sommare S=0 S: la somma parziale I=1 S=S+I I: un "contatore" I=I+1 SI Quante volte viene eseguita? NO I>N "condizione di uscita" Scrivi: "la somma è" S FINE 37
  • 38. Prodotto per somme ripetute di due interi positivi INIZIO Leggi: X Leggi: Y SP = 0 NS = Y no NS > 0 ? sì SP = SP + X NS = NS - 1 Z = SP Scrivi: Z FINE 1. 2. 3. 4. 5. 6. 7. Legenda: Leggi X NS: numero somme Leggi Y SP: somma parziale SP = 0 NS = Y SP = SP + X NS = NS - 1 NS è uguale a 0 ? Se no: torna al passo 5 8. Z = SP 9. Scrivi Z Notare la diversa posizione del test Che differenza produce?
  • 39. Prodotto per somme ripetute Variante: l’algoritmo non calcola il prodotto nei casi in cui il secondo fattore (Y) è < 0 Leggi: X INIZIO Leggi: Y sì Y >= 0 ? no SP = 0 NS = Y no Scrivi: “Secondo fattore negativo” NS > 0 ? sì SP = SP + X NS = NS - 1 Z = SP Scrivi: Z FINE 39
  • 40. Prodotto per somme ripetute Leggi: X INIZIO Leggi: Y sì Y >= 0 ? no NS = Y NS = – Y CS = 1 L’algoritmo calcola il prodotto in ogni caso, anche con entrambi i fattori negativi CS = – 1 SP = 0 no NS > 0 ? sì SP = SP + X Legenda: NS = NS – 1 sì CS = 1 ? Z = SP NS: numero somme no Z = – SP Scrivi: Z SP: somma parziale CS: coeff. segno FINE 40
  • 41. Perimetro del triangolo •Problema: date le coordinate di tre punti, riconoscere se sono i vertici di un triangolo non degenere, e nel caso calcolarne il perimetro •Che dati servono: le coordinate dei 3 punti (6 numeri) e il valore del perimetro •Che operazioni servono (caso normale): – Calcolo della distanza tra due punti – Somma delle tre lunghezze che rappresentano i lati •Che operazioni servono (casi “degeneri”): – Verifica della coincidenza tra due punti – Verifica dell’allineamento di tre punti 41
  • 42. Algoritmo: versione base INIZIO Leggere i valori delle coordinate dei vertici Triangolo degenere? sì no Calcolare la lunghezza dei lati Calcolare il perimetro come somma delle lunghezze Scrivi: “Triangolo degenere” Scrivi il valore del perimetro Vuoi continuare? no FINE sì
  • 43. INIZIO Raffinamento Leggere coord. punto A Raffinamento della lettura dei valori delle coordinate Leggere coord. punto B Leggere coord. punto C Coincidono (A,B)? no Coincidono (B,C)? no Coincidono (C,A)? no Allineati (A,B,C)? no LAB = distanza(A,B) LBC = distanza(B,C) LCA = distanza(C,A) PERIM = LAB + LBC + LCA Scrivi: PERIM sì sì sì Raffinamento della valutazione della condizione di triangolo degenere sì Raffinamento del calcolo della lunghezza dei lati e del perimetro Scrivi: “Triangolo degenere” Scrivi: "Continuare? (s/n)" Leggi: RISP sì RISP = ‘s’ ? FINE Raffinamento della valutazione della condizione “Vuoi continuare?” 43
  • 44. Concetto di sottoprogramma • Operazioni elementari: direttamente eseguibili dall'esecutore • Direttive complesse: devono essere raffinate ed espresse in termini di operazioni elementari • Raffinamento di direttive complesse: realizzabile a parte rispetto all'algoritmo principale • Le direttive complesse possono essere considerate come sottoproblemi da risolvere con un algoritmo dedicato • Sottoprogrammi: descrizioni di questi algoritmi "accessori" • Direttive Complesse: sono chiamate ai sottoprogrammi all'interno dei programmi principali 44
  • 45. Vantaggi nell'impiego dei sottoprogrammi • Chiarezza del programma principale – Tutti i dettagli sono descritti nei sottoprogrammi – Il programma principale descrive la struttura di controllo generale • Si evitano ripetizioni – Alcuni sottoproblemi devono essere affrontati più volte nella soluzione di un problema principale – il sottoprogramma può essere richiamato tutte le volte che sia necessario • Disponibilità di "sottoprogrammi" prefabbricati – Sottoproblemi ricorrenti già sviluppati da programmatori esperti, raccolti nelle cosiddette "librerie" di sottoprogrammi 45
  • 46. Sottoprogrammi lettura e confronto • Espansione delle direttive complesse Leggere valore reale AX Leggere coord. punto A Leggere valore reale AY Leggere coord. punto B Leggere valore reale BX Leggere coord. punto C Leggere valore reale BY Leggere valore reale CX Leggere valore reale CY no Coincidono (A,B)? no sì AX = BX ? sì AY = BY ? no sì 46
  • 47. Sottoprogrammi allineamento e distanza C Y DYAC A DXAC B DXAB DYAB X Se A, B, C sono allineati,vale la proporzione DYAB : DXAB = DYAC : DXAC Allineati (A,B,C)? sì no DYAB = AY – BY DXAB = AX – BX DYAC = AY – CY DXAC = AX – CX sì DYAB*DXAC = DXAB*DYAC ? no LAB = distanza(A,B) LBC = distanza(B,C) LCA = distanza(C,A) Sottoprogrammi “predefiniti” in una “libreria” o forniti dal linguaggio LAB = radiceq(quad(AX-BX)+quad(AY-BY)) LBC = radiceq(quad(BX-CX)+quad(BY-CY)) LCA = radiceq(quad(CX-AX)+quad(CY-AY)) quad(N) indica N*N radiceq(N) indica N 47
  • 48. Linguaggi di programmazione (formali, per la codifica) • Consentono di scrivere gli algoritmi sotto forma di programmi eseguibili dal calcolatore – Codificare gli algoritmi • Sono suddivisi in: – Linguaggi di alto livello • linguisticamente più vicini al linguaggio naturale – Linguaggi di basso livello • Assembler • Linguaggio macchina
  • 49. Il concetto di “livello” dei linguaggi di programmazione Il programmatore alto Il livello del linguaggio basso La macchina hardware
  • 50. Esempi • Linguaggio C++ • Linguaggio assembler • Linguaggio macchina TOT=PAGA+STRAORD; LOAD PAGA ADD STRAORD STORE TOT 0100001111 1100111001 0110001111 50
  • 51. La “Babele” dei linguaggi – Problemi di comunicazione e compatibilità + Opportunità di specializzazione  Inizialmente si usava direttamente il linguaggio della macchina  Nella seconda metà degli anni '50, il linguaggio si alza di livello  Si usano programmi che traducono (programmi scritti ne)i linguaggi di più alto livello nel linguaggio della macchina  Opportunità: traduzioni diverse dello stesso programma “alto” verso i linguaggi “bassi” di macchine diverse
  • 52. Storia dei linguaggi di programmazione http://blog.newrelic.com/2013/06/03/the-history-of-programming-languages-infographic-fro
  • 53. La classifica dei linguaggi di programmazione http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 53
  • 54. Problemi, Algoritmi, Programmi • Compito dell’informatico è inventare (creare) algoritmi ... – cioè escogitare e formalizzare le sequenze di passi che risolvono un problema • ... e codificarli in programmi – cioè renderli comprensibili al calcolatore 54
  • 55. Problemi, Algoritmi, Programmi Problema progettazione Algoritmo 1 Algoritmo 2 codifica Programma C++ Programma Java compilazione Programma per la macchina M1 Programma per la macchina M2 55
  • 56. Il ciclo di vita del software • • Il passaggio dal problema al programma che lo risolve richiede un insieme organizzato di attività, di cui la codifica è solo una componente Diversi “modelli del ciclo di vita del software” sono stati proposti
  • 57. Le attività del ciclo di vita • Analisi dei requisiti: capire e specificare che cosa serve • Progettazione: specificare come risolvere il problema • Implementazione: esprimere il progetto in una forma eseguibile • Verifica: controllare la corrispondenza tra soluzione informatica e requisiti • Manutenzione: correggere gli errori e applicare le richieste di modifica, mentre il sistema è in uso • Nel corso vedremo (su scala ridotta) tutte le prime quattro attività, con particolare attenzione all’implementazione
  • 58. La catena di programmazione (nel caso dei linguaggi compilati) • Si parte dalla codifica di un algoritmo – fatta tramite un linguaggio simbolico • di basso livello (Assembler) • o di alto livello (C++, C, Fortran, …) detta programma sorgente • Si genera un programma scritto in un codice trattabile dalla macchina, chiamato programma eseguibile 58
  • 59. Componenti di un linguaggio • Vocabolario: parole chiave che costituiscono il linguaggio – riconosciute dal parser (analizzatore lessicale) • Sintassi: regole per comporre i simboli del vocabolario – Il controllo della sintassi avviene tramite l’analizzatore sintattico • Semantica: significato delle espressioni – Il controllo della semantica è il più difficile – Un errore semantico si può rilevare, in genere, solo a tempo di esecuzione 59
  • 60. Compilatori e Interpreti • I compilatori sono programmi che traducono i programmi di alto livello in codice macchina • Gli interpreti, invece, ne interpretano direttamente le operazioni, eseguendole Esempi di linguaggi interpretati – LISP, PROLOG (usati nell’intelligenza artificiale) – BASIC, PYTHON Esempi di linguaggi compilati – COBOL, C, C++, PASCAL, FORTRAN 60
  • 61. Macchine virtuali • Una via di mezzo tra compilazione ed interpretazione • Il codice nel linguaggio di alto livello viene compilation in un codice intermedio (bytecode) che viene interpretato da una «macchina virtuale» (virtual machine) • La macchina virtuale offre servizi utili che la macchina reale non prevede (sicurezza, analisi del codice a tempo di esecuzione, ecc) • Esempi: Java, C# 61
  • 62. Fasi della produzione in C++ e C 1. Videoscrittura • produzione del programma, svolta dal programmatore tramite un programma di videoscrittura (editor) 1. Pre-compilazione (pre-processing) • svolta da un programma detto preprocessore 1. Traduzione (compilazione) • svolta dal compilatore (compiler) 1. Collegamento (linking) • svolto dal collegatore (linker) 1. Caricamento (loading) • svolto dal caricatore (loader) 1. Esecuzione • a cura del Sistema Operativo 62
  • 63. 1. Videoscrittura (editing) • Il testo del programma sorgente, costituito da una sequenza di caratteri, viene composto e modificato usando uno specifico programma: l’editor • Così otteniamo un File Programma Sorgente memorizzato in memoria di massa in un file di testo di nome: – XXX.asm per programmi in assembler – XXX.c per programmi in C – XXX.cpp per programmi in C++ –… … 63
  • 64. 2. Traduzione • Linguaggio di alto livello ⇒ Linguaggio macchina (compilatore) • Durante questa fase si riconoscono i simboli, le parole e i costrutti del linguaggio: – eventuali messaggi diagnostici segnalano errori lessicali e sintattici • Si genera la forma binaria del codice macchina corrispondente: a partire dal File Programma Sorgente si genera un File Programma Oggetto, cioè in un file binario di nome XXX.obj o XXX.o 64
  • 65. 3. Collegamento (linking) • • • • • • Il programma collegatore (linker) deve collegare fra loro il file oggetto e i sottoprogrammi richiesti (es. le funzioni di C++ e C) I sottoprogrammi sono estratti dalle librerie oppure sono individuati tra quelli definiti dal programmatore (nel qual caso si trovano anch’essi nel file oggetto) Si rendono globalmente coerenti i riferimenti agli indirizzi dei vari elementi collegati Si genera un File Programma Eseguibile, un file binario che contiene il codice macchina del programma eseguibile completo, di nome (solitamente) XXX.exe Messaggi di errore possono essere dovuti ad errori nel citare i nomi delle funzioni da collegare Il programma sarà effettivamente eseguibile solo dopo che il contenuto del file sarà stato caricato nella memoria di lavoro (centrale) del calcolatore (a cura del Sistema Operativo) 65
  • 66. 4. Caricamento (loading) • Il caricatore (loader) individua una porzione libera della memoria di lavoro e vi copia il contenuto del file XXX.exe – Eventuali messaggi rivolti all’utente possono segnalare che non c'è abbastanza spazio in memoria 66
  • 67. 5. Esecuzione • Per eseguire il programma occorre fornire in ingresso i dati richiesti e in uscita riceveremo i risultati (su video o file o stampante) • Durante l’esecuzione possono verificarsi degli errori (detti “errori di run-time”), quali: • calcoli con risultati scorretti (per esempio un overflow) • calcoli impossibili (divisioni per zero, logaritmo di un numero negativo, radice quadrata di un numero negativo,….) • errori nella concezione dell’algoritmo (l’algoritmo non risolve il problema dato) Tutti gli esempi citati si riferiscono ai cosiddetti errori semantici 67