Istruzione if-else in MATLAB

Con una semplice istruzione if in MATLAB possiamo controllare se una condizione è vera e, in tal caso, eseguire un blocco di codice. Tuttavia, spesso potrebbe essere necessario eseguire un blocco di codice alternativo se la condizione è falsa.

Per questo motivo, MATLAB mette a disposizione l'istruzione condizionale if-else, che permette di eseguire un blocco di codice se una condizione è vera, e un altro blocco di codice se la condizione è falsa.

Istruzione condizionale if-else

Abbiamo visto, nella lezione precedente, che l'istruzione if viene adoperata per eseguire un blocco di istruzioni nel caso in cui una condizione risulti vera.

In MATLAB, possiamo estendere l'istruzione if con l'istruzione else, che permette di eseguire un blocco di codice alternativo nel caso in cui la condizione sia falsa.

La sintassi generale dell'istruzione if-else è la seguente:

if condizione
    istruzione_caso_vero_1
    ...
    istruzione_caso_vero_N
else
    istruzione_caso_falso_1
    ...
    istruzione_caso_falso_N
end

In tal caso, quando MATLAB incontra un'istruzione if-else, dapprima viene valutata la condizione condizione. Se questa risulta vera, MATLAB esegue il blocco di codice compreso tra if e else. Se la condizione è falsa, MATLAB esegue il blocco di codice compreso tra else e end.

Anche in questo caso, come per l'istruzione if, MATLAB capisce a quale ramo appartiene un'istruzione in base al fatto che essa si trovi racchiusa tra if ed else, oppure tra else ed end.

Pertanto, l'indentazione non è strettamente necessaria, ma è sempre consigliabile per rendere il codice più leggibile.

Definizione

Istruzione condizionale if-else in MATLAB

In MATLAB l'istruzione if-else permette di eseguire un blocco di codice se una condizione è vera, e un altro blocco di codice se la condizione è falsa. La sintassi generale è la seguente:

if condizione
    istruzione_caso_vero_1
    ...
    istruzione_caso_vero_N
else
    istruzione_caso_falso_1
    ...
    istruzione_caso_falso_N
end

Esempio: indovinare un numero

Vediamo un'applicazione dell'istruzione if-else. Scriviamo uno script, indovina_numero.m che genera un numero segreto compreso tra 1 e 10. L'utente deve indovinare il numero segreto. Se l'utente indovina il numero, lo script stampa "Hai indovinato!". Altrimenti, lo script stampa "Mi dispiace, il numero segreto era X".

% Generiamo un numero segreto
numeroSegreto = randi([1, 10]);

% Chiediamo all'utente di indovinare il numero
numeroIndovinato = input('Indovina il numero segreto (1-10): ');

% Controlliamo se l'utente ha indovinato
if numeroIndovinato == numeroSegreto
    disp('Hai indovinato!');
else
    fprintf('Mi dispiace, il numero segreto era %d\n', numeroSegreto);
end

Nell'esempio di sopra, grazie all'istruzione if-else, possiamo controllare se l'utente ha indovinato il numero segreto e stampare un messaggio appropriato.

Lanciando lo script, otteniamo un output simile al seguente:

>> indovina_numero
Indovina il numero segreto (1-10): 5
Mi dispiace, il numero segreto era 7

Esempio: Calcolo del seno di un angolo

Proviamo a realizzare uno script che calcoli il seno di un angolo. L'angolo, tuttavia, può essere espresso in gradi o radianti, per cui lo script deve richiedere all'utente di specificare l'unità di misura dell'angolo. Chiamiamo questo script calcola_seno.m.

Nel caso in cui l'angolo sia specificato in radianti, utilizzeremo la normale funzione sin. Nel caso in cui l'angolo sia specificato in gradi, utilizzeremo, invece, la funzione sind che calcola il seno di un angolo espresso in gradi.

% Chiediamo all'utente di specificare l'unità di misura
unita = input('Specificare l''unità di misura (g/r): ', 's');

% Chiediamo all'utente di specificare l'angolo
angolo = input('Specificare l''angolo: ');

% Calcoliamo il seno dell'angolo
if unita == 'g'
    seno = sind(angolo);
    fprintf('Il seno di %d gradi è %f\n', angolo, seno);
else
    seno = sin(angolo);
    fprintf('Il seno di %f radianti è %f\n', angolo, seno);
end

