Algoritmi e soluzione di problemi Dato un problema devo trovare una soluzione. Esempi: effettuare una telefonata calcolare l area di un trapezio L algoritmo è la sequenza di operazioni (istruzioni, azioni) da compiere per risolvere un problema: partendo dai dati di input disponibili elaborando i dati di input fornendo infine all utente i dati di output INPUT ALGORITMO OUTPUT 1
Algoritmo della telefonata Start 1. Solleva la cornetta 2. Componi il numero con il prefisso 3. Se libero attendi che il destinatario risponda Altrimenti vai al punto 5 4. Parla e ascolta 5. Posa la cornetta End 2
Un algoritmo deve essere: Caratteristiche degli algoritmi generale: cioè deve risolvere una classe di problemi dello stesso tipo (es. la somma di due numeri non è un algoritmo generale come la somma di n numeri) finito: ogni algoritmo deve essere composto da un numero finito di istruzioni e deve avere un punto di inizio e un punto di fine (es. calcola tutte le cifre decimai di pi-greco non avrà mai fine) completo: per tutti i casi che si possono verificare deve essere indicato un percorso da seguire (es. se il numero è positivo estrai la radice non è completo) riproducibile: ogni esecuzione dell algoritmo con i medesimi dati iniziali deve produrre sempre i medesimi risultati finali (es. la somma di n numeri deve fornire sempre lo stesso risultato corretto) 3
Metodologia di programmazione 1. Analisi del problema comprensione del problema individuazione dei dati di I/O eventuali vincoli (per esempio: numero > 0, numero compreso tra 1 e 5, ) 2. Algoritmo diagramma di flusso / pseudocodifica simulazione dell algoritmo su casi di prova 3. Codifica del programma scrittura del programma sorgente (source) in un linguaggio di programmazione 4. Validazione Traduzione in linguaggio macchina 4
Dati: variabili e costanti Variabile: cella che contiene un valore che può cambiare durante l esecuzione dell algoritmo numero Costante: cella che contiene un valore che NON cambia pigreco 3.14 Ogni dato (variabile o costante) ha un nome, un tipo (intero, reale, carattere, ) e un valore 5
Diagrammi di flusso L algoritmo può essere descritto con uno schema grafico detto diagramma di flusso. Start End Blocchi di inizio e di fine dell algoritmo I O Blocchi di I/O Blocco di azione F T Blocco di selezione (scelta) 6
Diagrammi di flusso Istruzioni di input, di output e di assegnazione con le variabili x i Istruzione di input per INSERIRE un valore da tastiera nella variabile x x o Istruzione di output per VISUALIZZARE sul monitor il valore contenuto nella variabile x X valore Istruzione di assegnazione per assegnare alla variabile a sinistra del simbolo il valore dell espressione a destra del simbolo di assegnazione 7
Calcolo dell area di un trapezio (1) 1. Analisi del problema Dati di input bmin = base minore nmag = base maggiore h = altezza Dati di output area = area del trapezio bmin bmag h Area del trapezio area 8
Calcolo dell area di un trapezio (2) 2. Algoritmo Start Diagramma di flusso bmin, bmag, h I Pseudocodifica Start Inserisci bmin, bmag, h area (bmin + bmag) * h / 2 Visualizza area End area (bmin + bmag) * h / 2 area O End 9
Programmazione strutturata Nell algoritmo le istruzioni sono organizzate secondo le seguenti strutture di controllo: sequenza: istruzioni eseguite nell ordine con cui sono scritte selezione binaria: scelta tra due possibili alternative iterazione pre-condizionale: ripetizione di un istruzione Ci sono alcune strutture derivate fornite dalla maggior parte dei linguaggi di programmazione: scelta multipla iterazione post-condizionale iterazione con contatore (ciclo FOR) 10
Teorema di Bohm-Jacopini La programmazione strutturata è la progettazione di software secondo un preciso modello organizzativo per ottenere una buona qualità dei programmi. Un corretto approccio al lavoro di creazione degli algoritmi è il teorema di Bohm-Jacopini che afferma: Qualsiasi algoritmo può essere scritto utilizzando soltanto tre strutture di controllo sequenza, selezione e iterazione 11
Sequenza Flow chart Start Pseudocodifica Istruzione1 Istruzione2 Start Istruzione1 Istruzione2 Istruzione3 End Istruzione3 End 12
Selezione binaria La struttura di selezione binaria permette di eseguire in alternativa una o più istruzioni in base al valore di una condizione logica. Flow chart T F Condizione Istruzione1 Istruzione2 Pseudocodifica Se condizione Allora istruzione1 Altrimenti istruzione2 Fine se 13
Selezione binaria Uno dei due rami della struttura può essere assente. T Condizione F Se condizione Allora istruzione Fine se Istruzione 14
Selezione binaria Posso avere strutture di scelta binaria annidate. Flow chart Pseudocodice T Istruzione1 Cond1 T F Cond2 F Se cond1 Allora istruzione1 Altrimenti Se Cond2 Allora istruzione2 Altrimenti istruzione3 Fine se Fine se Istruzione2 Istruzione3 15
Iterazione pre-condizionale L iterazione pre-condizionale permette di eseguire zero, una o più volte una o più istruzioni mentre è vera una determinata condizione. Flow chart Pseudocodice COND T Istruzioni F Mentre Cond Esegui Istruzioni Fine-Mentre 16
Iterazione pre-condizionale Nell iterazione pre-condizionale: la condizione di fine ciclo precede le istruzioni contenute nel ciclo (corpo del ciclo) iterazione con controllo in testa le istruzioni contenute nel ciclo potrebbero non essere mai eseguite se la condizione di fine ciclo è inizialmente falsa 17
Sommare 10 numeri inseriti da input c=0 s=0 inizializzazione contatore di ciclo c < 10 T c = c + 1 F condizione di fine ciclo incremento del contatore x s = s + x s 18