Fondamenti di Informatica
AlgoBuild: Strutture Selettive e Iterative
AlgoBuild: Strutture Iterative e Selettive
OUTLINE
•
Blocco condizionale (Struttura selettiva IF - IF/ELSE)
•
Esempi
•
Cicli a condizione iniziale (Strutture iterative WHILE
e FOR)
•
Esempi
•
Ciclo a condizione finale (Struttura iterativa
DO/WHILE)
Diagrammi di Flusso: Blocco di
Decisione (o Condizionale)
•
Istruzioni condizionali: l’esecuzione dipende da scelte effettuate in
base ai dati
•
In base ad una condizione viene deciso se eseguire un’operazione
oppure un’altra
IF
Strutture di Controllo:
Selezione Semplice
Strutture di Controllo:
Selezione a Due Vie
•
Definiamo un diagramma di flusso che
•
prende in input la variabile VOTO da parte
dell’utente;
•
mostra in output «Superato!»
se
VOTO è
maggiore o uguale di 18;
•
mostra «NON Superato»,
altrimenti
•
Definiamo un diagramma di flusso che
•
prende in input la variabile VOTO da parte
dell’utente;
•
mostra in output «Superato!»
se
VOTO è
maggiore o uguale di 18;
•
mostra «NON Superato»,
altrimenti
Struttura Selettiva IF: Esempio 1 – 1/11
if
•
Iniziamo prendendo in input la variabile VOTO
Ci verrà richiesto di inserire l’espressione (condizione booleana)
che la struttura selettiva IF deve soddisfare. Tale espressione può
Flusso di esecuzione se la condizione è falsa
Flusso di esecuzione se la condizione è vera
PSEUDO-CODICE PROGRAM main INPUT VOTO IF VOTO >= 18 OUTLN "Superato!" ELSE
OUTLN "NON Superato" END IF
END
PSEUDO-CODICE PROGRAM main INPUT VOTO IF VOTO >= 18 OUTLN "Superato!" ELSE
OUTLN "NON Superato" END IF
END
PSEUDO-CODICE PROGRAM main INPUT VOTO IF VOTO >= 18 OUTLN "Superato!" ELSE
OUTLN "NON Superato"
END IF END
Istruzione/i da eseguire in caso la
Variabile VOTO presa in input dall’istruzione precedente
Struttura Selettiva IF: DEMO 4/8
Condizione vera
Output
Cosa sarebbe accaduto se avessi usato VOTO = 16?
Struttura Selettiva IF (Annidata)
•
Nelle istruzioni del blocco “
Vero
”
o del blocco “
Falso
”, è possibile
inserire altre strutture selettive
•
In tal caso si dice che la seconda
struttura
risulta
annidata
all’interno della prima
C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Nelle istruzioni del blocco “Vero”
o del blocco “Falso”, è possibile
inserire altre strutture selettive
•
In tal caso si dice che la seconda
struttura
risulta
annidata
all’interno della prima
C1 A1 B C2 A2 A3 A4 V V F F
Analizziamo quali saranno le possibili sequenze di istruzioni che verranno eseguite, in base alla
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1 C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
• Se la condizione C2 è Vera • Viene eseguita l’istruzione:
• A2 C1 A1 B C2 A2 A3 A4 V F F V
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
• Se la condizione C2 è Vera • Viene eseguita l’istruzione:
• A2
•
Viene eseguita l’istruzione:
• A4 C1 A1 B C2 A2 A3 A4 V F F V
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
• Se la condizione C2 è Vera • Viene eseguita l’istruzione:
• A2
•
Viene eseguita l’istruzione:
• A4
•
Il flusso prosegue in accordo al
diagramma di flusso
C1 A1 B C2 A2 A3 A4 V F F VStruttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
• Se la condizione C2 è Falsa
• Viene eseguita l’istruzione:
• A3 C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
• Se la condizione C2 è Falsa
• Viene eseguita l’istruzione:
• A3
•
Viene eseguita l’istruzione:
• A4 C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Vera
• Viene eseguita l’istruzione:
• A1
• Viene valutata la condizione C2
• Se la condizione C2 è Falsa
• Viene eseguita l’istruzione:
• A3
•
Viene eseguita l’istruzione:
• A4
•
Il flusso prosegue in accordo al
diagramma di flusso
C1 A1 B C2 A2 A3 A4 V V F FStruttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Falsa
• Viene eseguita l’istruzione:
• B C1 A1 B C2 A2 A3 A4 V V F F
Struttura Selettiva IF (Annidata)
•
Viene valutata la condizione C1
•
Se la condizione C1 è
Falsa
• Viene eseguita l’istruzione:
• B
•
Il flusso prosegue in accordo al
diagramma di flusso
C1 A1 B C2 A2 A3 A4 V V F FStruttura Selettiva IF (Annidata): Esempio 2 –
1/11
•
Raffiniamo l’esempio precedente…
•
Definiamo un diagramma di flusso che
•
prende in input la variabile VOTO da parte dell’utente;
•
mostra in output «Superato!»
se
VOTO è maggiore o uguale di
18;
• «NON Superato», altrimenti
•
Il valore della variabile VOTO è valido se e solo se è compreso
tra 0 e 30!
•
Se si immette, in input, un valore non valido, l’algoritmo deve:
•
mostrare in output “Valore VOTO non valido” e
PSEUDO-CODICE
PROGRAM main INPUT VOTO END
Struttura Selettiva IF (Annidata): Esempio 2 –
2/11
Il passo successivo sarà quello di
verificare se il valore di VOTO è valido
(ovvero compreso tra 0 e 30)
Struttura Selettiva IF (Annidata): Esempio 2 –
3/11
PSEUDO-CODICE
PROGRAM main INPUT VOTO END
???
VOTO deve essere compreso tra 0 e 30
Struttura Selettiva IF (Annidata): Esempio 2 –
4/11
???
VOTO deve essere compreso tra 0 e 30
0 ≤ VOTO ≤ 30
Struttura Selettiva IF (Annidata): Esempio 2 –
5/11
???
VOTO deve essere compreso tra 0 e 30
0 ≤ VOTO ≤ 30
VOTO ≥ 0 AND VOTO ≤ 30
Struttura Selettiva IF (Annidata): Esempio 2 –
6/11
???
VOTO deve essere compreso tra 0 e 30
0 ≤ VOTO ≤ 30
VOTO ≥ 0 AND VOTO ≤ 30 VOTO >= 0 && VOTO <= 30
(sintassi AlgoBuild)
Struttura Selettiva IF (Annidata): Esempio 2 –
7/11
PSEUDO-CODICE
PROGRAM main INPUT VOTO
IF VOTO >= 0 && VOTO <= 30 END IF
END
Struttura Selettiva IF (Annidata): Esempio 2 –
8/11
PSEUDO-CODICE
Struttura Selettiva IF (Annidata): Esempio 2 –
9/11
Struttura Selettiva IF (Annidata): Esempio 2 –
10/11
Il passo successivo sarà quello di mostrare in
output la stringa "Valore VOTO non valido",
nel caso in cui il valore del VOTO NON sia
valido
PSE UDO -C ODIC E DIAGRAMMA DI FLUSSO
Struttura Selettiva IF (Annidata): Esempio 2 –
11/11
Struttura Selettiva IF (Annidata): Esempio 2
Indentazione
•
Di cosa si tratta?
•
Consiste nel far precedere le righe contenenti istruzioni di un
programma/pseudo-codice, da spazi vuoti
•
A cosa serve?
•
Fondamentale per migliorare la leggibilità e la comprensibilità di
un programma/pseudo-codice
•
Permette di evidenziare i blocchi del codice
• A colpo d’occhio è possibile identificare i diversi rami di un IF, le istruzioni che fanno parte di un ciclo, ecc.
Struttura Selettiva IF (Annidata): Esempio 2
Indentazione
SENZA Indentazione
CON Indentazione
PROGRAM main INPUT VOTO
IF VOTO >= 0 && VOTO <= 30 IF VOTO >= 18
OUTLN "Superato!" ELSE
OUTLN "NON Superato" END IF
ELSE
OUTLN "Valore VOTO non valido" END IF
END PROGRAM main
INPUT VOTO
IF VOTO >= 0 && VOTO <= 30 IF VOTO >= 18
OUTLN "Superato!" ELSE
OUTLN "NON Superato" END IF
ELSE
OUTLN "Valore VOTO non valido" END IF
Struttura Selettiva IF (Annidata): Esempio 2
(Indentazione) – 1/3
PROGRAM main INPUT VOTO
IF VOTO >= 0 && VOTO <= 30 IF VOTO >= 18
OUTLN "Superato!" ELSE
OUTLN "NON Superato" END IF
ELSE
OUTLN "Valore VOTO non valido" END IF
Struttura Selettiva IF (Annidata): Esempio 2
(Indentazione) – 2/3
PROGRAM main INPUT VOTO
IF VOTO >= 0 && VOTO <= 30
IF VOTO >= 18
OUTLN "Superato!" ELSE
OUTLN "NON Superato" END IF
ELSE
OUTLN "Valore VOTO non valido"
END IF
Struttura Selettiva IF (Annidata): Esempio 2
(Indentazione) – 1/3
PROGRAM main INPUT VOTO
IF VOTO >= 0 && VOTO <= 30
IF VOTO >= 18
OUTLN "Superato!"
ELSE
OUTLN "NON Superato"
END IF
ELSE
OUTLN "Valore VOTO non valido" END IF
Struttura Selettiva IF (Annidata): Esempio 2
Annidamento
•
È possibile annidare qualsiasi struttura di controllo
in un’altra struttura di controllo del flusso
•
Ad esempio:
•
Un IF può essere annidato in un altro IF
•
Visto in questo esempio
•
Un ciclo può essere annidato in un IF
•
Un IF può essere annidato in un ciclo
•
È
possibile anche un annidamento su più livelli
•
Esempio: Un IF può essere annidato all’interno di un
Ciclo a Condizione Iniziale
•
In AlgoBuild sono presenti
due strutture iterative per
la rappresentazione di cicli
a condizione iniziale:
•
Struttura Iterativa WHILE
Ciclo a Condizione Iniziale
•
In AlgoBuild sono presenti
due strutture iterative per
la rappresentazione di cicli
a condizione iniziale:
•
Struttura Iterativa WHILE
•
Struttura Iterativa FOR
•
Passi per la creazione di una struttura iterativa While in AlgoBuild
Verrà richiesto l’inserimento della condizione iniziale del While
Ciclo a Condizione Iniziale:
Struttura Iterativa WHILE
blocco istruzioni
Queste istruzioni verranno eseguite
finchè (while) la
Ciclo a Condizione Iniziale
•
In AlgoBuild sono presenti
due strutture iterative per
la rappresentazione di cicli
a condizione iniziale:
•
Struttura Iterativa WHILE
•
Struttura Iterativa FOR
determina
l'esecuzione di una porzione di algoritmo ripetuta per un certo numero noto di volte
Ciclo a Condizione Iniziale:
Struttura Iterativa FOR: Esempio 3 – 1/2
•
Definiamo un diagramma di flusso che
•
Prende in input le seguenti due variabili
•
X
•
Y
•
Memorizza e mostra (in output) una variabile
•
R = X
Y•
N.B. Il calcolo di X
Ydeve essere eseguito con il
metodo moltiplicativo
Ciclo a Condizione Iniziale:
Struttura Iterativa FOR: Esempio 3 – 2/2
•
Definiamo un diagramma di flusso che
•
Prende in input le seguenti due variabili
•
X
•
Y
•
Memorizza e mostra (in output) una variabile
•
R = X
Y•
N.B. Il calcolo di X
Ydeve essere eseguito mediante
il metodo moltiplicativo
Struttura Iterativa FOR: Esempio 3 –
1/10
Struttura Iterativa FOR: Esempio 3 –
2/10
Struttura Iterativa FOR: Esempio 3 –
3/10
Struttura Iterativa FOR: Esempio 3 –
4/10 – Parametri
Inizializzazione: I = 1
•
Inizializzazione del ciclo FOR
•
Alla prima iterazione il valore di I sarà 1 (I = 1)
Condizione: I <= Y
•
Condizione di uscita dal ciclo FOR
•
Appena I sarà maggiore di Y, il ciclo FOR terminerà
Aggiornamento (o Incremento): I = I + 1
•
Ad ogni iterazione la variabile I verrà incrementata
automaticamente di 1
Struttura Iterativa FOR: Esempio 3 –
5/10
Rappresentazione FOR in AlgoBuild
Struttura Iterativa FOR: Esempio 3 –
5/10
Struttura Iterativa FOR: Esempio 3 –
6/10
equivale a
Struttura Iterativa FOR: Esempio 3 –
7/10
R denota la variabile in cui verrà memorizzato, di volta in volta, l’output dell'algoritmo. Tale variabile è inizializzata ad 1.
Struttura Iterativa FOR: Esempio 3 –
8/10
PSEUDO-CODICE
Struttura Iterativa FOR: Esempio 3 –
9/10
u
ra
It
er
at
iv
a
FO
R
:
p
io
3
–
10
/1
0
–
O
(V
id
eo
)
•
Definiamo
un
diagramma
di
flusso
per
caratterizzare il calcolo della media aritmetica di
N numeri presi in input, dove
•
N è una variabile presa in input
Struttura Iterativa FOR: Esempio 4 –
1/9
Struttura Iterativa FOR: Esempio 4 –
2/9
Struttura Iterativa FOR: Esempio 4 –
3/9
Struttura Iterativa FOR: Esempio 4 –
4/9
• Inizializziamo SOMMA a 0
• Ciò servirà per tener traccia della somma degli N numeri
Struttura Iterativa FOR: Esempio 4 –
5/9
• Ciclo for che va da 1 a N
• Ad ogni iterazione
• Viene richiesto in input un numero (in VALORE)
• Viene aggiornata la variabile
SOMMA che verrà utilizzata
successivamente per il calcolo della media aritmetica
Struttura Iterativa FOR: Esempio 4 –
6/9
• Calcolo la media
• Dividendo la somma (variabile
SOMMA) per gli N numeri presi in
Struttura Iterativa FOR: Esempio 4 –
7/9
Il contenuto della variabile MEDIA viene mostrato in output
u
ra
It
er
at
iv
a
FO
R
:
p
io
4
–
8/
9
–
O
(V
id
eo
)
Struttura Iterativa FOR: Esempio 4 –
9/9
OSSERVAZIONE
È necessario fornire a priori al nostro algoritmo il numero di valori di cui si intende calcolare la media…
…è possibile calcolare la media di un certo numero (non noto a priori) di valori presi in input?
Strutture di Controllo:
Ciclo a Condizione Finale
•
Definiamo
un
diagramma
di
flusso
che
caratterizza il calcolo della media aritmetica di un
certo numero (non noto a priori) di valori presi in
input
Struttura Iterativa DO/WHILE:
Esempio 5 – 1/7
•
Passi per la creazione di una struttura Do/While in AlgoBuild (ciclo a
condizione finale)
Struttura Iterativa DO/WHILE:
Esempio 5 – 2/7
Struttura Iterativa DO/WHILE:
Esempio 5 – 3/7
Struttura Iterativa DO/WHILE:
Esempio 5 – 4/7
• Inizializzazione a 0 delle variabiliSOMMA ed N
• Non è stato preso ancora in input alcun valore (quindi N = 0)
• Non è stata eseguita ancora la somma di alcun valore (quindi
Struttura Iterativa DO/WHILE:
Esempio 5 – 5/7
• Ciclo DO/WHILE
• Richiede in input un valore (in VALORE)
• Aggiorna la variabile SOMMA, aggiungendogli la variabile VALORE
• SOMMA = SOMMA + VALORE
• Aggiorna il valore di N, poiché è stato preso in input un nuovo valore
• N = N + 1
• Chiede all’utente se vuole continuare (quindi un nuovo valore verrà preso in input)
• Se il valore della variabile CONTINUA sarà diverso da 1, allora il ciclo while si interromperà
• Altrimenti si proseguirà con un’altra iterazione
Struttura Iterativa DO/WHILE:
Esempio 5 – 6/7
• Calcola la media aritmetica dividendo