La rappresentazione degli algoritmi
Algoritmo Un algoritmo è ………………………………. ………………………………………….
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
Rappresentazione di una algoritmo Un algoritmo può essere diviso in tre parti …………………….. Nome dell’algoritmo Sezione ……………….. Gli oggetti (dati) che vengono usati dall’algoritmo Sezione ………………… Compresa tra le parole inizio e fine: elenca le operazioni che l’esecutore deve compiere
Intestazione Il titolo dell’algoritmo … …………………….. Esempi Se l’algoritmo calcola la somma tra due numeri, un titolo giusto può essere SommaNumeri; Se l’algoritmo calcola l’area di un triangolo, un nome appropriato può essere AreaTriangolo.
Sezione dichiarativa ………………………………………………………………………………………….. Variabili………………………………
Esempio sezione dichiarativa Le formule matematiche utilizzano variabili A = b x h Quando ………………………… variabile. Quando ………………………………………………………………….. ….. costante. L’area A di un rettangolo si ottiene moltiplicando b x h. Il valore effettivo dell’area si ottiene sostituendo alle lettere b e h i valori della base e dell’altezza di un particolare rettangolo
Sezione esecutiva Indica all’esecutore il processo risolutivo…………………………………………………………………………... 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
Caratteristiche basilari di un algoritmo ………………………………………………….. Finito ……………………………………………………….. Esaustivo ……………………………………………………………………………. Riproducibile
Caratteristiche basilari di un algoritmo ………………………………………………….. ……………………. ……………………………………………………….. …………………….. ……………………………………………………………………………. ………………………………….
Il linguaggio della pseudocodifica Descrizione Parola chiave Esempi Sezione dichiarativa Dichiarare i dati da utilizzare specificandone il nome e il tipo dichiara 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)
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.
Esempio di algoritmo (continua) Algoritmo AreaRettangolo variabili dichiara Base, Altezza, Perimetro, Area come reali inizio leggi Base leggi Altezza assegna Perimetro = 2*(Base + Altezza) scrivi Perimetro assegna Area = Base * Altezza scrivi Area fine. riga di intestazione sezione dichiarativa sezione esecutiva
Riepilogo Questa modalità di scrittura prende il nome di linguaggio di pseudocodifica (o linguaggio di progetto), perché serve a descrivere ……………………………. La traduzione dell’algoritmo in un linguaggio comprensibile alla macchina si chiama ……………………………………………….
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.
Operazioni frequenti Notare le seguenti istruzioni frequenti …………………… incremento di 1 della variabile A …………………… decremento di 1 della variabile A ………………………….. 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
Operatori Operatori aritmetici + per l’addizione − per la sottrazione * Per la moltiplicazione / per la divisione ^ per l’elevamento a potenza Operatori di relazione (per confrontare) = uguale < minore <= minore o uguale > maggiore >= maggiore o uguale <> diverso Operatori logici AND per il prodotto logico OR per la somma logica NOT per la negazione
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
Simboli standard Simboli ovali per ………………….e la ……………….. del diagramma. Il parallelogramma per indicare ……………….o la ………………dei dati in ……. .e ……. Il rettangolo per indicare un’operazione di ……….. o un …………... sì no Il rombo per indicare la ……….
Perimetro = 2*(Base + Altezza) Esempio Inizio Leggi Base Leggi Altezza Perimetro = 2*(Base + Altezza) Scrivi Perimetro Area = Base * Altezza Scrivi Area Fine
Le strutture di controllo All’interno di un algoritmo, le istruzioni sono organizzate secondo schemi nel seguente modo ……………………………………………………………. Sequenza Selezione Iterazione
Le strutture di controllo All’interno di un algoritmo, le istruzioni sono organizzate secondo schemi nel seguente modo ……………………………………………………. ……………………. …………………………………………. ………………… ………………………………………………………………… ……………………………………………
Teorema di Böhm-Jacopini ……………………………………………………………………………………………………………………………………………………………….. Queste tre strutture sono chiamate strutture di controllo.
La sequenza La sequenza indica l’ordine in cui devono essere eseguite le istruzioni. Nel linguaggio di pseudo codifica appare così inizio istruzione1 istruzione2 …… istruzionen fine
La selezione binaria La selezione binaria (o alternativa) consente ………………………… …………………………………………. se condizione allora istruzione1 altrimenti istruzione2 fine se condizione Falso Vero istruzione2 istruzione1
La selezione binaria (continua) Le istruzione nei due rami vero/falso possono essere più di una. se condizione allora istruzione a1 istruzione a2 …… istruzione an altrimenti istruzione b1 istruzione b2 istruzione bn fine se condizione Falso Vero istruzione b1 istruzione a1 istruzione bn istruzione an
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
Assenza di alternativa Se dobbiamo calcolare qualcosa solo in una determinata condizione, l’istruzione è la seguente se condizione allora istruzione fine se condizione Vero istruzione1 Falso
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 valore1 istruzione1 nel caso valore2 istruzione2 ::: nel caso valoren istruzionen fine se
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 valore1, valore2, valore3 istruzione ::: fine se oppure nel caso da valore1 a valore2
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 con contatore)
Iterazione per falso L’iterazione per falso ……………………… ………………………………………..…. esegui istruzione1 Istruzione2 ::: istruzionen ripeti finché condizione istruzione1 Istruzione2 :::: istruzionen condizione Falso Vero Non si sa quante volte viene eseguito il ciclo. Le istruzioni sono eseguite almeno una volta.
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 variabili dichiara M come intero inizio esegui leggi M ripeti finché M>0 and M<13 scrivi M fine Inizio riga di intestazione sezione dichiarativa leggi M sezione esecutiva Falso M>0 and M<13 Vero scrivi M Fine
Iterazione per vero L’iterazione per vero ……………………………. ………………………………………………… condizione Falso esegui mentre condizione istruzione1 Istruzione2 ::: istruzionen ripeti Vero Non si sa quante volte viene eseguito il ciclo. Le istruzioni potrebbero non essere eseguite nemmeno una volta.
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 Inizio Algoritmo Sottrai variabili dichiara Importo come reale dichiara Quota = 5 come costante inizio leggi Importo esegui mentre Importo >= Quota Importo = Importo − Quota ripeti fine riga di intestazione sezione dichiarativa leggi Importo Importo >= Quota Falso sezione esecutiva Vero Importo = Importo − Quota Fine
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 istruzione1 Istruzione2 ::: istruzionen ripeti istruzione1 Istruzione2 :::: istruzionen Simboli grafico per rappresentare l’iterazione enumerativa Le istruzioni sono eseguite un numero preciso di volte conosciuto in anticipo
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. 38
Esempio (continua) Algoritmo Incassi variabili dichiara incasso, totale, media come numeri reali inizio 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 riga di intestazione sezione dichiarativa sezione esecutiva
totale = totale + incasso Esempio (continua) Inizio totale = 0 per mese = 1 fino a 12 leggi incasso totale = totale + incasso media = totale /12 scrivi totale scrivi media Fine
Dall’algoritmo al programma Un linguaggio di programmazione ……………………………………….. Il risultato è un programma La persona in grado di scrivere un programma è detta ………………………….. Il programma si chiama anche ……………………, per questo motivo la traduzione dell’algoritmo in un programma si indica con il termine ………………………..
Fasi di traduzione: il compilatore Il testo di un programma è detto sorgente Testo del programma Sorgente Il programma sorgente viene tradotto in linguaggio macchina (tutte cifre 0 e 1) dal compilatore Analisi lessicale e sintattica Compilatore Programma compilato Il risultato della compilazione si chiama programma oggetto Oggetto Collegamento Linker La compilazione è segui-ta da una operazione di collegamento (linking) tra varie parti del codice oggetto. È effettuata dal linker Programma eseguibile Alla fine si ottiene il programma eseguibile
Tipi di errori Errori lessicali Uso di termini non ………………………………………. Costruzione di frasi ………………………………………. Errori sintattici Riguarda la ……………………………………….dell’algoritmo: il programma non produce i risultati attesi Errori logici Situazioni che si possono verificare ………………………………………. sulla base di particolari valori ………………………………………. (esempio: divisione per 0) Errori di runtime
L’interprete Per alcuni linguaggi di programmazione, invece del compilatore, si usa un programma traduttore detto interprete, ……………………………………………..……………. .