Programmi 1 - Dipartimento di Informatica

Informatica Generale
Alessandra Di Pierro
email: [email protected]
Ricevimento:
Giovedì ore 14.30-17.30
presso
Dipartimento di Informatica, Via Buonarroti, 2
stanza 362 DE Tel. 050.2212.779
o per posta elettronica
Pagina web del corso:
http://www.di.unipi.it/~dipierro/IG03.html
1
La scorsa lezione …
• Abbiamo introdotto la struttura tipica del
calcolatore di von Neumann
Memoria
(RAM,dischi, etc)
Mantiene
Dati e Programmi
Processore
(CPU)
E’ un esecutore capace
di interpretare i singoli passi
richiesti dai programmi
(istruzioni elementari)
Sottosistema
di Interfaccia
Permette di comunicare
dati programmi alla
macchina e di ottenere i
risultati (tastiera, micr.,
stampante, schermo, )
2
La scorsa lezione ...
• Abbiamo introdotto algoritmi e programmi
Dati di
ingresso
Codificati
opportunamente
Elaborazione
Dati di
uscita
Trasformazione dei dati di ingresso
seguendo i passi specificati
da un opportuno algoritmo
Ovvero la descrizione dell’algoritmo
secondo un linguaggio comprensibile al
calcolatore
Umano
(che conosce
l’algoritmo)
Calcolatore
programma
(che conosce alcune azioni elementari:
es confrontare due numeri, eseguire semplici
operazioni aritmetiche
3
Dal problema all’algoritmo:
un esempio
• La biblioteca
– Libri disposti sugli scaffali
– La posizione di ogni libro è fissata dalle due
coordinate (S,P) dove
• S è il numero dello scaffale dove si trova il libro
• P è la posizione all’interno dello scaffale
– La biblioteca ha uno schedario con una scheda per
ogni libro. Ogni scheda contiene, nell’ordine:
• cognome e nome dell’autore
• titolo del libro
• numero scaffale (S) e posizione nello scaffale (P)
4
Dal problema all’algoritmo:
esempio (2)
• La biblioteca (cont.)
– Le schede sono ordinate in ordine alfabetico del
campo autore
• Problema:
Vogliamo specificare un algoritmo che spieghi
all’utente della biblioteca come trovare un libro
cercato supponendo di sapere : Autore e Titolo
5
Dal problema all’algoritmo:
esempio (3)
• Un primo algoritmo per il prestito:
1. Decidi il libro da richiedere
2. Cerca la scheda nello schedario
3. Trascrivi la posizione (S,P)
4. Accedi alla posizione (S,P)
5. Preleva il libro e compila la scheda di prestito
• Le operazioni elementari in questo caso sono
piuttosto complesse…
6
Dal problema all’algoritmo:
esempio (4)
• … e se non so come si effettua la ricerca nello
schedario ?
– Tutte le operazioni specificate devono essere
‘elementari’ per chi esegue l’algoritmo.
– Se non lo sono è possibile spiegarle a parte per
mezzo di un sotto-algoritmo
• es : nello spiegare una ricetta spesso si fa riferimento a
parti spiegate in altre ricette, tipicamente
‘… preparare la pasta frolla (ricetta p. 212) usando i primi 3
ingredienti, poi preparare il ripieno come segue ….’
7
Dal problema all’algoritmo:
esempio (5)
• Un sotto algoritmo per cercare nello schedario :
1. Apri il classificatore
2. Prendi la prima scheda
3. Confronta il campo autore e titolo con quelli cercati
4. Se sono uguali, allora la ricerca è terminata,
altrimenti prendi la scheda successiva e vai al passo 3
5. Se le schede sono esaurite, allora il libro cercato non
esiste.
8
Dal problema all’algoritmo:
esempio (6)
Due considerazioni :
– Per ogni problema\sotto-problema ci sono algoritmi
più o meno veloci
• es: per la ricerca nello schedario si può utilizzare
l’algoritmo che utilizziamo solitamente (e spesso non
consapevolmente) per cercare una parola sul dizionario
– L’algoritmo presentato, per quanto semplice presenta
sia operazioni elementari (confronta, prendi) che
strutture di controllo (istruzioni che organizzano la
sequenza in cui vengono effettuate le operazioni
elementari, es. se….altrimenti … vai a …)
9
Dal problema all’algoritmo: le
strutture di controllo
• La struttura di controllo condizionale
1. Apri il classificatore
2. Prendi la prima scheda
3. Confronta il campo autore e titolo con quelli cercati
4. Se (sono uguali), allora la ricerca è terminata,
altrimenti prendi la scheda successiva e vai al passo 3
5. Se (le schede sono esaurite) allora il libro cercato
non esiste.
(….) specifica la condizione
10
Dal problema all’algoritmo: le
strutture di controllo (2)
• La struttura di salto (vai a o go_to)
1. Apri il classificatore
2. Prendi la prima scheda
3. Confronta il campo autore e titolo con quelli cercati
4. Se sono uguali, allora la ricerca è terminata,
altrimenti prendi la scheda successiva e vai al passo 3
5. Se le schede sono esaurite allora il libro cercato non
esiste.
11
Dal problema all’algoritmo: le
strutture di controllo (3)
• La struttura di iterazione (finchè…ripeti)
1. Apri il classificatore
2. Prendi la prima scheda
3. Confronta il campo autore e titolo con quelli cercati
3. Finchè (il campo autore e titolo sono diversi da
quelli cercati) ripeti
a. Prendi la scheda successiva
b. Confronta il campo autore e titolo con quelli cercati
5. Se le schede sono esaurite allora il libro cercato non
esiste.
12
Algoritmi: ancora esempi ...
• Immaginiamo degli algoritmi per i seguenti
problemi :
1. Trovare il maggiore fra 2 numeri interi x e y
2. Trovare il maggiore fra 3 numeri interi x, y e z
3. Trovare il massimo fra N numeri
• assumiamo le seguenti operazioni elementari
– somma (+), sottrazione (-), stabilire se un numero è
maggiore o minore di 0, leggere/scrivere dallo
schermo
• … dove ragionevole :
– definiamo dei sottoalgoritmi e utilizziamo le strutture
di controllo
13
Il maggiore fra 2 numeri interi x, y
• Algoritmo max
1. Leggi i valori di x e y dall’esterno
2. Calcola la differenza d fra x e y (d=x-y)
3. Se d è maggiore di 0 vai al passo 5 altrimenti
prosegui in sequenza
4. Stampa ‘il massimo è …’ seguito dal valore di y e
vai a 6
5. Stampa ‘il massimo è …’ seguito dal valore di x
6. Termina l’esecuzione
14
Il maggiore fra 2 numeri interi x e y (2)
• x, y, d sono le ‘variabili’, cioè i contenitori per i
dati coinvolti nell’elaborazione. Ogni variabile
ha un nome (x,y…) e un valore: il dato contenuto
o memorizzato in essa
• Dobbiamo specificare esplicitamente come e
quando l’esecuzione termina!
15
Il maggiore fra 3 numeri interi
• Possiamo sfruttare l’algoritmo max come
‘sottoalgoritmo’
• Algoritmo max_3
1. Leggi i valori di x, y, z dall’esterno
2. Valuta se x> y usando l’algoritmo max
3. In caso affermativo vai al passo 5
4. Trova il massimo fra y e z (con max) e termina
5. Trova il massimo fra x e z (con max) e termina
16
Il massimo fra N numeri interi
• Possiamo ancora sfruttare l’algoritmo max come
‘sottoalgoritmo’!
• Idea … trovare prima il maggiore fra i primi due
numeri, poi confrontare il risultato con il terzo,
poi con il quarto etc …
• In pratica, possiamo usare la struttura di
controllo iterativa finchè…ripeti per effettuare le
operazioni di max su tutti i numeri in ingresso
17
Determinare il massimo fra N
numeri interi
• Algoritmo max_N
1. Leggi il valore di N dall’esterno
2. Leggi i primi due numeri
3. Trova il maggiore m fra i primi due numeri (con
max)
4. Finchè (hai esaminato meno di N numeri)
a. Leggi un nuovo numero x
b. Trova il maggiore fra m e x usando l’algoritmo max
c. Assegna il valore del maggiore a m
5. Stampa ‘il massimo è…’ ed il valore di m e termina
18
Diagrammi di Flusso
• Sono grafici che permettono di esprimere un
algoritmo in modo preciso ed intuitivo
• Si costruiscono a partire da un certo numero di
‘blocchi base’ che rappresentano le operazioni
elementari ed i costrutti di controllo
19
Diagrammi di Flusso (2)
I blocchi base :
Inizio
Sottoprog.
Operazione I/0
Fine
Si
No
Cond.
Elaborazione
20
Diagrammi di Flusso (3)
• I blocchi base vengono collegati tramite ‘freccie’
che collegano un’azione alla successiva
all’interno dell’algoritmo
• Vediamo i diagrammi di flusso degli algoritmi
per il calcolo del massimo già visti
1. Trovare il maggiore fra 2 numeri interi x e y
2. Trovare il maggiore fra 3 numeri interi x, y e z
3. Trovare il massimo fra N numeri
21
Il maggiore fra 2 numeri interi x, y
• Algoritmo max
1. Leggi i valori di x e y dall’esterno
2. Calcola la differenza d fra x e y (d=x-y)
3. Se d è maggiore di 0 vai al passo 5 altrimenti
prosegui in sequenza
4. Stampa ‘il massimo è …’ seguito dal valore di x e
vai a 6
5. Stampa ‘il massimo è …’ seguito dal valore di y
6. Termina l’esecuzione
22
DF di max
Inizio
Leggi x e y
d=x-y
Si
No
d>0?
Scrivi ‘max è y’
Scrivi ‘max è x’
Fine
23
DF di max
Inizio
Passo 1
Leggi x e y
Passo 2
d=x-y
Si
Passo 3No
d>0?
Scrivi ‘max è y’
Scrivi ‘max è x’
Passo 5
Passo 4
Fine
Passo 6
24
Determinare il massimo fra N
numeri interi
• Algoritmo max_N
1. Leggi il valore di N dall’esterno
2. Leggi i primi due numeri
3. Trova il maggiore m fra i primi due numeri (con
max)
4. Finchè (hai esaminato meno di N numeri)
a. Leggi un nuovo numero x
b. Trova il maggiore fra m e x usando l’algoritmo max
c. Assegna il valore del maggiore a m
5. Stampa ‘il massimo è…’ ed il valore di m e termina
26
DF per il problema del
massimo di N numeri
Inizio
Leggi i primi due numeri x1 e x2
e memorizzali nelle variabili a e b
m = max(a,b)
Si
Leggi il nuovo
numero in a
Ancora numeri
da esaminare ?
No
Scrivi ‘max è m’
Fine
m = max(a,m)
Supponiamo N fissato
27
DF e programmi (1)
• I DF sono un primo passo verso la
formalizzazione di un algoritmo in modo
non ambiguo
• Per ottenere una codifica interpretabile
direttamente dalla macchina dobbiamo però
specificare molti più dettagli :
– trasformare tutte le ‘frasi’ in variabili e
modifiche su di esse :
• es : ‘ancora numeri da esaminare’ deve essere
tradotto in qualcosa di calcolabile dalla macchina
usando solo le operazioni elementari
28
Leggi N
Inizio
Leggi i primi due numeri x1 e x2
e memorizzali nelle variabili a e b
m = max(a,b)
Si
I=2
No
I<N?
I=I+1
Leggi il nuovo
numero in a
Scrivi ‘max è m’
Fine
DF per il problema del
massimo di N numeri
(seconda versione)
m = max(a,m)
Supponiamo N almeno 2
29
DF e programmi (2)
• Per ottenere una codifica interpretabile
direttamente dalla macchina dobbiamo
anche :
– decidere come codificare l’informazione
• non banale in esempi più complessi del nostro, ad
esempio se voglio codificare un’immagine o un
video
– scrivere il tutto con una codifica ‘leggibile’
dalla macchina
• … ma la macchina lavora molto a basso livello
(linguaggio macchina, codificato con zeri e uni) !!!!
30
DF e programmi (3)
• … soluzione….
– usare linguaggi di ‘livello’ più alto (linguaggi
di programmazione ad alto livello)
– usare dei programmi appositi per far tradurre i
nostri programmi in linguaggio macchina (i
compilatori)
• importante ….
– I tipici linguaggi (C, Java, Fortran, Basic…)
permettono di definire strutture del tutto
analoghe ai diagrammi di flusso che abbiamo
visto finora
31
DF e programmi : max in C
main() /* calcola max */
{
int x, y, d;
scanf ("%d %d”, &x, &y) ;
d = x - y ;
if (d > 0)
printf (”il max è %d”, &x) ;
else
printf (”il max è %d”, &y) ;
return ;
}
32
DF e programmi : max_N in C (1)
main() /* calcola max_N */
{ unsigned int m, i, a, b;
i = 2 ;
scanf ("%d %d”, &a, &b);
m = max(a,b);
while (i < N) { scanf ("%d ”, &a) ;
m = max(a,m); }
printf (”il max è %d”, &m) ;
return ;
}
33
DF e programmi : max_N in C (2)
int max(int x, int y)
/* sottoprogramma che calcola max */
{ int d;
d = x - y ;
if (d > 0) return x;
else return y;
}
34