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 proposizioni (espressioni) composte da due parti: 1. 2. Descrizioni delle operazioni (istruzioni); 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. – Il controllo viene espresso per mezzo di predicati. • Proposizione: Costrutto 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 (NOT) e una sola variabile; - Predicati Composti: predicati con operatori logici (AND, OR, NOT). 7 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 relazionali. • 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 8 Diagrammi a Blocchi • Esempio di un linguaggio generalizzato per la descrizione degli algoritmi; • I blocchi contengono istruzioni elementari, la forma del blocco indica il tipo di istruzioni; Inizio V Lettura Scrittura Azioni F Controllo Fine 9 Analisi Strutturata • Procedimento che permette di ottenere descrizioni di algoritmi che siano facilmente documentabili e comprensibili; • Schemi di flusso: – Schema di sequenza; – Schema di selezione; – Schema di iterazione: Iterazione per vero Inizializzazione con controllo in testa Iterazione Condizione di fine ciclo V F Iterazione per falso con controllo in coda Inizializzazione Condizione di fine ciclo F V Iterazione 10 Diagramma a Blocchi Strutturati • Uno schema di flusso è strutturato se i suoi blocchi sono collegati con gli schemi di flusso precedenti; • Un diagramma a blocco è 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; 11 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. 12 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). 13 Esempi di algoritmi ricorsivi • Potenza (definizione iterativa): a b a a ........ a b volte • Potenza (definizione ricorsiva): b0 1 a b 1 a a b0 b 14 Esempi di algoritmi ricorsivi • Fattoriale (definizione iterativa): n! n (n 1) ... 1 • Fattoriale (definizione ricorsiva): n0 1 n! n (n 1)! n 0 15 Diagramma di Flusso del Fattoriale Ricorsivo Inizio V n0 F fatt n (n 1)! fatt 1 Fine 16 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! 11 1 0! 1 17