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