EsempiDiagrammiFlusso - Blog del Prof.Tilocca

Diagramma a blocchi per la
selezione, in un mazzo di
chiavi, di quella che apre
un lucchetto
14
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dato un numero dire se è positivo o negativo
… e se il numero fosse nullo?
Eseguire il prodotto tra due numeri positivi usando solo
l’operazione di somma
... E se i numero non fossero solo positivi?
Trovare il maggiore tra tre numeri
Somma di 3 interi consecutivi
Somma dei primi N numeri
Media di N numeri
Acquisto di prodotti con tetto massimo di spesa
Divisione tra due numeri
PROBLEMA
Dati due numeri effettuare il loro
prodotto usando solo l’operazione
somma.
SOLUZIONE
Provate a trovare una soluzione al
problema descrivendola con diagrammi
di flusso
Usando solo
l’operazione
somma
SOLUZIONE:
PROBLEMA
Dati 3 numeri stabilire quale sia il valore
maggiore
SOLUZIONE
Provate a trovare una soluzione al
problema descrivendola con diagrammi di
flusso
• Problema
Problema: Calcolare la somma di
tre interi consecutivi
Note:
Note
La variabile somma è un
contenitore di somme parziali,
finché non si ottiene la somma
totale richiesta
La soluzione del problema viene
raggiunta
eseguendo
azioni
simili per un numero opportuno
di volte
23
Il ciclo o loop è uno schema di flusso per descrivere, in modo conciso,
situazioni in cui un gruppo di operazioni deve essere ripetuto più volte
La condizione di fine ciclo viene
verificata ogni volta che si
esegue il ciclo; se la condizione
assume valore vero (falso), le
istruzioni
vengono
reiterate,
altrimenti si esce dal ciclo
La condizione di fine ciclo può
essere verificata prima o dopo
l’esecuzione dell’iterazione
Le istruzioni di inizializzazione
assegnano valori iniziali ad
alcune variabili (almeno a quella
che controlla la condizione di fine
ciclo)
Ciclo con controllo in testa
Ciclo con controllo in coda
24
• Problema
Problema: Calcolare la somma di
tre interi consecutivi
Note:
Note
La fase di inizializzazione riguarda
la somma e l’indice del ciclo
Il controllo di fine ciclo viene
effettuato in coda
25
Un ciclo è definito quando è noto a priori quante volte deve
essere eseguito; un ciclo definito è detto anche enumerativo
Un contatore del ciclo tiene memoria di quante iterazioni
sono state effettuate; può essere utilizzato in due modi:
incremento del contatore:
contatore il contatore viene inizializzato ad un
valore minimo (ad es. 0 o 1) e incrementato ad ogni
esecuzione del ciclo; si esce dal ciclo quando il valore del
contatore eguaglia il numero di iterazioni richieste
decremento del contatore:
contatore il contatore viene inizializzato al
numero di iterazioni richiesto e decrementato di uno ad ogni
iterazione; si esce dal ciclo quando il valore del contatore
raggiunge 0 (o 1)
27
Un ciclo è indefinito quando non è possibile conoscere a
priori quante volte verrà eseguito
La condizione di fine ciclo controlla il valore di una o più
variabili modificate da istruzioni che fanno parte
dell’iterazione
Comunque, un ciclo deve essere eseguito un numero finito
di volte, cioè si deve sempre verificare la terminazione
dell’esecuzione del ciclo
28
• Problema
Problema: Calcolare la somma dei primi N numeri.
Note
Note:
Leggo un numero N e sommo tutti i numeri
dell’intervallo [0,N] oppure [N,0] se N è negativo
Attenzione al segno del risultato
29
• Problema
Problema: Calcolo della media
di un insieme di numeri; non
è noto a priori quanti sono i
numeri di cui deve essere
calcolata la media
I numeri vengono letti uno
alla volta fino a che non si
incontra un x=0, che segnala
la fine dell’insieme
30
31
PROBLEMA
Si progetti un terminare per automatizzare la
spesa in un supermercato. Il terminale deve
contare il numero di prodotti messi nel carrello
per una spesa massima di 100€.
SOLUZIONE
Analizzare il problema e descrivere la soluzione
con diagrammi di flusso
Completa il
diagramma
Verifica se è
impossibile
(divisore=0) o
indeterminata
(dividendo=0
e divisore=0)
ESERCIZIO: COSA FA QUESTO DIAGRAMMA DI FLUSSO?
1
2
3
4
5
6
7
BEGIN "Contatore"
N=1
IF N = 100 GOTO 7
OUT N
N=N+1
GOTO 3
END "Contatore"
FIGURA DIAGRAMMA DI FLUSSO E PSEUDOCODICE
DELL'ALGORITMO "CONTATORE" PER STAMPARE I NUMERI
NATURALI DA 1 A 99.
ESERCIZIO:
STAMPARE LA TABELLINA DEL 2 FINO A UN NUMERO DATO
START Tabellina 2
OUT "Fino a che numero devo stampare la tabellina?"
IN Nmax
n=2
FALSO
while n <= Nmax
VERO
OUT n
n=n+2
END Tabellina 2
DIAGRAMMA DI FLUSSO DI UN ALGORITMO CHE STAMPA LA
TABELLINA DEL DUE FINO A UN NUMERO MASSIMO DATO.
Esercizio: cosa fa questo algoritmo?
start
start
P := 0
P := 0
read A,B
read A,B
falso
A <> 0
while (A <> 0)
write P
if (A è dispari) then
vero
P := P + B
end
vero
A è dispari
end if
falso
A := A / 2
P := P + B
B := B * 2
end while
A := A / 2
write P
B := B * 2
end
Informatica di Base -- R.Gaeta
88
Esercizio: cosa fa questo algoritmo?
P
0
3
9
21
A
7
3
1
0
B
3
6
12
24
Informatica di Base -- R.Gaeta
89
Esercizio: cosa fa questo algoritmo?
P
0
0
0
12
36
A
12
6
3
1
0
B
3
6
12
24
48
Informatica di Base -- R.Gaeta
90
Esercizio: massimo di una sequenza di K numeri
• Si supponga di fornire in input ad un programma un
numero K e K interi positivi. Il programma deve restituire
il valore minimo tra quelli introdotti.
Informatica di Base -- R.Gaeta
93
Esercizio: massimo di una sequenza di K numeri
start
start
read K
K
read numero
read numero
min := numero
min := numero
inseriti := 1
while (inseriti < K)
inseriti := 1
inseriti < K
falso
read numero
write min
if (numero < min) then
vero
read numero
vero
min := numero
min := numero
end
end if
numero < min
inseriti := inseriti + 1
end while
falso
write min
inseriti := inseriti + 1
end
Informatica di Base -- R.Gaeta
94
Esercizio: massimo di una sequenza di K numeri
(controllo input)
start
start
K
K <= 0
vero
write "K deve
essere positivo!"
falso
read numero
min := numero
inseriti := 1
inseriti < K
falso
write min
vero
read numero
vero
min := numero
end
numero < min
falso
inseriti := inseriti + 1
end
read K
if ( K <= 0) then
write “K deve essere positivo!”
else
read numero
min := numero
inseriti := 1
while (inseriti < K)
read numero
if (numero < min) then
min := numero
end if
inseriti := inseriti + 1
end while
write min
end if
Informatica di Base -- R.Gaeta
95