Realizzazione software • Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro elaborazione 2. Realizzazione algoritmo con un particolare linguaggio (traduzione) Fondamenti di Informatica 1 Algoritmi • Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati • Il procedimento (chiamato algoritmo) è composto da passi elementari • Il modo di esprimere la sequenza dei passi elementari deve essere standardizzato Fondamenti di Informatica 2 Proprietà degli algoritmi • L'algoritmo è caratterizzato da: – finitezza: composto da un numero finito di passi elementari; le operazioni sono eseguite un numero finito di volte – non ambiguità: i risultati non variano in funzione della macchina/persona che esegue l'algoritmo (deterministico) – realizzabilità: deve essere eseguibile con le risorse a disposizione Fondamenti di Informatica 3 Algoritmo • Per definire un algoritmo è necessario: – condurre un'attenta analisi del problema – individuare i possibili ingressi – precisare le uscite – definire completamente e dettagliatamente la sequenza dei passi che portano alla soluzione è conveniente suddividere il problema in piccoli sottoproblemi Fondamenti di Informatica 4 Rappresentazione degli algoritmi • Si fa riferimento ai diagrammi di flusso (flow chart) • Sono rappresentazioni grafiche dei passi elementari; visione globale del problema • Strumento efficace per descrivere un algoritmo (più della descrizione a parole, troppo generica o appesantita da troppi dettagli) • Le operazioni base sono 4 Fondamenti di Informatica 5 Operazioni base • Le operazioni primarie sono: – Trasferimento di informazioni lettura dati, scrittura risultati, visualizzazione dati intermedi – Esecuzione di calcoli – Assunzione di decisioni – Esecuzione di iterazioni ripetizione di sequenze di operazioni • Sono rappresentate da forme geometriche diverse Fondamenti di Informatica 6 Simboli convenzionali ingresso/uscita inizializzazione documento elaborazione inizio/fine input manuale elab. predefinita connessioni disco decisione Fondamenti di Informatica mem. sequenziale 7 Esempi • Diagramma di flusso per: – somma di N dati – media di N dati – calcolo del fattoriale – calcolo della radice quadrata approssimata – calcolo dei primi N numeri primi – inserimento/ricerca di un elemento in un albero binario Fondamenti di Informatica 8 Tecniche di programmazione • Programmazione top-down: – scomposizione iterativa del problema in sottoproblemi – i sottoproblemi devono essere indipendenti ed avere interfacce ben definite – visibilità dei dettagli di ogni sottoproblema • Programmazione strutturata Fondamenti di Informatica 9 Programmazione strutturata • Teoria nata nel 1965 • Basata su eliminazione dei salti incondizionati e -più generalmentesulla definizione di restrizioni • Rendono la scrittura dei programmi e la loro manutenzione più semplici • Migliorano la leggibilità dei programmi Fondamenti di Informatica 10 Teorema di Jacopini-Bohm • Per costruire un programma sono necessari 3 soli blocchi: 1. blocco di elaborazione è assimilabile ad una sola istruzione o un solo blocco con un ingresso e una uscita 2. meccanismo di ripetizione (o loop) 3. meccanismo di decisione binaria Fondamenti di Informatica 11 Strutture per il controllo di flusso • While-Do I I O Fondamenti di Informatica O 12 Strutture per il controllo di flusso • Repeat-Until I I O O Fondamenti di Informatica 13 Strutture per il controllo di flusso • If-Then-Else I I O O Fondamenti di Informatica 14 Teorema di Jacopini-Bohm • All'interno di ogni blocco si nasconde un ciclo o una biforcazione • Il programma risulta quindi composto da una sequenza di blocchi, senza controlli di flusso • Simile alla programmazione top-down dove, però, i blocchi non devono essere indipendenti e omogenei Fondamenti di Informatica 15 Scelta dell'algoritmo • Non esistono strutture (dati e di controllo) preferite: la loro scelta dipende dal tipo di linguaggio in cui si codifica l'algoritmo • La scelta dell'algoritmo ottimo dipende dal linguaggio a disposizione: occorre conoscere bene il linguaggio e le primitive che esso offre Fondamenti di Informatica 16