Guida a Matlab - Corso base - Capitolo 6: controllo del flusso, costrutti if e switch, cicli for e while
Capitolo 6: Controllo di flusso: i costrutti if e switch, i cicli for e while.
Per controllare il flusso dell'esecuzione o effettuare controlli su condizioni, Matlab mette a disposizione, come molti altri linguaggi, i costrutti:
- if-else-end;
- switch;
- for;
- while.
Iniziamo dall'if, che verifica se una condizione passata come parametro è "vera", ed in tal caso effettua un'azione; in caso contrario ("else") ne effettua un'altra (opzionale).
E' possibile avvalersi, inoltre, di elseif, che implementa un nuovo blocco if all'interno del precedente, per cui è possibile costruire if annidati.
La sintassi è la seguente:
IF expression statements ELSEIF expression statements ELSE statements END
Esempio pratico:
if 2 == 3 x=4; elseif 2 < 3 x=5; else x=6; end
Digitando x e premendo Invio, vedremo a video, come valore di x:
5
in quanto la condizione vera (true) è quella dell'elseif: 2<3.
Il costrutto switch consente anch'esso, come if, di valutare un'espressione O UN VALORE passati come parametro e di intraprendere, in base al valore di tale espressione o del parametro, azioni differenti; a differenza dell'if, comunque, è più "ordinato": le varie possibilità vengono individuate da righe che iniziano con la parola case e le azioni da intraprendere vengono scritte di seguito.
Sintassi di Switch:
SWITCH switch_expr CASE case_expr, statement, ..., statement CASE {case_expr1, case_expr2, case_expr3,...} statement, ..., statement ... OTHERWISE, statement, ..., statement END
Ad esempio, digitando:
switch(2+3)
case {2,3,4}
x = -1;
case 5
x = 0;
otherwise
x=1;
end
Il valore depositato, alla fine, in x, sarà 0.
Il ciclo for ripete una o più azioni n volte, dove n è dato dall'indice di terminazione meno l'indice di partenza del ciclo diviso il "passo" (che, di default, vale 1).
E' possibile annidare i cicli for, ad esempio per scorrere una matrice a due o più dimensioni.
Sintassi del ciclo for in Matlab:
FOR variable = expr, statement, ..., statement END
Esempio pratico: due cicli for, annidati, che pongono a 1 tutti i valori di una matrice 4x4 di nome A
n = 4;
for i=1:n
for j=1:n
A(i,j) = 1;
end
end
Provate, ad esempio, a modificare il ciclo for appena esposto per generare una matrice triangolare inferiore o superiore.
Il ciclo while è simile al ciclo for, ma non dispone di una informazione sull'incremento nella sua dichiarazione, per cui toccherà a voi gestire questo aspetto (l'esecuzione del ciclo potrebbe non avere mai fine !).
La sintassi è la seguente:
WHILE expression statements END
Il seguente esempio incrementa un contatore finchè esso non vale 10:
i = 0;
while (i<10)
i = i+1;
end
|