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