Strutture di controllo
(v.anche cap. 8 del testo “MATLAB per l’ingegneria”)
If, while, for, do until
Strutture di controllo
Selezione if
Sì
C
No
O1
O2
Se la condizione C è vera, esegui O1, altrimenti esegui O2
MATLAB - Controllo
2
Strutture di controllo
Selezione if
if (condizione) blocco istruzioni 1
[else blocco istruzioni 2]
end
Se la condizione è vera esegue il primo blocco di istruzioni,
altrimenti esegue il secondo (se specificato)
Es. calcolo valore assoluto
if (x 0)
y = x;
else
y = -x;
end
MATLAB - Controllo
3
Esempio
a=input('Inserisci un numero: ');
if (mod(a,2)==0)
% mod(a,2) restituisce il resto
disp('a è pari'); % della divisione intera a/2
else
disp('a è dispari');
end;
Esempio di esecuzione
Inserisci un numero: 7
a è dispari
MATLAB - Controllo
4
Esempio
% Dati due numeri in ingresso, individua il maggiore
num1 = input('Inserisci un numero ');
num2 = input('Inserisci un altro numero ');
if (num1==num2)
disp('I due numeri sono uguali');
else
if(num1>num2)
disp('Il primo è maggiore');
else
disp('Il secondo è maggiore');
end;
end;
MATLAB - Controllo
5
Cicli
Esprimono in modo compatto e generali l'esecuzione di
uno stesso blocco di codice per più volte
Anche in matematica sono presenti operatori che
eseguono di fatto un ciclo (ad es. sommatoria e
produttoria)
n
cioè
S
ai = a1 + a2 + a3 + …. + an
1 i
poni i=1
per n volte
somma al totale un nuovo elemento a(i)
incrementa i di 1
fine
Al variare di n, posso sommare un qualunque numero di
elementi con lo stesso “codice”
MATLAB - Controllo
6
Cicli
In un algoritmo o programma, in generale, può
essere necessario esprimere:
la ripetizione di uno stesso blocco di istruzioni X per più
volte (ciclo for)
per n volte
esegui la/e operazione/i
fine
X
la ripetizione di un blocco di istruzioni finché resta vera una
certa condizione C (ciclo while)
mentre C è vera
esegui la/e operazione/i X
fine
MATLAB - Controllo
7
Strutture di Controllo
Cicli
O
No
C
Sì
No
C
Sì
Sì
C
No
O
O
Ciclo while
Ciclo do while
Ripete una stessa
operazione O
finché la condizione
C resta vera
Esegue una
operazione O una
volta, poi la ripete
finché la condizione
C non è soddisfatta
MATLAB - Controllo
Ciclo for
A livello logico come
ciclo while, ma più
esplicito se si devono
ripetere le istruzioni
un numero prefissato
di volte
8
Strutture di controllo
Ciclo while
No
C
Sì
while (condizione)
O
istruzioni O
end
Esegue il blocco di istruzioni O che segue, mentre la
condizione è vera (può anche non eseguirlo mai)
MATLAB - Controllo
9
Strutture di controllo
Somma dei numeri introdotti da tastiera:
se si inserisce 0 fine.
a != 0
No
Sì
s=s+a
s 0;
a=input('Inserisci un numero');
while(a!=0)
s s a;
a=input('Inserisci un nuovo numero');
end
disp('La somma vale: '), disp(s);
MATLAB - Controllo
10
Strutture di controllo
Intervalli
v_iniz : passo : v_fin
definisce una sequenza di valori che vanno da v_iniz (compreso) a
v_fin (o il max valore della sequenza <= v_fin) con un incremento
(anche negativo) pari a passo.
Se passo non è specificato l'incremento è pari a 1.
v_iniz può essere maggiore di v_fin solo se passo è negativo
i = 1 : 10
equivale a
i=[1
2
i = 1 : 0.1 : 1.55
equivale a
i=[1 1.1
3
4
1.2
5
6
1.3
MATLAB - Controllo
7
1.4
8
9
10]
1.5]
11
Strutture di controllo
Ciclo for
var = val_iniz
var<=val_fin
for(var = val_iniz:val_fin)
istruzioni
end
No
Sì
istruzioni
La variabile var si chiama contatore.
var = var + 1
Dopo avere definito l'intervallo entro cui deve variare il contatore,
ripete l'esecuzione del blocco di istruzioni che segue finché il
contatore è minore o uguale all'estremo destro dell'intervallo
concludendo ogni ciclo con l'incremento del contatore stesso (non è
necessario specificare l’incremento.
for i1:100
disp( i );
end
MATLAB - Controllo
% stampa i primi 100 numeri
12
Strutture di controllo
Calcolo della somma dei primi 100 numeri naturali
somma 0;
for i 1:100
somma sommai;
end
disp('La somma vale: '), disp(somma);
MATLAB - Controllo
13
Strutture di controllo
In generale:
Il ciclo while si usa quando non è definito a priori il
numero di iterazioni da eseguire, quando cioè si
attende il verificarsi di un evento (condizione
inizialmente vera per il ciclo while, falsa per il ciclo
do…until).
Il ciclo for si usa quando il numero di iterazioni è
definito o quando la stessa sequenza di istruzioni deve
essere eseguita utilizzando una sequenza predefinita di
valori
In realtà ogni ciclo for è esprimibile come un ciclo while
(e viceversa)
MATLAB - Controllo
14
Esercizi di riepilogo
s=0;
for i=1:5
s=s+i;
end;
1. Quanto vale s alla fine del programma ?
2. Quanto vale i ?
v = 1:5; k= 1:2:6
disp(v); disp(k);
3. Quale è l’output generato da questo programma ?
MATLAB - Controllo
15
Esercizi
1. Disegnando prima il diagramma di flusso, scrivere un
programma che, dati due numeri, verifica se il primo è
maggiore, uguale o minore dell’altro e scrive su video il
risultato.
2. Disegnando prima il diagramma di flusso, scrivere un
programma che chiede l'inserimento di tre numeri e ne
stampa il più piccolo, senza utilizzare la funzione min.
3. Scrivere lo stesso programma che valga per una
quantità arbitraria di numeri, considerando i numeri
come elementi di un vettore, richiedendoli tutti in input
con una sola istruzione ed utilizzando la funzione
min(x) di MATLAB.
MATLAB - Controllo
16
Esercizi
Scrivere un programma che chieda in ingresso un
intero N e calcoli il prodotto dei primi N numeri
naturali
Scrivere
un
programma,
a
partire
dal
corrispondente diagramma di flusso, che chieda in
ingresso un numero finché non si inserisce un
numero >100. Quando questo avviene, il
programma deve uscire scrivendo quanti sono stati i
numeri <=100 che lo hanno preceduto.
Lettura ed esercizi del capitolo 8 del libro.
MATLAB - Controllo
17