Your SlideShare is downloading. ×
02 algo programmi
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

02 algo programmi

438
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
438
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Fondamenti di Informatica Algoritmi e Programmi La catena di programmazione 1
  • 2. Algoritmo 2
  • 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
  • 28. Sintassi & Semantica
  • 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
  • 36. Flow charts
  • 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

×