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
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