Unità Didattica 1 Algoritmi 1 Analisi e Programmazione • Insieme delle attività necessarie per la risoluzione dei problemi per mezzo di un elaboratore: dalla formulazione del problema alla predisposizione dell’elaboratore. Analisi e Programmazione Problema Risultati • Scopo dell’analisi è definire un algoritmo: elenco finito di istruzioni necessarie per risolvere una classe di problemi; in generale non può essere eseguito da un elaboratore; • Scopo della programmazione è definire un programma. Un programma è la descrizione comprensibile ed eseguibile di un algoritmo da parte di un elaboratore 2 Algoritmi e Programmi Problema Analisi Algoritmo Diagramma a blocchi Programmazione Programma Linguaggio programmativo Risultati 3 Algoritmi • Un elenco di istruzioni è un algoritmo se sono soddisfatte le seguenti proprietà: 1. Finitezza: ogni istruzione deve essere eseguita in un tempo finito e un numero finito di volte; 2. Generalità: ogni algoritmo deve fornire la soluzione per i problemi appartenenti ad una determinata classe. 3. Non ambiguità: devono essere definiti in modo univoco tutti i passi; devono essere evitati paradossi, contraddizioni ed ambiguità. 4 Descrizione degli Algoritmi • Uso di un linguaggio generalizzato costituito da strutture linguistiche prive di ambiguità e ridondanze; • Uso di espressioni (frasi) contenenti: 1. 2. Descrizione delle operazioni (istruzioni); Eventuale descrizione dei dati su cui eseguire le istruzioni. 5 Dati e Istruzioni • Dati: – – – Costanti (valore invariabile all’interno dell’algoritmo); Variabili scalari: <nome, valore> Variabili vettoriali: <nome, insieme di valori> (il valore delle variabili è indeterminato all’inizio di un algoritmo). • Istruzioni: 1. Istruzioni operative (producono risultati se eseguite); 2. Istruzioni di controllo (in funzione del verificarsi di 3. condizioni determinano l’esecuzione di alcune istruzioni piuttosto che di altre); Istruzioni di salto (alterano l’ordine di esecuzione delle istruzioni); 4. Istruzioni di inizio e fine; 5. Istruzioni di I/O (trasmissione dati o messaggi fra l’ambiente esterno e l’algoritmo). 6 Proposizioni e predicati • Come sono espresse le condizioni nelle istruzioni di controllo? – Le istruzioni di controllo verificano se una condizione è vera o falsa. – La condizione viene espressa per mezzo di predicati. • Proposizione: Costrutto linguistico del quale si può dire se è vero o falso. • Predicato: Una proposizione è un predicato se in essa appaiono delle variabili e il valore di verità delle variabili determina il valore di verità della proposizione. I predicati si esprimono con operatori logici e relazionali. - Predicati Semplici: predicati di un solo operatore relazionale; - Predicati Composti: predicati con operatori logici (AND, OR, NOT). 7 Operatori Relazionali • • • • • • = ≠ > < ≥ ≤ uguale diverso maggiore minore maggiore o uguale minore o uguale 8 Op. Logici e Tavole di Verità • Tavole di Verità: – descrivono i valori di verità dei predicati in funzione dei valori di verità delle singole parti. – Esprimono le modalità con cui operano gli operatori logici. • Esempi: A B A and B A B A or B A not A 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 9 Esempi di Predicati • • • • età > 30 (Predicato semplice) età > 30 AND età < 50 età > 30 OR età < 50 sempre vera! NOT età > 50 10 Diagrammi a Blocchi • Esempio di un linguaggio generalizzato per la descrizione degli algoritmi; • Rappresentazione grafica del flusso, ossia l’ordine di esecuzione delle operazioni; • I blocchi contengono istruzioni elementari, la forma del blocco indica il tipo di istruzioni; Inizio V Lettura Scrittura Azioni F Controllo Fine 11 Analisi Strutturata • Procedimento che permette di ottenere descrizioni di algoritmi che siano facilmente documentabili e comprensibili; • Schemi di flusso di un diagramma a blocchi: – Schema di sequenza: esecuzione sequenziale di due o più schemi; – Schema di selezione: esecuzione di uno schema subordinata ad un blocco di controllo; – Schema di iterazione: esecuzione di uno schema n volte; 12 Diagramma a Blocchi Strutturati • Uno schema di flusso è strutturato se i suoi blocchi sono collegati con gli schemi di flusso precedenti; • Un diagramma a blocchi è strutturato se sono strutturati tutti gli schemi di flusso che lo compongono; • In un diagramma a blocchi strutturato non compare mai alcuna istruzione di salto; 13 Schema di Iterazione • Ciclo definito: si conosce a priori il numero di iterazioni; • Ciclo indefinito: si esce dal ciclo al verificarsi di una data condizione; Iterazione per vero con controllo in testa Inizializzazione Iterazione Condizione di fine ciclo V F Iterazione per falso con controllo in coda Inizializzazione Condizione di fine ciclo F V Iterazione 14 Principio di Induzione • Sia Pn una proposizione di cui si può dire se è vera o falsa Hp) Sia P0 vera; Supponendo Pn-1 vera, si dimostra che Pn è vera; Ts) Pn è vera ∀n. 15 Algoritmi Ricorsivi • Un algoritmo si dice ricorsivo quando è definito nei termini di se stesso; • È costituito da due parti: 1. Passo base (stabilisce il risultato per valori precisi dei dati iniziali); 2. Passo di induzione (risultato per n in funzione del risultato per n-1). 16 Esempi di algoritmi ricorsivi • Potenza (definizione iterativa): a b = a1⋅ 42 a ⋅ ........ ⋅a 43 b volte • Potenza (definizione ricorsiva): b=0 1 a = b −1 a a b≠0 ⋅ b 17 Esempi di algoritmi ricorsivi • Fattoriale (definizione iterativa): n! = n ⋅ (n − 1) ⋅ ... ⋅ 1 • Fattoriale (definizione ricorsiva): n=0 1 n!= n ⋅ (n − 1)! n ≠ 0 18 Diagramma di Flusso del Fattoriale Iterativo Inizio i ←1 F fatt ← 1 i≤n V fatt ← fatt ⋅ i i ← i +1 Fine 19 Diagramma di Flusso del Fattoriale Ricorsivo Inizio V n=0 F fatt ← n ⋅ fatt(n −1) fatt ← 1 Fine 20 Sviluppo del Fattoriale Ricorsivo 4! = 4 ⋅ 3! 4! = 4 ⋅ 3! = 4 ⋅ 6 = 24 3! = 3 ⋅ 2! 3! = 3 ⋅ 2! = 3 ⋅ 2 = 6 2! = 2 ⋅ 1! 2! = 2 ⋅ 1! = 2 ⋅ 1 = 2 1! = 1 ⋅ 0! Passo base 1! = 1 ⋅ 0! = 1 ⋅ 1 = 1 0! = 1 21