Realizzazione software • Due fasi: 1. Specifica dell'algoritmo 1.a 1.b Definizione dei dati Definizione della modalità della loro elaborazione 2. Realizzazione algoritmo con un particolare linguaggio (traduzione) 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 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 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 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 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 Simboli convenzionali 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 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 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 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 Strutture per il controllo di flusso • While-Do Strutture per il controllo di flusso • Repeat-Until Strutture per il controllo di flusso • If-Then-Else 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 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