Introduzione - Dipartimento di Informatica

Sistemi Operativi
… e altro.
Susanna Pelagatti
email: [email protected]
Dipartimento di Informatica, Via Buonarroti, 2
stanza 346 DE Tel. 050.2212.772
ricevimento prima o dopo le lezioni o per appuntamento
oppure per posta elettronica
sito web www.di.unipi.it/~susanna/masterSO
1
Materiale Didattico
• Copie Lucidi
• Testi Introduttivi (per non informatici)
– Sciuto, Bonanno, Fornaciari, Mari
Introduzione ai sistemi informatici (seconda ed)
McGraw-Hill, 2002
– Tosoratti Introduzione all’informatica (seconda ed), Casa
Editrice Ambrosiana
2
Materiale Didattico (2)
• Testi di approfondimento (specifici sui SO), in
ordine di complessità
– Sliberschatz et al. Sistemi Operativi, Addison Wesley Italia
– Ancilotti et al., Sistemi Operativi, McGrowHill, 2004
– Tanenbaum, Modern Operating Systems, 2nd Edition, Prentice
Hall, 2001
– Stallings, Operating Systems, Internals and Design Principles,
Prentice Hall, 2004
3
Organizzazione del corso:
• Le basi (8)
–
–
–
–
–
–
Cosa è l’informatica?
Algoritmi e programmi
Eseguire un algoritmo sulla macchina
Hardware e software
Cosa è un Sistema Operativo
Cenni di rappresentazione dei dati
• L’hardware (4)
– Il processore
– Le memorie
– Le periferiche
4
Organizzazione del corso (2)
• Il software (16)
–
–
–
–
–
–
Software applicativo e di sistema
Caratteristiche di un sistema operativo
Gestione del processore
Gestione della memoria
Gestione delle periferiche
File System
5
Introduzione
6
Una domanda di base ...
• Cos’è l’informatica ?
7
Informatica
Informazione+automatica
• Informazione
insieme di entità astratte , che raccolgono ‘conoscenza’
derivata dallo sforzo di descrizione ed
interpretazione del mondo (materiale o immateriale)
– es.: un libro, una sinfonia, un quadro, un insieme di
dati relativi agli studenti di un corso di laurea
8
Informatica
Informazione+automatica (2)
• Rappresentazione dell’informazione
trascrizione e registrazione dell’informazione su
supporti materiali
– es: la scrittura, un CD che registra un melodia, un
insieme di schede che mantengono le informazioni
relative agli studenti
…..secondo una opportuna codifica…
– es: le convenzioni di rappresentazione dei caratteri, il
formato del CD, la struttura dei campi di una scheda
studente
9
Informatica
Informazione+automatica (3)
• Calcolatore :
un supporto per la rappresentazione di informazione
‘attivo’ che può
– (1) raccogliere grandi quantità di dati es: tutto
l’archivio del British Museum
– (2) rendere disponibili questi dati in modo istantaneo
e con prospettive diverse a utenti diversi e in parti
diverse del mondo es: permettendo a utenti di tutto il
mondo di collegarsi a parti delle informazioni di BM
via Internet, lasciando altre private (accesso ristretto
all’amministrazione del museo)
10
Informatica
Informazione+automatica (4)
• Calcolatore (continua)
un supporto per la rappresentazione di informazione
‘attivo’ che può
– (3) elaborare automaticamente la rappresentazione
dei dati in modo da
• presentarli in modo diverso a diversi soggetti
• di prendere delle decisioni in base alle proprietà degli
oggetti rappresentati
esempi:
• stampare la lista delle opere acquisite del BM in un certo
mese,
• decidere se una data statua passa o no per una data porta
11
Alcuni concetti base
• Informazione
– l’idea di rosa
• Rappresentazione dell’informazione
– rosa, [CAT: fiore, NOME: rosa],
12
Alcuni concetti base (2)
Consideriamo un antenato del calcolatore : il
pallottoliere …
– informazione : due numeri da addizionare
– rappresentazione dell’informazione : i gruppi di dischetti
che rappresentano ciascun numero
– elaborazione dell’informazione : manipolare i due gruppi
di dischetti in modo da avere un gruppo unico che
rappresenti correttamente il risultato finale
13
Alcuni concetti base (3)
Consideriamo un antenato del calcolatore : il pallottoliere
– algoritmo : insieme di operazioni da effettuare sulla
rappresentazione dell’informazione per ottenere il risultato
finale, nel nostro caso
• scegli una fila vuota F
• sposta un disco alla volta dal primo addendo a F
• sposta un disco alla volta dal secondo addendo a F
• termina
14
Alcuni concetti base (4)
• Peculiarità del Calcolatore
– programmabilità : capacità di specializzare il
dispositivo con algoritmi complessi di elaborazione
dell’informazione
15
Alcuni concetti base (5)
• Quindi nei moderni calcolatori
– Anche loro rappresentano informazione di natura
estremamente più varia
• dati di vario tipo (immagini, numeri, suoni, testo, etc.)
– … ma anche ...
• gli algoritmi per elaborare questi dati (come sommare due numeri,
come impaginare correttamente un testo etc)
– La rappresentazione è uniforme : ogni cosa è rappresentata
da una sequenza di zeri (0) e di uni (1)
– La parte fisica (hardware) è in grado di interpretare e
realizzare i passi richiesti dalle algoritmi
16
Alcuni concetti base (6)
• Per specializzare il calcolatore per un nuovo
compito ‘basta’
• immaginare una strategia di soluzione del compito
(algoritmo)
• rappresentare l’algoritmo in modo che sia comprensibile alla
macchina (cioè fornire il programma che realizza
quell’algoritmo)
• chiedere alla macchina di decodificare il programma (cioè
risalire dalla codifica ai passi di cui è composto) ed
eseguirlo (cioè portare a termine i passi richiesti)
17
Sulla stessa macchina ...
• elaborazione di dati
medici : risonanza
magnetica, TAC,
presentazione
• progettazione di
prodotti complessi
• editoria elettronica
• elaborazione di dati
del territorio
18
Struttura di un calcolatore
• L’architettura di Von Neumann
Memorie
(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 e programmi alla
macchina e di ottenere i
risultati (tastiera, micr.,
stampante, schermo, )
19
Struttura di un calcolatore (2)
Processore
Memorie
Sottosistema
di Interfaccia
bus
La comunicazione fra i tre sottosistemi
viene effettuata attraverso un dispositivo fisico
detto bus di interconnessione. Attraverso il bus la CPU
- legge\scrive dati e programmi in memoria
- trasferisce da\a la memoria al dispositivo di interfaccia
- recupera la prossima istruzione da eseguire
20
Struttura di un calcolatore (3)
Processore
Memorie
Sottosistema
di Interfaccia
bus
Il sottosistema di interfaccia cura anche la comunicazione fra
due calcolatori diversi (es. via telefono\modem , via ethernet\
con opportune schede di connessione)
21
Struttura di un calcolatore (4)
• Hw e sw
Hardware
Processore
Memorie
Sottosistema
di Interfaccia
bus
Mantiene
Dati e Programmi
Software
22
Problemi, algoritmi e programmi
Alcuni cenni su come progettare e
scrivere nuovi algoritmi e programmi
23
Risolvere un problema
• Come viene risolto un problema :
Dati di
ingresso
Elaborazione
Descrivono il caso
in esame
Manipolazione dei dati di ingresso
in modo da costruire la
soluzione cercata
Dati di
uscita
Rappresentano la
soluzione del caso
in esame
24
Risolvere un problema (2)
• es : riconoscere qualcuno fra la folla
Dati di
ingresso
Immagine della
folla
Elaborazione
Ricerca nell’immagine
Dati di
uscita
SI, NO, chi
è la persona
riconosciuta
25
Risolvere un problema (3)
• es : torta di carote
Dati di
ingresso
Ingredienti
Elaborazione
Combinazione degli ingredienti
secondo una opportuna ricetta
Dati di
uscita
La torta !
26
Risolvere un problema (4)
• Una prima considerazione :
essere capaci di risolvere un problema non significa
essere capaci di spiegare esattamente come questo
avviene
Dati di
ingresso
Immagine della
folla
Elaborazione
Ricerca nell’immagine
Come avviene
la ricerca ??????
Dati di
uscita
SI, NO, chi
è la persona
riconosciuta
27
Risolvere un problema (6)
• Seconda considerazione :
vogliamo essere capaci di specificare la strategia
seguita dal passo di elaborazione in modo da farla
eseguire ‘automaticamente’ dal computer quindi
dobbiamo :
– riuscire a descrivere accuratamente i vari passi della
soluzione attraverso azioni che il calcolatore è in
grado di effettuare e con un linguaggio che è in
grado di comprendere
28
Risolvere un problema (7)
Dati di
ingresso
Ingredienti
Elaborazione
Combinazione degli ingredienti
secondo una opportuna ricetta
Dati di
uscita
La torta !
Descrizione del ‘come’ espressa attraverso
la combinazione di azioni elementari
Io
Cuoco
(che sa ‘come’)
ricetta
(che conosco alcune azioni elementari:
accendere il forno, sbattere le uova)
29
Algoritmi e programmi
• La situazione con il calcolatore è
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
30
Algoritmi e programmi (2)
• Algoritmo (def) :
una sequenza di azioni non ambigue che trasformi i dati
iniziali nel risultato finale utilizzando un insieme di
azioni elementari che possono essere eseguite da un
opportuno esecutore.
• Programma (def)
specifica di un algoritmo utilizzando un linguaggio non
ambiguo e direttamente comprensibile dal computer
• es: C, Java ...
31
Algoritmi e programmi (3)
• Due punti importanti:
– fissare in modo meno vago le azioni elementari
eseguibili da un computer
• dipende dal livello di astrazione a cui operiamo
• es. in hw leggere-scrivere la memoria, addizionare,
confrontare con 0
• es in Java, interagire con schermo, tastiera, effettuare
interazioni con computer remoti ...
– capire come passare dal problema all’algoritmo
• è generalmento lasciato all’intuizione e alla fantasia,
vedremo degli esempi
32
Algoritmi e programmi (4)
• Ma insomma, una ricetta è proprio un algoritmo?
… quasi, ovvero è molto simile ad un algoritmo con
due importanti differenze:
– La sequenza di azioni contiene spesso degli elementi
di ambiguità risolti da un esecutore intelligente
• es: spesso non si specificano gli strumenti da utilizzare,
confidando che l’esecutore umano sbatta le uova nel posto
giusto
– Non tutti i possibili casi vengono specificati
• es: è chiaro che se c’e’ puzza di bruciato conviene spegnere
il forno, anche se la ricetta non lo specifica
• anche qua si confida nelle capacità deduttive dell’esecutore
33
Dal problema all’algoritmo
Un esempio
34
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)
35
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
36
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…
37
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 ….’
38
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.
39
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 …)
40
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
41
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.
42
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.
43
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
44
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
45
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!
46
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
47
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
48
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
49
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
50
Diagrammi di Flusso (2)
I blocchi base :
Inizio
Sottoprog.
Operazione I/0
Fine
Si
No
Cond.
Elaborazione
51
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
52
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
53
DF di max
Inizio
Leggi x e y
d=x-y
Si
No
d>0?
Scrivi ‘max è y’
Scrivi ‘max è x’
Fine
54
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
55
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
57
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
58
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
59
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
60
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) !!!!
61
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
62
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\n”, &x) ;
else
printf (”il max è %d\n”, &y) ;
return ;
}
63
DF e programmi : max in Java
public class Max {
public static void main(String [] args){
int x, y, d;
x = readfromconsole () ;
y = readfromconsole () ;
d = x - y ;
if (d > 0)
System.out.println(”il max è %d” + x) ;
else
System.out.println(”il max è %d” + y) ;
}
64
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 ;
}
65
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;
}
66
Riassumendo …
• Abbiamo dato alcuni esempi di algoritmi
• Abbiamo introdotto i diagrammi di flusso (DF),
dei grafici che permettono di esprimere un
algoritmo tramite una combinazione grafica di
passi elementari e strutture si controllo.
• Abbiamo discusso la distanza fra DF e tipici
linguaggi di programmazione ad alto livello
67
Altri esempi ...
68
Altri esempi
• Formalizzimo un algoritmo che effettua la ricerca
della scheda relativa a un certa coppia (Autore,
Titolo) usando la strategia della ricerca nel
dizionario
• Modifichiamo l’algoritmo max_N in modo da
ordinare gli N numeri (diagramma di flusso)
69
La ricerca stile ‘dizionario’
1. Apri il classificatore
2. Prendi la scheda X al centro dello schedario
3. Confronta il campo autore e titolo di X con quelli
cercati
4. Se sono uguali, allora termina, altrimenti prosegui
5. Se il campo autore di X è minore di quello cercato
allora prosegui la ricerca sulla metà inferiore delle
schede altrimenti considera la metà superiore
6. Se la metà selezionata al passo 5 è vuota allora termina
(lo schedario non contiene il libro cercato) altrimenti
scegli come X la scheda al centro della metà scelta e vai
al passo 3
70
La ricerca stile ‘dizionario’ (2)
schedario
Situazione iniziale
71
La ricerca stile ‘dizionario’ (3)
Ogni volta elimino la metà
delle schede, oppure mi fermo
perché ho trovato la scheda
cercata
Ogni volta divido il numero
N delle schede per 2, mi fermo
quando N è diventato 1 o 0
Al più eseguo x passi dove
x è il logaritmo in base 2 di N
Scheda cercata!
72
Ordinare N numeri interi
• Problema: Servono N variabili !
– X_1 … X_N per memorizzare i numeri letti
dall’esterno durante l’elaborazione
• Supponiamo che max_N restituisca una coppia di
valori (m,i) dove m è il valore del massimo ed i è
la posizione all’interno della sequenza cui
corrisponde
– es (45,3), il massimo valore è 45 e corrisponde al
terzo numero nella sequenza lunga N
73
Ordinare N numeri interi (2)
• Algoritmo ordina_N
1. Leggi il valore di N dall’esterno
2. Finchè (hai letto meno di N numeri)
a. Leggi un nuovo numero nella variabile X_i
3. Trova il maggiore (m, i) fra X_1 … X_N (con
max_N modificato)
4. Scambia fra loro X_i e X_N
5. Considera adesso solo i primi N-1 numeri (N=N-1)
6. Se N = 1 termina, altrimenti vai al passo 3
74
Ordinare N numeri interi (3)
8
7
3
1
N=4
Max_N = 8 in posizione 1
Scambio la posizione 1 e 4
1
7
3
8
N=3
Max_N = 7 in posizione 2
Scambio la posizione 1 e 3
1
3
7
8
N=2
Max_N = 3 in posizione 2
Nessuno scambio
1
3
7
8
N=1
Termina
1
3
7
8
75
Ordinare N numeri interi (4)
• … problema….
– La variabile X_i che deve essere scambiata è
diversa ogni volta! Questo non è possibile
esprimerlo utilizzando solo le cose viste finora
– Inoltre se N cambia devo aggiungere/togliere
variabili …
– Soluzione : utilizzare un meccanismo di
rappresentazione ‘più potente’ della singola
variabile, che mantenga l’informazione che
stiamo elaborando una sequenza di valori
(strutture dati)
76
Strutture dati
• Le strutture dati, cioè variabili ‘con
struttura’, permettono di rappresentare
agevolmente dati più complessi di quelli
visti finora e
• ne discuteremo alcuni esempi
77
Strutture dati (2)
• Tutti i linguaggi ad alto livello per la
programmazione permettono di definire due
tipi di aggregati di variabili (o strutture dati)
– array : tabelline di valori tutti dello stesso tipo
(a una o più dimensioni)
– record : gruppi di variabili di tipo diverso
78
Array
– Possiamo definire una sequenza lunga N per il
nostro problema di ordinamento, es.
1
3
7
Array di 4 valori interi (a una sola dimensione)
8
– Possiamo definire una tabella a due dimensioni,
ad esempio per memorizzare le vendite di un
prodotto in un trimestre dell’anno
I
II
III
Prod 1
1
32
7
8
Prod 2
9
3
3
8
Prod 3
14
3 723 82
IV
Array 3x4 di 12 valori interi (a due dimensioni)
79
Array (2)
• Come si specifica la struttura di un array ? e
come si usano le singole variabili nella
struttura ?
– La struttura si specifica con il tipo e l’ampiezza
di ogni dimensione
– es :
• int x[4]
1
• int tab[3][4]
Nomi delle tabelle
3
7
8
I
II
III
Prod 1
1
32
7
8
Prod 2
9
3
3
8
Prod 3
14
3 723 82
IV
80
Array (3)
• Uso di una singola variabile :
– Si specificano le coordinate della variabile
desiderata :
– Ogni elemento di ogni dimensione è identificato
da un valore da 1 a N (o da 0 a N-1, dipende dal
linguaggio)
Noi generalmente seguiremo la
convenzione C, Java di partire da 0
0
1
2
3
1
3
7
8
valore
I
II
III
Prod 1
1
32
7
8
Prod 2
9
3
3
8
Prod 3
14
3 723 82
x[1]
tab[1][0]
posizione
IV
81
Usiamo gli array ...
• Costruiamo una versione dell’algoritmo che
ordina N numeri che usa un array
int X[N]per memorizzare i numeri della
sequenza da ordinare
82
Usiamo gli array (2)
• Per prima cosa costruiamo 2 sottoalgoritmi
– leggi_Na che legge i numeri da ordinare e li
inserisce nell’array X
– max_Na che trova il valore del massimo
numero in X e la sua posizione
83
Input : vuoto
(void)
Inizio
Leggi il valore di
N
Strutture dati:
Int X[N] // la sequenza
I=0
Si
Sottoalgoritmo per la
lettura di N numeri
(leggi_Na)
No
I<N?
Fine
Leggi il nuovo
numero in X[I]
Output :
Int X[N] // la sequenza letta
Int N
// la sua lunghezza
I=I+1
84
Esempio di leggi_Na
Sequenza di numeri da leggere : 8, 1, 9, 7
quindi
Inizialmente X è vuoto
Passo 1, leggo il primo numero
N=4
X=
posizione
I=0 Leggo 8 e lo scrivo nella posizione 0, cioè X[0]=8
0
1
2
3
8
Passo 2, leggo il secondo numero
I=1
Leggo 1 e lo scrivo nella posizione 1, cioè X[1]=1
8
1
8
1
9
8
1
9
Passo 3, leggo il terzo numero
I=2
Leggo 9 e lo scrivo nella posizione 2, cioè X[2]=9
Passo 4, leggo il quarto numero
I=3
Leggo 7 e lo scrivo nella posizione 3, cioè X[3]=7
Termina
I=4, quindi I< N non è più verificata
7
85
Input:
Int X[N],
Int N
Sottoalgoritmo per la
trovare il massimo
di N numeri in un array
(max_Na)
Inizio
m = X[0]
Imax = 0, I = 0
Si
Strutture dati:
Int X[N] // la sequenza
No
I<N?
Fine
Si
No
m > X[i]
?
I=I+1
Output:
Int m // il valore del massimo
Int Imax
// l’indice del massimo
m = X[i], Imax = I
86
Esempio di max_Na
Trova il valore m del massimo in X e
la sua posizione Imax ,
la lunghezza di X è N=4
Passo 1, esamino X[0], I=0
m=8
X=
8
1
posizione
Imax = 0 (Valore e posizione del massimo
trovato fra gli elementi già esaminati)
9
7
0
1
2
3
8
1
9
7
8
1
9
7
8
1
9
7
8
1
9
7
Passo 2, esamino X[1], I=1
m=8
Imax = 0
Passo 3, esamino X[2], I=2
m=9
Imax = 2
Passo 4, esamino X[3], I=3
m=9
Termina
Imax = 2
I=4, quindi I< N non è più verificata
87
Ordinare N numeri interi
8
7
3
1
N=4
Max_Na = 8 in posizione 1
Scambio la posizione 1 e 4
1
7
3
8
N=3
Max_Na = 7 in posizione 2
Scambio la posizione 1 e 3
1
3
7
8
N=2
Max_Na = 3 in posizione 2
Nessuno scambio
1
3
7
8
N=1
Termina
1
3
7
8
88
Ordinare N numeri interi (2)
• Algoritmo ordina_Na
1. Leggi il valore di N dall’esterno
2. Leggi gli N numeri della sequenza nell’array X
3. Trova il maggiore (m, imax) fra i primi N numeri
dell’array X (con max_Na)
4. Scambia fra loro X[imax] e X [N]
5. Considera adesso solo i primi N-1 numeri dell’array
(N=N-1)
6. Se N = 1 continua, altrimenti vai al passo 3
7. Stampa X, termina
89
Input : vuoto
(void)
(X,N)=leggi_Na()
Inizio
Si
N>1?
(m,I) = max_Na(X,N)
T = X[N]
X[N] = X[I]
X[I] = T
N = N-1
Lung=N
No
Stampa(X,Lung)
Strutture dati:
Int X[N]
// la sequenza
Fine
Output : vuoto (void)
Scambio
dei due valori
DF per il problema del
ordinare di N numeri
(ordina_Na)
90
Record
• Finora abbiamo visto solo variabili di tipo
intero
• Normalmente è possibile avere variabili di
tipo diverso che rappresentano informazioni
di natura diversa :
– interi, reali …
– caratteri (‘a’,’b’, …)
– sequenze di caratteri (dette stringhe, ”gatto ”,
”oggi piove !” …)
• I record sono aggregati di variabili di tipo
diverso e permettono di definire nuovi tipi
91
Record (2)
• A cosa possono servire…...
– A rappresentare le schede della biblioteca
stringa
Nome Autore
stringa
Cognome Autore
Titolo
intero
Scaffale
Posizione
Costo
stringa
intero
reale
… altre informazioni …..
Campi del record
92
Record (3)
• Il tipo record scheda espresso in C
struct scheda {
char nome[100]; //stringa di al più
//100 caratteri
char cognome[100];
char titolo[300];
int scaffale;
int posizione;
double costo ;
} ;
93
Record (4)
//Come dichiaro che voglio
//una variabile di tipo ‘scheda’
struct scheda nuovo_libro;
// come assegno valori ai diversi campi
nuovo_libro.nome =”Jorge";
nuovo_libro.cognome =”Amado";
nuovo_libro.titolo =”Dona Flor e i
suoi due mariti";
nuovo_libro.scaffale =”8";
nuovo_libro.posizione =”356";
94
Record (5)
• Si possono definire array di record
– questo può servire, ad esempio a definire
l’insieme delle schede di una biblioteca:
struct scheda archivio[100000]
– possiamo quindi formalizzare il nostro
algoritmo ‘stupido’ per la ricerca nello
schedario
95
Input :
struct
scheda
archivio
Ricerca ‘stupida’
(ricerca)
Inizio
Leggi Nome, Cognome
e Titolo del libro cercato
Strutture dati:
struct scheda archivio
// l’array di schede
I=0
Si
No
I < 100000 ?
Fine
archivio[I].nome = Nome
archivio[I].cognome = Cognome
archivio[I].titolo = Titolo
?
Si
No
I=I+1
Fine
Non l’ho trovata!
Output :
la scheda cercata
e un valore (si/no) che
dice se c’è
L’ho trovata!
96
DF e programmi
DF
Codifica in un linguaggio di
programmazione (C, Java etc)
Programma
Input : programma
Compilatore
Eseguibile
Output : rappresentazione comprensibile alla macchina
97
DF e programmi (2)
• L’eseguibile dipende dalla macchina che
dobbiamo specializzare (es. processore
Intel, o processore SUN), dal sistema
operativo (es. Windows, Linux …) e dal
linguaggio usato (es: C o Java)
• Gli eseguibili di alcuni linguaggi (come
Java) contengono operazioni complesse che
non possono essere eseguite direttamente!
• In questo caso si utilizza un programma
interprete (es Java Virtual Machine) che
realizza le operazioni elementari complesse
98
DF di max
Inizio
Leggi x e y
d=x-y
Si
No
d>0?
Scrivi ‘max è y’
Scrivi ‘max è x’
Fine
99
DF e programmi : max in C
main() /* calcola max */
{
int x, y, d; //def. Delle variabili
scanf ("%d %d”, &x, &y) ; //lettura x,y
d = x - y ;
if (d > 0)
//scrittura risultati
printf (”il max è %d”, &x) ;
else
printf (”il max è %d”, &y) ;
return ;
//terminazione
}
10
DF e programmi : max in Java
public class Max {
public static void main(String [] args){
int x, y, d;
x = readfromconsole () ;
y = readfromconsole () ;
d = x - y ;
if (d > 0)
System.out.println(”il max è %d” + x) ;
else
System.out.println(”il max è %d” + y) ;
}
10
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
10
DF e programmi : max_N in C (1)
main() /* calcola max_N */
{ 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 ;
}
10
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;
}
10
DF e programmi : ordina_Na in C
main() /* calcola max_N */
{ int m, i, t, X[N], N, lung;
leggi_Na (N, X) ;
m = X[0];
lung = N ;
while (N > 1) { max_Na(X,N,&m,&i) ;
t = X[N];
X[N] = X[i] ;
X[i] = t ;
N = N - 1 ; }
stampa_Na (X,lung) ;
return ;}
10
Esercizi proposti
• Dare il DF per il sottoalgoritmo stampa_Na
• Trovare un algoritmo (e fornire il DF) per i
seguenti problemi :
– trovare la somma dei primi K numeri (K letto
dall’esterno)
– trovare la media di una sequenza di numeri positivi
(la sequenza viene letta dall’esterno e si interrompe
al primo numero negativo letto)
– leggere una data (un record che indica giorno, mese
ed anno) e stampare il numero di giorni passati
dall’inizio dell’anno
10