Lauree triennali della Facoltà di Medicina Informatica LEZIONE 6 Algoritmi, dati e programmi AA 2002/2003 © Morpurgo, Zanaboni 1 Informatica Lezione 6. Algoritmi Elaborazione di informazione Introduzione ai concetti di: • algoritmo • programma • dato • linguaggio di programmazione • diagramma di flusso AA 2002/2003 © Morpurgo, Zanaboni 2 Informatica Lezione 6. Algoritmi 1 Elaborazione di informazione • Ogni problema di elaborazione di informazione è caratterizzato da • un insieme di dati di partenza • un risultato cercato • Ogni sua soluzione è • una procedura che genera un risultato sulla base dei dati indicati AA 2002/2003 © Morpurgo, Zanaboni 3 Informatica Lezione 6. Algoritmi Elaborazione di informazione Distinguiamo tra: • conoscenza di come si risolve un problema • analisi del problema • identificazione di una soluzione • descrizione della soluzione • effettiva capacità di risolvere un problema • interpretazione della soluzione • attuazione della soluzione AA 2002/2003 © Morpurgo, Zanaboni 4 Informatica Lezione 6. Algoritmi 2 Elaborazione di informazione • La conoscenza di come si risolve un problema è ciò che ci permette di sviluppare un programma. • Il programma sarà poi interpretato ed eseguito da un esecutore (es.: essere umano, calcolatore, ...) AA 2002/2003 © Morpurgo, Zanaboni 5 Informatica Lezione 6. Algoritmi Elaborazione di informazione Un esecutore è caratterizzato da: • il linguaggio che è in grado di interpretare • l’insieme di azioni che è in grado di compiere • l’insieme delle regole che ad ogni costrutto linguistico sintatticamente corretto associano le relative azioni da compiere. AA 2002/2003 © Morpurgo, Zanaboni 6 Informatica Lezione 6. Algoritmi 3 Elaborazione di informazione Per la descrizione della soluzione si utilizza: • linguaggio naturale • italiano, inglese, … • sono ambigui • linguaggio formale • • • • • formalismo matematico pseudo-codice diagramma di flusso (flow-chart) linguaggio di programmazione codice macchina • non sono ambigui AA 2002/2003 © Morpurgo, Zanaboni 7 Informatica Lezione 6. Algoritmi Elaborazione di informazione La descrizione della soluzione può essere fatta a diversi livelli di dettaglio Esempio: • cucinare le lasagne al forno • preparare il ragù • preparare la besciamella • setacciare 50g di farina e stemperarla con 10cc di latte • aggiungere 30cc di latte e 50g di burro a pezzetti • …. • bollire le lasagne • mettere a strati nella teglia e cuocere in forno AA 2002/2003 © Morpurgo, Zanaboni 8 Informatica Lezione 6. Algoritmi 4 Elaborazione di informazione La descrizione rigorosa di un metodo che consente di ottenere un risultato attraverso passi elementari si chiama algoritmo. AA 2002/2003 © Morpurgo, Zanaboni 9 Informatica Lezione 6. Algoritmi Elaborazione di informazione Riassumendo, il processo di sviluppo di un programma prevede le seguenti fasi: • analisi del problema e identificazione di una soluzione • formalizzazione della soluzione e definizione dell’algoritmo risolutivo • programmazione in un linguaggio di programmazione “ad alto livello” • traduzione in linguaggio macchina AA 2002/2003 © Morpurgo, Zanaboni 10 Informatica Lezione 6. Algoritmi 5 Algoritmo Definizione: • un insieme finito, ordinato di passi • che determinano un procedimento atto a risolvere in un tempo finito • un problema o una classe di problemi • utilizzando dati iniziali • e ottenendo dei risultati. AA 2002/2003 © Morpurgo, Zanaboni 11 Informatica Lezione 6. Algoritmi Algoritmo Esempi: • gli algoritmi per eseguire le 4 operazioni che ci sono stati insegnati alle elementari • in un linguaggio adatto ai bambini • la ricetta per fare le lasagne • linguaggio dei libri di cucina • livello di dettaglio diverso a seconda delle competenze dell’esecutore AA 2002/2003 © Morpurgo, Zanaboni 12 Informatica Lezione 6. Algoritmi 6 Algoritmo Esempio: Algoritmo per accedere al proprio account sul computer del laboratorio: Accendere lo schermo se è spento Scrivere il proprio <username> nella riga in cui compare la scritta login: Scrivere la propria <password> nella riga in cui compare la scritta password Se il sistema risponde con la frase: «utente non abilitato» allora chiamare il tutor. AA 2002/2003 © Morpurgo, Zanaboni 13 Informatica Lezione 6. Algoritmi Linguaggi di programmazione Un linguaggio di programmazione è costituito da: • un vocabolario • un insieme di regole sintattiche che specificano come comporre istruzioni ben formate • una semantica che associa un “significato” alle istruzioni ben formate, cioè l’azione denotata da ciascuna istruzione. AA 2002/2003 © Morpurgo, Zanaboni 14 Informatica Lezione 6. Algoritmi 7 Algoritmi e programmi • Per costruire un programma conviene procedere con metodo, • passando da un’analisi del problema da risolvere • all’algoritmo di soluzione rappresentato in un “linguaggio” adatto all’uomo ma non troppo lontano dai linguaggi di programmazione • e infine al programma scritto nel linguaggio di programmazione prescelto AA 2002/2003 © Morpurgo, Zanaboni 15 Informatica Lezione 6. Algoritmi Algoritmi e programmi Approccio top-down • si parte da una descrizione ad alto livello della soluzione, in cui si individuano sotto-problemi • si definiscono le soluzioni dei sotto-problemi in termini di operazioni più elementari • … e così via, fino ad esprimere tutto in termini di problemi elementari. Due aspetti da gestire: • i dati da utilizzare • la successione di operazioni da compiere AA 2002/2003 © Morpurgo, Zanaboni 16 Informatica Lezione 6. Algoritmi 8 Algoritmi e programmi • introdurremo la nozione di • contenitore di dati • come astrazione dalla nozione di zona della memoria utilizzata da un computer per i dati • descriveremo gli algoritmi mediante • diagrammi di flusso • strumento per descrivere una successione di operazioni adatto all’uomo e orientato alla traduzione in un linguaggio di programmazione AA 2002/2003 © Morpurgo, Zanaboni 17 Informatica Lezione 6. Algoritmi Processo di sviluppo di un algoritmo orientato alla programmazione AA 2002/2003 © Morpurgo, Zanaboni 18 Informatica Lezione 6. Algoritmi 9 • Descriveremo i passi da seguire nella costruzione di un algoritmo, intesa come passo preliminare alla costruzione di un corrispondente programma. • Il processo delineato è adatto alla programmazione in piccolo • programmazione in piccolo = costruzione di programmi di dimensioni trattabili da un singolo programmatore • La programmazione in grande richiede processi di sviluppo ingegnerizzati, che non tratteremo. AA 2002/2003 © Morpurgo, Zanaboni 19 Informatica Lezione 6. Algoritmi I passi del processo di sviluppo • A) Diamo un nome al problema e partiamo dall’analisi del problema • B) Scriviamo la specifica funzionale • C) A partire da un’idea dell’algoritmo, introduciamo i contenitori di dati necessari e le relative operazioni elementari • D) A partire da un’idea dell’algoritmo, scriviamo un diagramma di flusso che indica in modo preciso e non ambiguo la successione di operazioni da eseguire AA 2002/2003 © Morpurgo, Zanaboni 20 Informatica Lezione 6. Algoritmi 10 Esempio 1. AA 2002/2003 © Morpurgo, Zanaboni 21 Informatica Lezione 6. Algoritmi A) Problema e analisi del problema • L’analisi del problema è il primo passo; deve fornire • un nome e una breve descrizione di cosa si vuol fare; • un elenco di requisiti: richieste a cui deve soddisfare il programma AA 2002/2003 © Morpurgo, Zanaboni 22 Informatica Lezione 6. Algoritmi 11 Esempio di analisi del problema Problema telefonata • Descrizione: • vogliamo chiamare un abbonato con il telefono. • Requisiti, in cui prevediamo i diversi casi: • la telefonata viene eseguita con successo • messaggio “telefonata riuscita” • la telefonata non può essere portata a termine • messaggio “telefonata non riuscita” AA 2002/2003 © Morpurgo, Zanaboni 23 Informatica Lezione 6. Algoritmi B) Specifica funzionale Una specifica funzionale indica • quali sono i dati iniziali, cioè quelli da elaborare • detti anche ingressi all’algoritmo • che risultato si vuole, in funzione degli ingressi • detto anche uscita dell’algoritmo AA 2002/2003 © Morpurgo, Zanaboni 24 Informatica Lezione 6. Algoritmi 12 Esempio: specifica funzionale • TELEFONATA: specifica funzionale • Argomenti o ingressi: • N : numero da comporre • Risultati o uscite: • messaggio “telefonata riuscita” • messaggio “telefonata non riuscita” AA 2002/2003 © Morpurgo, Zanaboni 25 Informatica Lezione 6. Algoritmi C) I contenitori di dati • Un algoritmo ha bisogno di tener traccia di ingressi e risultati: • sia il risultato finale • sia eventuali risultati intermedi • Allo scopo, usa dei contenitori di dati AA 2002/2003 © Morpurgo, Zanaboni 26 Informatica Lezione 6. Algoritmi 13 I contenitori di dati Un contenitore dati • è un’astrazione della nozione di area di memoria contenente dei dati, • è detto anche variabile di programma • I dati contenuti hanno un tipo, che caratterizza • un insieme di elementi • le operazioni possibili su di essi AA 2002/2003 © Morpurgo, Zanaboni 27 Informatica Lezione 6. Algoritmi I contenitori di dati • I contenitori di dati utilizzati per i risultati intermedi dipendono dall’algoritmo • quindi, a meno di casi assai elementari, è necessario avere già un’idea dell’algoritmo per determinarli • difficilmente sono TUTTI prevedibili sin dall’inizio; man mano che l’algoritmo prende forma, si possono aggiungere al volo nuovi contenitori AA 2002/2003 © Morpurgo, Zanaboni 28 Informatica Lezione 6. Algoritmi 14 Il tipo di dati di un contenitore • TIPO DATI = insieme di elementi rappresentabili finitamente, dotato di operazioni primitive che si suppongono calcolabili dall’esecutore dell’algoritmo • ESEMPIO: il tipo degli interi • è l’insieme degli interi • essi sono rappresentabili da successioni finite di cifre con eventuale segno • dotato delle seguenti operazioni primitive (e calcolabili) • +, -, *, divisione intera, resto AA 2002/2003 © Morpurgo, Zanaboni 29 Informatica Lezione 6. Algoritmi Rappresentazione grafica dei contenitori di dati pippo: intero 54 AA 2002/2003 © Morpurgo, Zanaboni Nome contenitore e tipo Contenuto = dato appartenete al tipo di dati associato al nome 30 Informatica Lezione 6. Algoritmi 15 I contenitori utilizzati da TELEFONATA • Di quali contenitori abbiamo bisogno per TELEFONATA? • Sicuramente di quello per contenere i dati di ingresso ed il risultato • 1 contenitore per N (ingresso) • Eventuali contenitori per i risultati intermedi • Contenitore per il risultato finale AA 2002/2003 © Morpurgo, Zanaboni 31 Informatica Lezione 6. Algoritmi • Relativamente agli ingressi, abbiamo il contenitore: N : int N • Relativamente all’uscita, abbiamo il contenitore: m : string m In blu indichiamo il nome del contenitore, in rosso il numero contenuto in esso Il tipo int corrisponde ai numeri interi; le operazioni che assumiamo disponibili per esso sono le solite: somma, prodotto, …. AA 2002/2003 © Morpurgo, Zanaboni 32 Informatica Lezione 6. Algoritmi 16 D) L’algoritmo: primo passo • Descrivere brevemente l’idea dell’algoritmo • cioè i passi da eseguire per giungere alla soluzione usando i contenitori di dati e le operazioni disponibili su di essi in base al tipo di dati, a grandi linee • Può darsi che una prima idea sia già stata raggiunta per trovare i contenitori dati più appropriati • in tal caso si procede ad un eventuale raffinamento dell’idea AA 2002/2003 © Morpurgo, Zanaboni 33 Informatica Lezione 6. Algoritmi L’idea dell’algoritmo di soluzione di TELEFONATA • Sollevo il ricevitore • analizzo i vari casi di segnale: • assente • presente • se posso, procedo componendo il numero • di nuovo analizzo i vari casi: • e caso per caso costruisco il messaggio da inviare in uscita. AA 2002/2003 © Morpurgo, Zanaboni 34 Informatica Lezione 6. Algoritmi 17 L’idea dell’algoritmo di soluzione di TELEFONATA • Più in dettaglio: • il telefono non dà segnale quando solleviamo la cornetta, non possiamo procedere e mettiamo giù • altrimenti possiamo comporre il numero • se il segnale è occupato o assente, non possiamo procedere e mettiamo giù • altrimenti, aspettiamo la risposta • se non arriva entro 10 squilli, mettiamo giù • altrimenti parliamo e poi mettiamo giù • Passiamo al diagramma di flusso: AA 2002/2003 © Morpurgo, Zanaboni Informatica Lezione 6. Algoritmi 35 Diagramma di flusso Contenitori di dati inizio Leggere il numero da comporre. Sollevare il ricevitore. no segnale? sì Comporre il numero no N N messaggio m libero? sì no risposta? sì Messaggio "Telefonata non riuscita". AA 2002/2003 © Morpurgo, Zanaboni 36 Informatica Lezione 6. Algoritmi 18 Diagramma di flusso Contenitori di dati N no N risposta? sì Messaggio "Telefonata non riuscita". messaggio Parlare. m no finito? sì Messaggio "Telefonata riuscita". Appendere il ricevitore fine AA 2002/2003 © Morpurgo, Zanaboni Informatica Lezione 6. Algoritmi 37 Esecuzione Contenitori di dati inizio Leggere il numero da comporre. Sollevare il ricevitore. no segnale? N 025031 messaggio sì Comporre il numero no libero? sì no risposta? sì Messaggio "Telefonata non riuscita". AA 2002/2003 © Morpurgo, Zanaboni 38 Informatica Lezione 6. Algoritmi 19 Esecuzione Contenitori di dati inizio Leggere il numero da comporre. Sollevare il ricevitore. no segnale? sì Comporre il numero no N 025031 messaggio m libero? sì no risposta? sì Messaggio "Telefonata non riuscita". AA 2002/2003 © Morpurgo, Zanaboni Informatica Lezione 6. Algoritmi 39 Esecuzione Contenitori di dati N no 025031 risposta? sì Messaggio "Telefonata non riuscita". messaggio Parlare. T. non r. no finito? sì Messaggio "Telefonata riuscita". Appendere il ricevitore fine AA 2002/2003 © Morpurgo, Zanaboni 40 Informatica Lezione 6. Algoritmi 20 Esecuzione Contenitori di dati N no 025031 risposta? sì Messaggio "Telefonata non riuscita". messaggio Parlare. T. non r. no finito? sì Messaggio "Telefonata riuscita". Appendere il ricevitore fine AA 2002/2003 © Morpurgo, Zanaboni Informatica Lezione 6. Algoritmi 41 Esecuzione Contenitori di dati N no 025031 risposta? sì Messaggio "Telefonata non riuscita". messaggio Parlare. T. non r. no finito? sì Messaggio "Telefonata riuscita". Appendere il ricevitore fine AA 2002/2003 © Morpurgo, Zanaboni 42 Informatica Lezione 6. Algoritmi 21 Espressioni booleane • Le espressioni che mi permettono di prendere delle decisioni sono di tipo booleano • il tipo booleano contiene due valori • vero, falso • Esempi di espressioni booleane disponibili nei tipi numerici • x<y • (x + 5) = y • ecc. • Un valore booleano è rappresentabile con un bit AA 2002/2003 © Morpurgo, Zanaboni 43 Informatica Lezione 6. Algoritmi Esempio 2. AA 2002/2003 © Morpurgo, Zanaboni 44 Informatica Lezione 6. Algoritmi 22 A) analisi del problema Problema conversione gradi C <-> F • Descrizione: vogliamo convertire in gradi centigradi la temperatura espressa in gradi Fahrenheit e viceversa. • Requisiti: dato un numero (temperatura) e un’opzione (C->F o F->C), il programma calcolerà la conversione: • “T1 in C = T2 in F” • oppure, “T1 in F = T2 in C” AA 2002/2003 © Morpurgo, Zanaboni 45 Informatica Lezione 6. Algoritmi Esempio: specifica funzionale • GRADI: specifica funzionale • Argomenti o ingressi: • T : numero reale, da convertire • o : opzione di conversione • 1 = C -> F • 2 = F -> C • Risultati o uscite: • “T in C = T2 in F” • oppure, “T in F = T2 in C” AA 2002/2003 © Morpurgo, Zanaboni 46 Informatica Lezione 6. Algoritmi 23 I contenitori utilizzati da CONVERSIONE GRADI • Di quali contenitori abbiamo bisogno? • Sicuramente di quelli per contenere i dati di ingresso • 2 contenitori per T e o (ingressi) • T sarà di tipo float, o può essere di tipo bool • Eventuali contenitori per i risultati intermedi • Il contenitore per il risultato finale • T2, di tipo float AA 2002/2003 © Morpurgo, Zanaboni 47 Diagramma di flusso Contenitori di dati inizio T T (ingressi) Metti T in temperatura. Metti O in opzione. opzione = “da C a F” Informatica Lezione 6. Algoritmi O falso opzione = “da F a C” O risultato T2 vero Metti il valore di T . 9/5 + 32 in risultato. Metti il valore di (T - 32) * 5/9 in risultato. AA 2002/2003 © Morpurgo, Zanaboni fine 48 Informatica Lezione 6. Algoritmi 24 Contenitori di dati Esecuzione inizio T 10 (ingressi) Metti T in temperatura. Metti O in opzione. opzione = “da C a F” O falso C->F opzione = “da F a C” risultato vero Metti il valore di T . 9/5 + 32 in risultato. Metti il valore di (T - 32) * 5/9 in risultato. AA 2002/2003 © Morpurgo, Zanaboni fine Informatica Lezione 6. Algoritmi 49 Diagrammi di flusso metti x+y in y ; metti x-1 in x; Blocchi di elaborazione AA 2002/2003 © Morpurgo, Zanaboni falso vero x=0 Blocchi decisionali contengono una condizione booleana; se vera, si segue la freccia vero, se falsa si segue la freccia falso. 50 Informatica Lezione 6. Algoritmi 25 Strutture di controllo principali vero sequenza AA 2002/2003 © Morpurgo, Zanaboni falso selezione 51 Informatica Lezione 6. Algoritmi Strutture di controllo principali falso iterazione vero AA 2002/2003 © Morpurgo, Zanaboni 52 Informatica Lezione 6. Algoritmi 26 Esempio di decomposizione modulare AA 2002/2003 © Morpurgo, Zanaboni 53 Informatica Lezione 6. Algoritmi Simboli principali • inizio o fine • elaborazione • decisione • connessione AA 2002/2003 © Morpurgo, Zanaboni 54 Informatica Lezione 6. Algoritmi 27 RIASSUMENDO: Algoritmi, programmi e dati Computer = macchina che svolge rapidamente operazioni elementari Algoritmo = insieme di istruzioni che indicano come svolgere operazioni complesse su dei dati attraverso successioni di operazioni elementari Programma = algoritmo in un linguaggio “comprensibile” dal computer. Dato = informazione da elaborare rappresentata in un formato che consenta al programma di operare su di essa AA 2002/2003 © Morpurgo, Zanaboni 55 Informatica Lezione 6. Algoritmi 28