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
Fondamenti di Informatica 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
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
Fondamenti di Informatica 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
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
Fondamenti di Informatica 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
Simboli convenzionali ingresso/uscita inizializzazione documento elaborazione inizio/fine input manuale elab. predefinita connessioni disco decisione mem. sequenziale Fondamenti di Informatica
Fondamenti di Informatica 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
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
Programmazione strutturata Teoria nata nel 1965 Basata su eliminazione dei salti incondizionati e -più generalmente- sulla definizione di restrizioni Rendono la scrittura dei programmi e la loro manutenzione più semplici Migliorano la leggibilità dei programmi Fondamenti di Informatica
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
Strutture per il controllo di flusso While-Do I I O O Fondamenti di Informatica
Strutture per il controllo di flusso Repeat-Until I I O O Fondamenti di Informatica
Strutture per il controllo di flusso If-Then-Else I I O O Fondamenti di Informatica
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
Fondamenti di Informatica 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