02 algo programmi
-
Upload
piero-fraternali -
Category
Technology
-
view
591 -
download
0
description
Transcript of 02 algo programmi
![Page 1: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/1.jpg)
1
Fondamenti di Informatica
Algoritmi e ProgrammiLa catena di programmazione
![Page 2: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/2.jpg)
2
Algoritmo
![Page 3: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/3.jpg)
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
![Page 4: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/4.jpg)
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
![Page 5: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/5.jpg)
5
Un esempio di algoritmo(scritto in linguaggio naturale)
Ricetta di cucina:1. Metti un ricciolo di burro in una padella2. Metti la padella sul fuoco3. Aspetta due minuti4. Rompi un uovo (è un'istruzione “semplice”?)5. Versa il tuorlo e l’albume nella padella6. Aggiungi un pizzico di sale (quanto sale?)7. Quando l’albume si è rappreso, togli dal fuoco
![Page 6: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/6.jpg)
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
![Page 7: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/7.jpg)
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
![Page 8: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/8.jpg)
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
![Page 9: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/9.jpg)
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
![Page 10: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/10.jpg)
I mattoni elementari di un algoritmo
• Azione• Sequenza• Decisione• Ripetizione (detta anche Iterazione)
![Page 11: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/11.jpg)
11
Sequence matters!
1. Alzarsi dal letto2. Togliersi il pigiama3. Fare la doccia4. Vestirsi5. Fare colazione6. 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 ... !!!)
![Page 12: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/12.jpg)
12
Oltre la sequenza1. Alzarsi dal letto2. Togliersi il pigiama3. Fare la doccia4. Vestirsi5. Fare colazione6. Se piove allora
prendere ombrello
7. Prendere il bus per andare a scuola
Controllo del flussose … allora …
![Page 13: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/13.jpg)
13
Controllo del flusso(se … allora … altrimenti …)
1. Alzarsi dal letto2. Togliersi il pigiama3. Fare la doccia4. Vestirsi5. Fare colazione6. Se piove allora
prendere la macchinaaltrimenti
prendere il bus
![Page 14: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/14.jpg)
14
Controllo del flusso(ciclo “fintantoché")
1. Alzarsi dal letto2. Togliersi il pigiama3. Fare la doccia4. Vestirsi5. Fare colazione6. Fintantoché piove
restare in casa
7. Prendere il bus per andare a scuola
![Page 15: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/15.jpg)
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)
![Page 16: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/16.jpg)
16
Esempio di scheda
Autore/i: Atzeni, Paolo Ceri, StefanoFraternali, Piero Paraboschi, StefanoTorlone, Riccardo
Titolo: Basi di datiScaffale: 35Posizione: 21
![Page 17: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/17.jpg)
17
Formulazione del problema e dell'algoritmo
1. Problema: deciso un libro da richiedere, prelevarlo2. 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)
![Page 18: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/18.jpg)
18
Un algoritmo per il prelievo
1. Ricerca la scheda del libro richiesto2. Segnati scaffale e posizione s,p3. Cerca lo scaffale s4. Preleva il libro alla posizione p5. Compila la “scheda prestito”
![Page 19: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/19.jpg)
19
Il “sotto-algoritmo” di ricerca1. Prendi la prima scheda2. Titolo e autore/i sono quelli cercati?
2.1 Se sì, la ricerca è termina con successo,altrimentiprendi la scheda successiva
2.2 Se le schede sono esauriteil libro cercato non esiste (in biblioteca)altrimentiricomincia dal punto 2.
Che cosa succede se l’autore cercato è “Manzoni, A.” o, peggio, “Zola, E.” ?
![Page 20: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/20.jpg)
20
Un “sotto-algoritmo” migliore1. Esamina la scheda centrale dello schedario2. Se la scheda centrale corrisponde al libro
cercato, termina3. 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 è incompletoEsiste un’altra condizione di terminazione:quando il libro non esiste
![Page 21: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/21.jpg)
21
Revisione del passo 22. Se la scheda centrale corrisponde al libro
cercato oppure se la parte di schedario da consultare è vuota, termina
Libro trovato Libro inesistente
![Page 22: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/22.jpg)
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
![Page 23: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/23.jpg)
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
![Page 24: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/24.jpg)
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
![Page 25: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/25.jpg)
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
![Page 26: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/26.jpg)
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…
![Page 27: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/27.jpg)
27
Prodotto per somme ripetute di due interi positivi
1 Leggi X2 Leggi Y3 SP = 04 NS = Y5 SP = SP + X6 NS = NS - 17 NS è uguale a 0 ?
Se no: torna al passo 58 Z = SP9 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’algoritmoSP: SommaParzialeNS: NumeroSomme
![Page 28: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/28.jpg)
Sintassi & Semantica
![Page 29: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/29.jpg)
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 se e solo se X=0• NS=NS-1 è una contraddizione valore di NS
• Il simbolo = denota l’ASSEGNAMENTO di valore• Le istruzioni di assegnamento modificano i valori
![Page 30: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/30.jpg)
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)
![Page 31: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/31.jpg)
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
![Page 32: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/32.jpg)
32
M.C.D. di due numeri positivi
1. Leggi N ed M2. MIN = il minimo tra N ed M3. Parti con X=1 ed assumi che MCD sia 14. Fintantoché X < MIN
1. X = X + 12. se X divide sia N che M, assumi che MCD
sia X
5. Mostra come risultato MCDPossiamo fare
meglio?
![Page 33: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/33.jpg)
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
![Page 34: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/34.jpg)
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
![Page 35: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/35.jpg)
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
•Blocco di input dati
•Blocchi di inizio/fine dell’esecuzione
•Blocco esecutivo
•Blocco condizionale
•Blocco di output dati
•Flusso di controllo delle operazioni
leggi…
…test…?
inizio fine
scrivi…
assegnamento
…test… ?
![Page 36: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/36.jpg)
Flow charts
![Page 37: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/37.jpg)
37
INIZIO
FINE
S = 0
Leggi: N
I > NScrivi: "la
somma è" S
SINO
S = S + I
I = 1
I = I + 1
N: il numero di interi da sommare
S: la somma parziale
I: un "contatore"
Somma dei primi N numeri naturali
"condizione di uscita"
Quante volte viene eseguita?
![Page 38: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/38.jpg)
Prodotto per somme ripetute di due interi positivi
1. Leggi X2. Leggi Y3. SP = 04. NS = Y5. SP = SP + X6. NS = NS - 17. NS è uguale a 0 ?
Se no: torna al passo 58. Z = SP9. Scrivi Z
SP = 0
NS = Y
Z = SP
SP = SP + X
NS > 0 ?nosì
Scrivi: Z
Leggi: X
Leggi: Y
INIZIO
FINE
NS = NS - 1
Notare la diversa posizione del testChe differenza produce?
Legenda:
NS: numero somme
SP: somma parziale
![Page 39: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/39.jpg)
39
SP = 0
NS = Y
Z = SP
SP = SP + X
NS > 0 ?nosì
Y >= 0 ? nosì
Variante: l’algoritmo non calcola il prodotto nei casi in cui il secondo fattore (Y) è < 0
Prodotto per somme ripetute
Scrivi: “Secondo fattore negativo”
Scrivi: Z
Leggi: X
Leggi: Y
INIZIO
FINE
NS = NS - 1
![Page 40: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/40.jpg)
40
NS = Y
CS = 1
Z = SP
SP = SP + X
NS = NS – 1
NS > 0 ?no sì
NS = – Y
CS = – 1
CS = 1 ? nosì
SP = 0
L’algoritmo calcola il prodotto in ogni caso, anche con entrambi i fattori negativi
Prodotto per somme ripetute
Z = – SP
Legenda:
NS: numero somme
SP: somma parziale
CS: coeff. segno
Y >= 0 ? nosì
Leggi: X
Leggi: Y
INIZIO
Scrivi: Z
FINE
![Page 41: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/41.jpg)
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
![Page 42: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/42.jpg)
Algoritmo: versione base
Leggere i valori delle coordinate dei vertici
Triangolo degenere?
Calcolare la lunghezza dei lati
Calcolare il perimetro come somma delle lunghezze
Vuoi continuare?
sì
no
no
sì
Scrivi: “Triangolo degenere”
INIZIO
FINE
Scrivi il valore del perimetro
![Page 43: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/43.jpg)
43
Leggere coord. punto A
PERIM = LAB + LBC + LCA
LAB = distanza(A,B)LBC = distanza(B,C)LCA = distanza(C,A)
sì
Leggere coord. punto B
Leggere coord. punto C
Coincidono (A,B)?
Coincidono (B,C)?
Coincidono (C,A)?
Allineati (A,B,C)?
sì
sì
sìno
no
no
no
Leggi: RISP
RISP = ‘s’ ?sì
Raffinamento della lettura dei valori delle coordinate
Raffinamento della valutazione della condizione di triangolo degenere
Raffinamento della valutazione della condizione “Vuoi continuare?”
Raffinamento del calcolo della lunghezza dei lati e del perimetro
Raffinamento
Scrivi: “Triangolo degenere”
INIZIO
Scrivi: PERIM
Scrivi: "Continuare? (s/n)"
FINE
![Page 44: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/44.jpg)
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
![Page 45: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/45.jpg)
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
![Page 46: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/46.jpg)
no
46
Leggere coord. punto A
Leggere coord. punto B
Leggere coord. punto C
Leggere valore reale AX
Leggere valore reale AY
Leggere valore reale BX
Leggere valore reale BY
Leggere valore reale CX
Leggere valore reale CY
Coincidono (A,B)? sì
no
AX = BX ?sì
AY = BY ? sì
no
Sottoprogrammi lettura e confronto
• Espansione delle direttive complesse
![Page 47: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/47.jpg)
47
Sottoprogrammi allineamento e distanza
Allineati (A,B,C)?sì
no
DYAB = AY – BYDXAB = AX – BXDYAC = AY – CYDXAC = AX – CX
DYAB*DXAC = DXAB*DYAC ?sì
no
B
A
C
DXAB DYABDXAC
DYAC
X
Y
Se A, B, C sono allineati,vale la proporzione DYAB : DXAB = DYAC : DXAC
LAB = distanza(A,B)LBC = distanza(B,C)LCA = distanza(C,A)
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*Nradiceq(N) indica N
Sottoprogrammi “predefiniti” in una “libreria” o forniti dal linguaggio
![Page 48: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/48.jpg)
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
![Page 49: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/49.jpg)
Il concetto di “livello” dei linguaggi di programmazione
La macchina hardware
Il programmatore alto
Il livello del linguaggio
basso
![Page 50: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/50.jpg)
50
Esempi
• Linguaggio C++
• Linguaggio assembler
• Linguaggio macchina010000111111001110010110001111
LOAD PAGAADD STRAORDSTORE TOT
TOT=PAGA+STRAORD;
![Page 51: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/51.jpg)
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
![Page 52: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/52.jpg)
http://blog.newrelic.com/2013/06/03/the-history-of-programming-languages-infographic-from-veracode/
Storia dei linguaggi di programmazione
![Page 53: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/53.jpg)
La classifica dei linguaggi di programmazione
53http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
![Page 54: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/54.jpg)
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
![Page 55: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/55.jpg)
55
Problemi, Algoritmi, Programmi
Problema
Algoritmo 1
Programma C++ Programma Java
Programma per la macchina M1
Programma per la macchina M2
Algoritmo 2
progettazione
codifica
compilazione
![Page 56: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/56.jpg)
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
![Page 57: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/57.jpg)
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
![Page 58: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/58.jpg)
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
![Page 59: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/59.jpg)
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
![Page 60: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/60.jpg)
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
![Page 61: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/61.jpg)
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
![Page 62: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/62.jpg)
62
Fasi della produzione in C++ e C
1. Videoscrittura• produzione del programma, svolta dal programmatore tramite
un programma di videoscrittura (editor)2. Pre-compilazione (pre-processing)
• svolta da un programma detto preprocessore3. Traduzione (compilazione)
• svolta dal compilatore (compiler)4. Collegamento (linking)
• svolto dal collegatore (linker)5. Caricamento (loading)
• svolto dal caricatore (loader)6. Esecuzione
• a cura del Sistema Operativo
![Page 63: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/63.jpg)
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++– … …
![Page 64: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/64.jpg)
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
![Page 65: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/65.jpg)
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)
![Page 66: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/66.jpg)
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
![Page 67: 02 algo programmi](https://reader033.fdocument.pub/reader033/viewer/2022061119/5462d1ccaf7959652f8b863e/html5/thumbnails/67.jpg)
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