Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 33
Strutture di controllo
Le istruzioni semplici (ingresso, uscita, calcolo ed assegnazione) permettono di specificare in un programma delle azioni elaborative semplici, costituenti un’unica sequenza di esecuzione possibile
Nella maggior parte dei casi, un algoritmo si compone di più e diverse possibili sequenze di elaborazioni,
ciascuna possibile sequenza elaborativa dipende dal verificarsi o meno di specifiche condizioni od eventi
Un algoritmo deve poter descrivere più sequenze possibili di azioni elaborative, ma in ogni esecuzione una sola (o una combinazione) di esse verrà realizzata.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 34
Algoritmo per effettuare una telefonata
Inizia telefonata;
Solleva la cornetta;
Se c’è il tono di della linea allora inizia
componi il numero;
se il numero chiamato è libero allora inizia
aspetta che qualcuno risponda;
se qualcuno risponde allora
continua a conversare finché non hai finito;
fine fine
riponi la cornetta sull’apparecchio;
Fine della telefonata.
Un esempio
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 35
Inizia telefonata Solleva la cornetta;
NON c’è il tono di della linea riponi la cornetta sull’apparecchio.
Fine della telefonata
Inizia telefonata Solleva la cornetta;
C’è il tono di della linea inizia
componi il numero;
il numero chiamato NON è libero fine
riponi la cornetta sull’apparecchio.
Fine della telefonata
Inizia telefonata Solleva la cornetta;
c’è il tono di della linea inizia
componi il numero;
il numero chiamato è libero inizia
qualcuno risponde;
continua a conversare finché non hai finito;
fine fine
riponi la cornetta sull’apparecchio.
Fine della telefonata
… più sequenze dinamiche (esecuzioni) associate alla stessa sequenza statica di istruzioni ...
Inizia telefonata Solleva la cornetta;
c’è il tono di della linea inizia
componi il numero;
il numero chiamato è libero inizia
nessuno risponde;
fine fine
riponi la cornetta sull’apparecchio.
Fine della telefonata
La sequenza effettivamente eseguita dipende da eventi (condizioni) che si verificano durante l’esecuzione stessa:
... Presenza della linea …
… linea libera o occupata ...
Un algoritmo (ovvero un programma) è descritto con una sequenza di frasi (ovvero istruzioni ), che è detta sequenza statica o lessicografica.
La sequenza lessicografica può contenere più differenti sequenze dinamiche (esecuzioni)
Sequenze Statiche e Dinamiche
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 37
“costrutti sintattici” quali, nel linguaggio naturale:
se...allora...altrimenti....
qualora...ma ...nel caso in cui...
ripeti ... fino a quando…
continua …. finché mentre... se ..però...
verificandosi...altrimenti....
nel primo caso...., nel secondo caso..., ... nell’ennesimo caso...
...…
indicano possibili condizioni (eventi) che danno origine alle diverse sequenze dinamiche
nei linguaggi di programmazione questi “costrutti sintattici” sono chiamati “strutture di controllo”
Sequenze Statiche e Dinamiche
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 38
Sequenza
struttura di controllo che racchiude istruzioni semplici o altre strutture di controllo che vanno eseguite nell’ordine in cui sono scritte
una sequenza può anche racchiudere una sola istruzione o una sola struttura di controllo
Selezione
una struttura di controllo per selezionare una fra due o più possibili “sequenze” di istruzioni
Ciclo
struttura di controllo per ripetere l’esecuzione di una “sequenza” di istruzioni
… una struttura di controllo può contenerne altre, che sono ‘innestate’ in essa …
Strutture di Controllo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 39
Sequenza
Sequenza begin S end;
tra begin e end sono inserite le istruzioni che devono essere eseguite
una prima struttura:
if (condizione) then
<sequenza>
endif
condizione è una espressione booleana (predicato)
<sequenza> è una sequenza di istruzioni semplici o strutturate
se condizione è vera esegui istruzioni in <sequenza>; in ogni caso continua eseguendo la prima istruzione successiva alla struttura di controllo
Selezione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 41
la struttura introduce due possibili sequenze dinamiche (esecuzioni):
C = VERO, sequenza eseguita:
S0 - S1 - S2
C = FALSO, sequenza eseguita:
S0 - S2 S0
if (C) then S1 endif S2
…. struttura 1-in /1-out ….
S0
S1
S2 C
vero falso
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 42
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then area = base * altezza;
write (“Area”‘, “%f” area);
endif end.
… il programma per calcolare l’area del rettangolo …
… considerando le precondizioni sugli input ...
… (base >0 ) and (altezza > 0) …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 43
Program area_rettangolo;
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then
area = base * altezza;
write (“Area=“, “%f” area);
endif end.
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
immetti base immetti altezza
Schermo del video
7
l’utente digita 7 base = 7
12
l’utente digita 12 altezza = 12
area = 7 * 12 = 84
(base > 0 and altezza > 0)=VERO
Area= 84
Cosa accadrà quando uno dei due valori non è maggiore di zero ? … dal punto di vista dell’utente
Program area_rettangolo;
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then area = base * altezza;
write (“Area=“, “%f” area);
endif end.
immetti base 7
immetti altezza 0
Schermo del video
l’utente digita 7 base = 7
l’utente digita 0 altezza = 0
(base > 0 and altezza > 0)=FALSO
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 45
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then area = base * altezza;
write (“Area=“, “%f” area);
endif
if ((base <= 0) or (altezza <= 0)) then
write (“ERRORE! Base e/o altezza non maggiore di zero”);
endif end.
… aggiungiamo una struttura “if … then …” per visualizzare un messaggio di errore …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 46
Program area_rettangolo;
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then area = base * altezza;
write (“Area=“, “%f” area);
endif
if ((base <= 0) or (altezza <= 0)) then
write (“ERRORE! Base e/o altezza non maggiore di zero”);
endif end.
Cosa vedrà l’utente quando sarà eseguito …
immetti base 7
immetti altezza 0
Schermo del video
l’utente digita 7 base = 7
l’utente digita 0 altezza = 0
(base > 0 and altezza > 0)=FALSO ERRORE! Base e/o altezza non maggiore di zero
(base <= 0 or altezza <= 0)=VERO
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 47
Il programma di esempio calcolo volume parallelepipedo
Program volume_parallelepipedo;
FLOAT LBase, ABase, H, Volume, Area_Base;
begin
write (“immetti valore della lunghezza di base”);
read (“%f” LBase);
write (“immetti valore della altezza di base”);
read (“%f” ABase);
write (“immetti valore della altezza del parallelepipedo”);
read (“%f” H);
Area_Base = LBase* ABase;
Volume=Area_Base*H;
write (“Volume= “, “%f” Volume);
end.
... Modificare il programma del calcolo del volume del parallelepipedo per verificare il rispetto delle precondizioni ...
Il programma di esempio calcolo volume parallelepipedo
Program volume_parallelepipedo;
FLOAT LBase, ABase, H, Volume, Area_Base;
begin
write (“immetti valore della lunghezza di base”);
read (“%f” LBase);
write (“immetti valore della altezza di base”);
read (“%f” ABase);
write (“immetti valore della altezza del parallelepipedo”);
read (“%f” H);
if ((Lbase>0) and (Abase>0) and (H>0)) then
Area_Base = LBase* ABase;
Volume=Area_Base*H;
write (“Volume= “, “%f” Volume);
endif
if ((Lbase<=0) or (Abase<=0) or (H<=0)) then
write (“ERRORE !!! Almeno una delle dimensioni è non maggiore di zero”);
... programma del calcolo del volume del parallelepipedo con istruzioni per la verifica del rispetto delle precondizioni ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 49
una seconda struttura:
if (condizione) then
<sequenza1>
else
<sequenza2>
endif
condizione è una espressione booleana (predicato)
<sequenza1> <sequenza2> sono sequenze di istruzioni semplici o strutturate
se condizione è vera esegui istruzioni in <sequenza1>; altrimenti (cioè condizione è falsa) esegui <sequenza2>; in ogni caso continua
eseguendo la prima istruzione successiva alla struttura di controllo
Selezione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 50
la struttura introduce due possibili sequenze dinamiche (esecuzioni):
C = VERO, sequenza eseguita:
S0 - S1 - S3
C = FALSO, sequenza eseguita:
S0 - S2 - S3 S0
if (C) then S1 else S2 endif S3
…. struttura 1-in /1-out ….
S0
S2
S3
vero
C
falsoS1
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 51
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then begin
area = base * altezza;
write (“Area=“, “%f” area);
end else
write (“Errore: base o altezza = <0”);
endif end.
… una versione del programma per il calcolo dell’area di un rettangolo facendo uso della struttura di selezione :
if ( ) ... then … else …
Program area_rettangolo;
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then begin
area = base * altezza;
write (“Area=“, “%f”, area);
end else
write (“Errore: base o altezza = <0”);
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
immetti base 7
immetti altezza 0
Schermo del video
l’utente digita 7 base = 7
l’utente digita 0
altezza = 0 Errore: base o altezza = <0
(base > 0 and altezza > 0) = FALSO
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 53
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then area = base * altezza;
write (“Area=“, “%f”, area);
endif
if ((base <= 0) or (altezza <= 0)) then write (“ERRORE! Base e/o altezza =<0 “);
endif end.
… confronto tra le due versioni …
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
if ((base > 0) and (altezza > 0)) then begin
area = base * altezza;
write (“Area= “, “%f” area);
end else
write (“Errore: base o altezza = <0”);
endif end.
… if ( ) then … … if ( ) then … else …