Download - 02 algo programmi

Transcript
Page 1: 02 algo programmi

1

Fondamenti di Informatica

Algoritmi e ProgrammiLa catena di programmazione

Page 2: 02 algo programmi

2

Algoritmo

Page 3: 02 algo programmi

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

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

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

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

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

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

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

I mattoni elementari di un algoritmo

• Azione• Sequenza• Decisione• Ripetizione (detta anche Iterazione)

Page 11: 02 algo programmi

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sintassi & Semantica

Page 29: 02 algo programmi

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

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

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

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

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

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

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

Flow charts

Page 37: 02 algo programmi

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

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

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

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

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

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?

no

no

Scrivi: “Triangolo degenere”

INIZIO

FINE

Scrivi il valore del perimetro

Page 43: 02 algo programmi

43

Leggere coord. punto A

PERIM = LAB + LBC + LCA

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

Leggere coord. punto B

Leggere coord. punto C

Coincidono (A,B)?

Coincidono (B,C)?

Coincidono (C,A)?

Allineati (A,B,C)?

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

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

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

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

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

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

Il concetto di “livello” dei linguaggi di programmazione

La macchina hardware

Il programmatore alto

Il livello del linguaggio

basso

Page 50: 02 algo programmi

50

Esempi

• Linguaggio C++

• Linguaggio assembler

• Linguaggio macchina010000111111001110010110001111

LOAD PAGAADD STRAORDSTORE TOT

TOT=PAGA+STRAORD;

Page 51: 02 algo programmi

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

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

La classifica dei linguaggi di programmazione

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

Page 54: 02 algo programmi

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

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

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

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

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

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

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

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

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

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

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

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

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

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