Nell'esempio di sopra, l'utente inserisce il carattere g se vuole specificare l'angolo in gradi, oppure il carattere r se vuole specificare l'angolo in radianti. A seconda dell'unità di misura specificata, lo script calcola il seno dell'angolo utilizzando la funzione appropriata.

Lanciando lo script, otteniamo un output simile al seguente:

>> calcola_seno
Specificare l'unità di misura (g/r): g
Specificare l'angolo: 30
Il seno di 30 gradi è 0.500000

Controllo degli errori

Una delle applicazioni più importanti dell'istruzione if-else è il controllo degli errori e dell'input. Possiamo utilizzare l'istruzione if-else per verificare che l'input dell'utente sia corretto e per gestire eventuali errori.

Supponiamo di voler realizzare uno script, area_cerchio.m, per il calcolo dell'area di un cerchio dato il suo raggio. Potremmo scrivere uno script simile al seguente:

% Chiediamo all'utente di inserire il raggio del cerchio
raggio = input('Inserire il raggio del cerchio: ');

% Calcoliamo l'area del cerchio
area = pi * raggio^2;
fprintf('L''area del cerchio di raggio %f è %f\n', raggio, area);

Tuttavia, se l'utente inserisce un valore negativo per il raggio, il calcolo dell'area del cerchio non avrebbe senso, poiché il raggio di un cerchio non può essere negativo.

Possiamo utilizzare l'istruzione if-else per controllare che il raggio sia un valore positivo. Se il raggio è negativo, possiamo stampare un messaggio di errore e terminare lo script.

% Chiediamo all'utente di inserire il raggio del cerchio
raggio = input('Inserire il raggio del cerchio: ');

% Controlliamo che il raggio sia positivo
if raggio < 0
    fprintf('Il raggio del cerchio non può essere negativo');
else
    % Calcoliamo l'area del cerchio
    area = pi * raggio^2;
    fprintf('L''area del cerchio di raggio %f è %f\n', raggio, area);
end

In questo modo, se l'utente inserisce un raggio negativo, lo script stamperà un messaggio di errore. Altrimenti, calcolerà l'area del cerchio.

In tali casi, l'istruzione if-else ci permette di gestire l'input dell'utente e di controllare che i valori inseriti siano corretti. MATLAB, inoltre, mette a disposizione una funzione apposita per segnalare errori all'utente: error.

La funzione error permette di interrompere l'esecuzione dello script e di stampare un messaggio di errore. La sintassi generale è la seguente:

error('Messaggio di errore');

Esiste un duplice vantaggio rispetto alla semplice stampa di un messaggio di errore con fprintf:

  1. L'esecuzione dello script viene interrotta immediatamente, evitando che vengano eseguite istruzioni successive che potrebbero generare ulteriori errori;
  2. Il messaggio di errore viene stampato in rosso, rendendolo più visibile.

Pertanto, possiamo modificare lo script area_cerchio.m di sopra in questo modo:

% Chiediamo all'utente di inserire il raggio del cerchio
raggio = input('Inserire il raggio del cerchio: ');

% Controlliamo che il raggio sia positivo
if raggio < 0
    error('Il raggio del cerchio non può essere negativo');
end

% Calcoliamo l'area del cerchio
area = pi * raggio^2;
fprintf('L''area del cerchio di raggio %f è %f\n', raggio, area);

In tal caso non abbiamo avuto bisogno dell'istruzione else, poiché se l'utente inserisce un raggio negativo, lo script termina immediatamente con un messaggio di errore.

Definizione

Funzione error in MATLAB

La funzione error permette di interrompere l'esecuzione di uno script e di stampare un messaggio di errore. La sintassi generale è la seguente:

error('Messaggio di errore');

In Sintesi

In questa lezione abbiamo visto come utilizzare l'istruzione condizionale if-else in MATLAB per controllare il flusso di esecuzione del codice. L'istruzione if-else permette di eseguire un blocco di codice se una condizione è vera, e un altro blocco di codice se la condizione è falsa.

Abbiamo visto diversi esempi di applicazione dell'istruzione if-else, tra cui il controllo degli errori, il calcolo del seno di un angolo e il gioco dell'indovina numero.

Inoltre, abbiamo visto come gestire gli errori in MATLAB utilizzando la funzione error.

Nella prossima lezione, vedremo come utilizzare le istruzioni condizionali annidate in MATLAB per controllare più condizioni in modo sequenziale.