Laboratorio di Programmazione
Laurea in
Ingegneria Civile e Ambientale
MATLAB: le strutture di controllo
Stefano CagnoniDipartimento di Ingegneria dell'Informazione Università degli Studi di Parma
Strutture di controllo
(v.anche cap. 7 del testo “MATLAB per l’ingegneria”)
If, while, for, do until
3
Sì No
Se la condizione C è vera, esegui O1, altrimenti esegui O2 C
O1
Selezione if
O2
Strutture di controllo
3
MATLAB - controllo MATLAB - controllo 4
Strutture di controllo
Selezione if
if (condizione) blocco istruzioni 1
[else blocco istruzioni 2]
end (Matlab) endif (Octave)
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 5
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 6
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
Si ai = a1 + a2 + a3 + …. + an
cioè poni i=1
per n volte
somma un nuovo elemento a(i)
incrementa i
fine
Al variare di n, posso esprimere un qualunque numero di somme con lo stesso “codice”
1
MATLAB - controllo 7
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 X
fine
la ripetizione di un blocco di istruzioni finché non si avvera una certa condizione C (ciclo do … until)
ripeti
esegui la/e operazione/i X finché C non diventa vera
MATLAB - controllo 8
Cicli
In un algoritmo o programma, in generale, può essere necessario esprimere:
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
Strutture di Controllo
Ciclo While Ciclo do until Ciclo for
Sì No
No Sì
Ripete una stessa operazione O finché la condizione C resta vera
C
O
O C
Esegue una operazione O una volta, poi la ripete finché la condizione C non è soddisfatta
A livello logico come ciclo while, ma più esplicito se si devono ripetere le istruzioni un numero prefissato di volte
Cicli
Sì C No
O
9 MATLAB - controllo 10
Strutture di controllo
Ciclo while
while (condizione)
istruzioni
end
Esegue il blocco di istruzioni che segue, mentre la condizione è vera (può anche non eseguirlo mai)
Sì C No
O
MATLAB - controllo 11
Strutture di controllo
Somma dei numeri diversi da zero introdotti da tastiera: se si inserisce 0 fine.
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);
Sì a != 0 No
s=s+a
MATLAB - controllo 12
Strutture di controllo
Ciclo do until (SOLO OCTAVE!)
do istruzioni
until (condizione)
Esegue (sempre almeno una volta) le istruzioni comprese nel blocco che segue e le ripete finché la condizione non diventa vera
No Sì
O C
MATLAB - controllo 13
Strutture di controllo
Somma dei numeri diversi da zero introdotti da tastiera: se si inserisce 0 fine.
s 0;
a=input('Inserisci un numero');
do s s a;
a=input('Inserisci un nuovo numero');
until (a == 0)
disp('La somma vale: '), disp(s);
No Sì
s = s + a a == 0
MATLAB - controllo 14
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 minore di v_fin solo se passo è negativo i = 1 : 10
equivale a i=[1 2 3 4 5 6 7 8 9 10]
i = 1 : 0.1 : 1.55
equivale a i=[1 1.1 1.2 1.3 1.4 1.5]
istruzioni
MATLAB - controllo 15
Strutture di controllo
Ciclo for
for(var = val_iniz:val_fin) istruzioni
end
La variabile var si chiama contatore.
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 automatico del contatore stesso.
for i1:100 disp( i ); end
Sì Var<=val_fin No var = val_iniz
var = var + 1
MATLAB - controllo 16
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 17
Strutture di controllo
In generale:
Il ciclo while (o do until) 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 18
Esercizi
Scrivere un programma che chieda in ingresso un intero N e calcoli il prodotto dei primi N numeri
Scrivere un programma, a partire dal corrispondente diagramma di flusso, che chieda in ingresso un numero finché non si inserisce un numero >10.
Quando questo avviene, il programma deve uscire scrivendo quanti sono stati i numeri <=10 che lo hanno preceduto.
Lettura ed esercizi del capitolo 7 del libro (consigliati!)