Ricerca…


Sintassi

  • se espressione ... fine
  • se espressione ... altro ... fine
  • se espressione ... elseif espressione ... fine
  • se espressione ... elseif espressione ... altro ... fine

Parametri

Parametro Descrizione
espressione un'espressione che ha un significato logico

Condizione IF

Le condizioni sono una parte fondamentale di quasi ogni parte del codice. Sono utilizzati per eseguire alcune parti del codice solo in alcune situazioni, ma non in altre. Diamo un'occhiata alla sintassi di base:

a = 5;
if a > 10    % this condition is not fulfilled, so nothing will happen
    disp('OK')
end

if a < 10    % this condition is fulfilled, so the statements between the if...end are executed
    disp('Not OK')
end

Produzione:

Not OK

In questo esempio vediamo che if costituito da 2 parti: la condizione e il codice da eseguire se la condizione è vera. Il codice è tutto scritto dopo la condizione e prima della end di quello if . La prima condizione non è stata soddisfatta e quindi il codice al suo interno non è stato eseguito.

Ecco un altro esempio:

a = 5;
if a ~= a+1        % "~=" means "not equal to"
    disp('It''s true!') % we use two apostrophes to tell MATLAB that the ' is part of the string
end

La condizione sopra sarà sempre vera e mostrerà l'output It's true! .

Possiamo anche scrivere:

a = 5;
if a == a+1    % "==" means "is equal to", it is NOT the assignment ("=") operator
    disp('Equal')
end

Questa volta la condizione è sempre falsa, quindi non otterremo mai l'output Equal .

Non c'è molto da usare per condizioni che sono sempre vere o false, però, perché se sono sempre false possiamo semplicemente cancellare questa parte del codice, e se sono sempre vere, allora la condizione non è necessaria.

Condizione IF-ELSE

In alcuni casi si vuole eseguire un codice alternativo se la condizione è falsa, per questo usiamo opzionale else parte:

a = 20;
if a < 10
    disp('a smaller than 10')
else
    disp('a bigger than 10')
end

Qui vediamo che poiché a non è inferiore a 10 la seconda parte del codice, dopo che il else è stato eseguito e otteniamo a bigger than 10 output a bigger than 10 . Ora guardiamo un altro tentativo:

a = 10;
if a > 10
    disp('a bigger than 10')
else
    disp('a smaller than 10')
end

In questo esempio mostra che non abbiamo verificato se a è effettivamente inferiore a 10 e riceviamo un messaggio sbagliato perché la condizione controlla solo l'espressione così com'è, e QUALSIASI caso che non sia uguale a true ( a = 10 ) causerà il seconda parte da eseguire.

Questo tipo di errore è una trappola molto comune sia per i principianti che per i programmatori esperti, specialmente quando le condizioni diventano complesse e devono essere sempre tenute a mente

Condizione IF-ELSEIF

Usando il else possiamo eseguire qualche compito quando la condizione non è soddisfatta. Ma cosa succede se vogliamo verificare una seconda condizione nel caso in cui il primo fosse falso. Possiamo farlo in questo modo:

a = 9;
if mod(a,2)==0   % MOD - modulo operation, return the remainder after division of 'a' by 2
    disp('a is even')
else
    if mod(a,3)==0
        disp('3 is a divisor of a')
    end
end

OUTPUT:
3 is a divisor of a

Questo è anche chiamato "condizione nidificata" , ma qui abbiamo un caso specifico che può migliorare la leggibilità del codice e ridurre la possibilità di errore anr - possiamo scrivere:

a = 9;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
end

OUTPUT:
3 is a divisor of a

usando il elseif siamo in grado di controllare un'altra espressione all'interno dello stesso blocco di condizioni, e questo non è limitato a un tentativo:

a = 25;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
elseif mod(a,5)==0
    disp('5 is a divisor of a')
end

OUTPUT:
5 is a divisor of a

Prestare particolare attenzione quando si sceglie di utilizzare elseif in una riga, dal momento che solo uno di essi verrà eseguito da tutti i if alla end blocco. Quindi, nel nostro esempio, se vogliamo mostrare tutti i divisori di a (da quelli che controlliamo esplicitamente) l'esempio sopra non andrà bene:

a = 15;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
elseif mod(a,5)==0
    disp('5 is a divisor of a')
end

OUTPUT:
3 is a divisor of a

non solo 3, ma anche 5 è un divisore di 15, ma la parte che controlla la divisione per 5 non viene raggiunta se nessuna delle espressioni sopra di esso era vera.

Infine, possiamo aggiungere un else (e solo uno ) dopo tutte le condizioni elseif per eseguire un codice quando nessuna delle condizioni di cui sopra sono soddisfatte:

a = 11;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
elseif mod(a,5)==0
    disp('5 is a divisor of a')
else
    disp('2, 3 and 5 are not divisors of a')
end

OUTPUT:
2, 3 and 5 are not divisors of a

Condizioni nidificate

Quando usiamo una condizione in un'altra condizione, diciamo che le condizioni sono "annidate". Un caso speciale di condizioni nidificate è dato dall'opzione elseif , ma ci sono molti altri modi per usare i conditoni nidificati. Esaminiamo il seguente codice:

a = 2;
if mod(a,2)==0    % MOD - modulo operation, return the remainder after division of 'a' by 2
    disp('a is even')
    if mod(a,3)==0
        disp('3 is a divisor of a')
        if mod(a,5)==0
            disp('5 is a divisor of a')
        end
    end
else
    disp('a is odd')
end 

Per a=2 , l'output sarà a is even , che è corretto. Per a=3 , l'output sarà a is odd , che è anche corretto, ma manca il controllo se 3 è un divisore di a . Questo perché le condizioni sono nidificate, quindi solo se la prima è true , allora passiamo a quella interna, e se a è dispari, nessuna delle condizioni interne è nemmeno controllata. Questo è alquanto opposto all'uso di elseif dove solo se la prima condizione è false quella che controlliamo la prossima. Che ne dici di controllare la divisione per 5? solo un numero che ha 6 come divisore (entrambi 2 e 3) verrà controllato per la divisione per 5, e possiamo testare e vedere che per a=30 l'output è:

a is even
3 is a divisor of a
5 is a divisor of a

Dovremmo anche notare due cose:

  1. La posizione della end nel posto giusto per ciascun if è cruciale perché l'insieme di condizioni funzioni come previsto, quindi l'indentazione è più che una buona raccomandazione qui.
  2. La posizione del else affermazione è anche fondamentale, perché abbiamo bisogno di sapere in quale if (e ci potrebbero essere molti di loro) vogliamo fare qualcosa nel caso in cui l'espressione, se false .

Diamo un'occhiata ad un altro esempio:

for a = 5:10    % the FOR loop execute all the code within it for every a from 5 to 10
    ch = num2str(a);    % NUM2STR converts the integer a to a character
    if mod(a,2)==0
        if mod(a,3)==0
            disp(['3 is a divisor of ' ch])
        elseif  mod(a,4)==0
            disp(['4 is a divisor of ' ch])
        else
            disp([ch ' is even'])
        end
    elseif mod(a,3)==0
        disp(['3 is a divisor of ' ch])
        
    else
        disp([ch ' is odd'])
    end
end

E l'output sarà:

5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even

vediamo che abbiamo solo 6 righe per 6 numeri, perché le condizioni sono nidificate in un modo che garantisce solo una stampa per numero, e anche (sebbene non possano essere viste direttamente dall'output) non sono preformati controlli extra, quindi se un numero non è nemmeno lì non ha senso controllare se 4 è uno dei suoi divisori.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow