La rappresentazione degli algoritmi 1 Algoritmo Un algoritmo

  • Slides: 42
Download presentation
La rappresentazione degli algoritmi 1

La rappresentazione degli algoritmi 1

Algoritmo • Un algoritmo è una successione finita di tutte le operazioni da compiere

Algoritmo • Un algoritmo è una successione finita di tutte le operazioni da compiere per risolvere un problema 2

Scrivere un algoritmo • Abbiamo detto che possiamo utilizzare il linguaggio naturale per descrivere

Scrivere un algoritmo • Abbiamo detto che possiamo utilizzare il linguaggio naturale per descrivere un algoritmo • Abbiamo anche detto che possiamo utilizzare un linguaggio di programmazione • Vediamo come schematizzare un algoritmo con una rappresentazione che ci permetta di passare dal linguaggio naturale a quello formale 3

Rappresentazione di una algoritmo • Un algoritmo può essere diviso in tre parti Intestazione

Rappresentazione di una algoritmo • Un algoritmo può essere diviso in tre parti Intestazione Nome dell’algoritmo Sezione dichiarativa Gli oggetti (dati) che vengono usati dall’algoritmo Sezione esecutiva Compresa tra le parole inizio e fine: elenca le operazioni che l’esecutore deve compiere 4

Intestazione • Il titolo dell’algoritmo deve essere significativo e deve ricordare, anche a distanza

Intestazione • Il titolo dell’algoritmo deve essere significativo e deve ricordare, anche a distanza di tempo, l’obiettivo del problema • Esempi – Se l’algoritmo calcola la somma tra due numeri, un titolo giusto può essere Somma. Numeri; – Se l’algoritmo calcola l’area di un triangolo, un nome appropriato può essere Area. Triangolo. 5

Sezione dichiarativa • Sono elencati gli oggetti utilizzati dal problema: notare che sono indicati

Sezione dichiarativa • Sono elencati gli oggetti utilizzati dal problema: notare che sono indicati i nomi e non i valori degli oggetti perché vogliamo costruire algoritmi che possono essere usati più volte con valori diversi per gli oggetti • Per questo motivo l’algoritmo non contiene valori fissi, ma nomi che fanno da segnaposto per i valori effettivi, cioè contiene variabili. 6

Esempio sezione dichiarativa • Le formule matematiche utilizzano L’area A di un rettangolo si

Esempio sezione dichiarativa • Le formule matematiche utilizzano L’area A di un rettangolo si ottiene variabili moltiplicando b x h. Il valore effettivo A=bxh dell’area si ottiene sostituendo alle lettere b e h i valori della base e dell’altezza di un particolare rettangolo • Quando il valore assunto da un oggetto può cambiare da un’elaborazione all’altra, si dice che l’oggetto è una variabile. • Quando il valore assunto da un oggetto non cambia da un’elaborazione all’altra, 7

Sezione esecutiva • Indica all’esecutore il processo risolutivo, quindi è necessario fornire l’elenco dettagliato

Sezione esecutiva • Indica all’esecutore il processo risolutivo, quindi è necessario fornire l’elenco dettagliato e finito delle operazioni da compiere e l’ordine preciso con cui devono essere svolte. • Le operazioni è opportuno che siano espresse sotto forma di di indicazioni usando i verbi all’imperativo (dichiara, immetti, assegna, controlla, scrivi, stampa), cioè sotto forma di istruzioni. 8

Esempi di algoritmi • Esempi elementari – una ricetta di cucina; – le istruzioni

Esempi di algoritmi • Esempi elementari – una ricetta di cucina; – le istruzioni di utilizzo di un elettrodomestico; – le regole per eseguire la divisione tra due numeri. • Notare che è sempre sottointesa la presenza di un esecutore 9

Caratteristiche basilari di un algoritmo Finito • Un algoritmo deve essere composto da un

Caratteristiche basilari di un algoritmo Finito • Un algoritmo deve essere composto da un numero finito di istruzioni e deve presentare un punto di inizio dove comincia il procedimento risolutivo e un punto di fine, raggiunto il quale si interrompe l’esecuzione delle istruzioni Esaustivo • Un algoritmo deve essere completo nel senso che, per tutti i casi che si possono verificare durante l’esecuzione, deve essere indicata la soluzione da seguire Riproducibile • Ogni successiva esecuzione dello stesso algoritmo con i medesimi dati iniziali deve produrre sempre i medesimi risultati finali 10

Il linguaggio della pseudocodifica Descrizione Parola chiave Esempi Sezione dichiarativa Dichiarare i dati da

Il linguaggio della pseudocodifica Descrizione Parola chiave Esempi Sezione dichiarativa Dichiarare i dati da utilizzare specificandone il nome e il tipo dichiara Lato come intero dichiara Pi come costante dichiara Raggio come reale Sezione esecutiva Delimitare l’algoritmo inizio fine Istruzione di acquisizione dati: parola chiave seguita dal nome della variabile da leggere. immetti (o leggi o acquisisci) leggi Nome leggi Lato immetti Raggio Istruzione per la comunicazione dei dati: parola chiave seguita dal nome della variabile da scrivere. scrivi (o comunica) scrivi Lato scrivi Raggio Assegnare un valore a una variabile assegna (o calcola) (spesso la parola chiave non viene scritta) assegna A=B+C (il valore calcolato B+C viene assegnato alla variabile A, assegnazione a sinistra) 11

Esempio di algoritmo Scrivere un algoritmo per il calcolo del perimetro e dell’area di

Esempio di algoritmo Scrivere un algoritmo per il calcolo del perimetro e dell’area di un rettangolo • Dati di input: la base, Base, e l’altezza del rettangolo, Altezza. Entrambi sono di tipo reale (numero con la virgola). • Dati di output: il perimetro, Perimetro, e l’area, Area. Entrambi sono di tipo reale. • Risoluzione: – formula per il calcolo del perimetro: Perimetro = 2*(Base + Altezza) – formula per il calcolo dell’area: Area = Base * Altezza • Nell’algoritmo si deve prevedere: – l’acquisizione del valore della base e dell’altezza – Il calcolo del perimetro e dell’area – La comunicazione dei valori calcolati del perimetro e dell’area. 12

Esempio di algoritmo (continua) riga di intestazione Algoritmo Area. Rettangolo sezione dichiarativa variabili dichiara

Esempio di algoritmo (continua) riga di intestazione Algoritmo Area. Rettangolo sezione dichiarativa variabili dichiara Base, Altezza, Perimetro, Area come reali sezione esecutiva inizio leggi Base leggi Altezza assegna Perimetro = 2*(Base + Altezza) scrivi Perimetro assegna Area = Base * Altezza scrivi Area fine. 13

Riepilogo • Questa modalità di scrittura prende il nome di linguaggio di pseudocodifica (o

Riepilogo • Questa modalità di scrittura prende il nome di linguaggio di pseudocodifica (o linguaggio di progetto), perché serve a descrivere l’algoritmo prima di tradurlo in un linguaggio comprensibile alla macchina, cioè prima della codifica. • La traduzione dell’algoritmo in un linguaggio comprensibile alla macchina si chiama programma o codice e il linguaggio utilizzato si chiama linguaggio di programmazione. 14

Convenzioni • Notare nella scrittura dell’algoritmo l’indentazione, cioè il modo di scrivere alcune righe

Convenzioni • Notare nella scrittura dell’algoritmo l’indentazione, cioè il modo di scrivere alcune righe più a destra di altre in modo da evidenziarne l’appartenenza a una sezione o a un gruppo di istruzioni. • Scegliamo di indicare le variabili e il nome dell’algoritmo con lettera iniziale maiuscola. • Nel caso di nomi composti da più parole, le parole sono scritte una di seguito all’altra con iniziali maiuscole. 15

Operazioni frequenti • Notare le seguenti istruzioni frequenti – incremento di 1 di una

Operazioni frequenti • Notare le seguenti istruzioni frequenti – incremento di 1 di una variabile assegna A = A + 1 – decremento di 1 di una variabile assegna A = A − 1 • Il simbolo "=" non deve essere considerato come l’operatore di uguaglianza tra due espressioni, ma come assegnazione alla variabile indicata a sinistra dell’espressione calcolata a destra 16

Operatori aritmetici + per l’addizione − per la sottrazione * Per la moltiplicazione /

Operatori aritmetici + per l’addizione − per la sottrazione * Per la moltiplicazione / per la divisione ^ per l’elevamento a potenza Operatori logici AND per il prodotto logico Operatori di relazione (per confrontare) = uguale < minore <= minore o uguale > maggiore >= maggiore o uguale <> diverso OR per la somma logica NOT per la negazione 17

Il diagramma di flusso • Un algoritmo può essere descritto usando uno schema grafico

Il diagramma di flusso • Un algoritmo può essere descritto usando uno schema grafico chiamato diagramma di flusso (o flow-chart). • La schematizzazione grafica è più efficace nella presentazione e rende più facile la lettura e la comprensione dell’algoritmo 18

Simboli standard Inizio Leggi Fine Scrivi Simboli ovali per l’inizio e la fine del

Simboli standard Inizio Leggi Fine Scrivi Simboli ovali per l’inizio e la fine del diagramma. Il parallelogramma per indicare l’acquisizione o la comunicazione dei dati in ingresso e uscita. Il rettangolo per indicare un’operazione di assegnazione o un calcolo. sì no Il rombo per indicare la scelta tra due possibilità (vero/falso, sì/no). 19

Esempio Inizio Leggi Base Leggi Altezza Perimetro = 2*(Base + Altezza) Scrivi Perimetro Area

Esempio Inizio Leggi Base Leggi Altezza Perimetro = 2*(Base + Altezza) Scrivi Perimetro Area = Base * Altezza Scrivi Area Fine 20

Le strutture di controllo All’interno di un algoritmo, le istruzioni sono organizzate secondo schemi

Le strutture di controllo All’interno di un algoritmo, le istruzioni sono organizzate secondo schemi nel seguente modo Sequenza • Istruzioni che devono essere eseguite una dopo l’altra secondo l’ordine con cui sono state scritte Selezione • Istruzioni raggruppate in alternativa con altre sulla base del controllo di una condizione: se la condizione è vera si procede ad eseguire un certo gruppo di istruzioni, se è falsa si esegue un altro gruppo di istruzioni Iterazione • Istruzioni che devono essere eseguite in ripetizione, cioè in modo iterativo 21

Teorema di Böhm-Jacopini • Qualsiasi algoritmo può essere scritto utilizzando solamente tre strutture di

Teorema di Böhm-Jacopini • Qualsiasi algoritmo può essere scritto utilizzando solamente tre strutture di base: sequenza, selezione, iterazione. • Queste tre strutture sono chiamate strutture di controllo. 22

La sequenza • La sequenza indica l’ordine in cui devono essere eseguite le istruzioni.

La sequenza • La sequenza indica l’ordine in cui devono essere eseguite le istruzioni. • Nel linguaggio di pseudo codifica appare così inizio istruzione 1 istruzione 2 …… …… …… istruzionen fine 23

La selezione binaria • La selezione binaria (o alternativa) consente di fare una scelta

La selezione binaria • La selezione binaria (o alternativa) consente di fare una scelta tra due alternative. se condizione allora istruzione 1 altrimenti istruzione 2 fine se Falso istruzione 2 condizione Vero istruzione 1 24

La selezione binaria (continua) • Le istruzione nei due rami vero/falso possono essere più

La selezione binaria (continua) • Le istruzione nei due rami vero/falso possono essere più di una. se condizione allora istruzione a 1 istruzione a 2 …… istruzione an altrimenti istruzione b 1 istruzione b 2 …… istruzione bn fine se Falso condizione Vero istruzione b 1 istruzione a 1 istruzione bn istruzione an 25

Esempio di selezione • Il seguente frammento di pseudocodice calcola il quadrato di un

Esempio di selezione • Il seguente frammento di pseudocodice calcola il quadrato di un numero se è positivo, altrimenti ne calcola il doppio se A>0 allora assegna B = A^2 scrivi B altrimenti assegna C = 2*A scrivi C fine se 26

Assenza di alternativa • Se dobbiamo calcolare qualcosa solo in una determinata condizione, l’istruzione

Assenza di alternativa • Se dobbiamo calcolare qualcosa solo in una determinata condizione, l’istruzione è la seguente se condizione allora istruzione fine se condizione Vero istruzione 1 Falso 27

La selezione multipla • La struttura selezione multipla permette di selezionare tra più di

La selezione multipla • La struttura selezione multipla permette di selezionare tra più di due alternative in base al valore di una variabile di controllo della selettore seleziona il valore del selettore nel caso valore 1 istruzione 1 nel caso valore 2 istruzione 2 : : : nel caso valoren istruzionen fine se 28

La selezione multipla (continua) • È possibile raggruppare più valori in un unico caso

La selezione multipla (continua) • È possibile raggruppare più valori in un unico caso separandoli con una virgola oppure indicare un intervallo con valore iniziale e finale seleziona il valore del selettore nel caso valore 1, valore 2, valore 3 istruzione : : : fine se oppure seleziona il valore del selettore nel caso da valore 1 a valore 2 istruzione : : : fine se 29

L’iterazione • La terza struttura di controllo fondamentale per la costruzione di algoritmi è

L’iterazione • La terza struttura di controllo fondamentale per la costruzione di algoritmi è l’iterazione (o ripetizione o ciclo). • Distinguiamo tre tipi di iterazione – iterazione per falso – iterazione per vero – iterazione enumerativa (o contatore) 30

Iterazione per falso L’iterazione per falso indica fino a quando un gruppo di istruzioni

Iterazione per falso L’iterazione per falso indica fino a quando un gruppo di istruzioni deve essere eseguito esegui istruzione 1 Istruzione 2 : : : istruzionen ripeti finché condizione istruzione 1 Istruzione 2 : : istruzionen condizione Falso Vero Non si sa quante volte viene eseguito il ciclo. Le istruzioni sono eseguite almeno una volta. 31

Esempio iterazione per falso Controllare che il numero del mese inserito sia compreso tra

Esempio iterazione per falso Controllare che il numero del mese inserito sia compreso tra 1 e 12 Dati in input: numero del mese M Dati in output: numero inserito dopo il controllo Risoluzione: dopo avere inserito il valore si controlla e si ripete la richiesta fino a quando M è maggiore di 0 e minore di 13 Algoritmo Mesi riga di intestazione sezione dichiarativa variabili dichiara M come intero sezione esecutiva inizio esegui leggi M ripeti finché M>0 and M<13 scrivi M fine Inizio leggi M Falso M>0 and M<13 Vero scrivi M Fine 32

Iterazione per vero L’iterazione per vero ripete l’esecuzione di un gruppo di istruzioni mentre

Iterazione per vero L’iterazione per vero ripete l’esecuzione di un gruppo di istruzioni mentre una condizione si mantiene vera esegui mentre condizione istruzione 1 Istruzione 2 : : : istruzionen ripeti condizione Falso Vero Non si sa quante volte viene eseguito il ciclo. Le istruzioni potrebbero non essere eseguite nemmeno una volta. 33

Esempio iterazione per vero Sottrarre ripetutamente 5€ da un importo se è superiore o

Esempio iterazione per vero Sottrarre ripetutamente 5€ da un importo se è superiore o uguale. Dati in input: importo Dati in output: / Risoluzione: dopo avere inserito l’importo, se è superiore o uguale a 5, si sottrae 5 e si ripete mentre la condizione rimane vera Algoritmo Sottrai riga di intestazione variabili sezione dichiarativa dichiara Importo come reale dichiara Quota = 5 come costante sezione esecutiva inizio leggi Importo esegui mentre Importo >= Quota Importo = Importo − Quota ripeti fine Inizio leggi Importo >= Quota Falso Vero Importo = Importo − Quota Fine 34

Iterazione enumerativa L’iterazione enumerativa rappresenta in forma compatta la ripetizione di un gruppo di

Iterazione enumerativa L’iterazione enumerativa rappresenta in forma compatta la ripetizione di un gruppo di istruzioni nel caso di un numero prefissato di volte per variabile = valore iniziale fino a valore finale istruzione 1 Istruzione 2 Simboli grafico per : : : rappresentare istruzionen l’iterazione enumerativa ripeti istruzione 1 Istruzione 2 : : istruzionen Le istruzioni sono eseguite un numero preciso di volte conosciuto in anticipo 35

Esempio iterazione enumerativa Dati gli importi relativi agli incassi per ciascun mese dell’anno, calcolare

Esempio iterazione enumerativa Dati gli importi relativi agli incassi per ciascun mese dell’anno, calcolare l’incasso totale e la media mensile. Dati in input: incasso di ciascun mese dell’anno Dati in output: incasso totale dell’anno e incasso medio mensile Risoluzione: all’inizio viene azzerato il totale dell’anno; con una ripetizione si acquisiscono i valori degli incassi di ciascun mese e si sommano al totale. Alla fine della ripetizione si calcola l’incasso medio (totale/12). I risultati dell’alaborazione sono il totale dell’anno e l’importo medio. 36

Esempio (continua) riga di intestazione Algoritmo Incassi sezione dichiarativa variabili dichiara incasso, totale, media

Esempio (continua) riga di intestazione Algoritmo Incassi sezione dichiarativa variabili dichiara incasso, totale, media come numeri reali inizio sezione esecutiva assegna totale = 0 per mese = 1 fino a 12 leggi incasso assegna totale = totale + incasso ripeti assegna media = totale / 12 scrivi totale scrivi media fine 37

Esempio (continua) Inizio totale = 0 per mese = 1 fino a 12 leggi

Esempio (continua) Inizio totale = 0 per mese = 1 fino a 12 leggi incasso totale = totale + incasso media = totale /12 scrivi totale scrivi media Fine 38

Dall’algoritmo al programma • Un linguaggio di programmazione viene utilizzato per tradurre l’algoritmo •

Dall’algoritmo al programma • Un linguaggio di programmazione viene utilizzato per tradurre l’algoritmo • Il risultato è un programma • La persona in grado di scrivere un programma è detta programmatore • Il programma si chiama anche codice, per questo motivo la traduzione dell’algoritmo in un programma si indica con il termine codifica 39

Fasi di traduzione: il compilatore Testo del programma Analisi lessicale e sintattica Programma compilato

Fasi di traduzione: il compilatore Testo del programma Analisi lessicale e sintattica Programma compilato Collegamento Programma eseguibile Sorgente Il testo di un programma è detto sorgente Compilatore Il programma sorgente viene tradotto in linguaggio macchina (tutte cifre 0 e 1) dal compilatore Oggetto Linker Alla fine si ottiene il programma eseguibile Il risultato della compilazione si chiama programma oggetto La compilazione è seguita da una operazione di collegamento (linking) tra varie parti del codice oggetto. È effettuata dal linker 40

Tipi di errori Errori lessicali • Uso di termini non appartenenti al linguaggio Errori

Tipi di errori Errori lessicali • Uso di termini non appartenenti al linguaggio Errori sintattici • Costruzione di frasi non corrette dal punto di vista delle regole grammaticali Errori logici • Riguarda la correttezza dell’algoritmo: il programma non produce i risultati attesi Errori di runtime • Situazioni che si possono verificare durante l’esecuzione del programma sulla base di particolari valori delle variabili (esempio: divisione per 0) 41

L’interprete • Per alcuni linguaggi di programmazione, invece del compilatore, si usa un programma

L’interprete • Per alcuni linguaggi di programmazione, invece del compilatore, si usa un programma traduttore detto interprete, che trasforma il programma sorgente in linguaggio macchina una istruzione alla volta facendola eseguire subito dopo averla trasformata. 42