Recherche…


Syntaxe

  • si expression ... fin
  • si expression ... sinon ... fin
  • if expression ... elseif expression ... end
  • if expression ... elseif expression ... else ... end

Paramètres

Paramètre La description
expression une expression qui a un sens logique

SI condition

Les conditions sont une partie fondamentale de presque toutes les parties du code. Ils sont utilisés pour exécuter certaines parties du code uniquement dans certaines situations, mais pas dans d’autres. Regardons la syntaxe de 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

Sortie:

Not OK

Dans cet exemple, nous voyons que le if est composé de 2 parties: la condition et le code à exécuter si la condition est vraie. Le code est tout écrit après la condition et avant la end de celle-ci if . La première condition n'a pas été remplie et le code à l'intérieur n'a pas été exécuté.

Voici un autre exemple:

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 condition ci-dessus sera toujours vraie et affichera le résultat It's true! .

On peut aussi écrire:

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

Cette fois-ci, la condition est toujours fausse, donc nous n'obtiendrons jamais la sortie Equal .

Les conditions qui sont toujours vraies ou fausses ne sont pas très utiles, car si elles sont toujours fausses, nous pouvons simplement supprimer cette partie du code, et si elles sont toujours vraies, la condition n'est pas nécessaire.

Condition IF-ELSE

Dans certains cas, nous voulons exécuter un code alternatif si la condition est fausse, pour cela nous utilisons la partie facultative else :

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

Ici, nous voyons cela parce a n'est pas plus petit que 10 la deuxième partie du code, après que l' else soit exécuté et que nous obtenons la sortie a bigger than 10 . Maintenant, regardons un autre essai:

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

Dans cet exemple montre que nous n'avons pas vérifié si a est en effet inférieur à 10, et que nous obtenons un message erroné car la condition ne vérifie que l'expression telle quelle, et TOUS les cas qui ne sont pas égaux à true ( a = 10 ) deuxième partie à exécuter.

Ce type d'erreur est un piège très courant pour les programmeurs débutants et expérimentés, en particulier lorsque les conditions deviennent complexes et doivent toujours être prises en compte

Condition IF-ELSEIF

En utilisant else nous pouvons effectuer certaines tâches lorsque la condition n'est pas satisfaite. Mais que faire si nous voulons vérifier une seconde condition au cas où la première serait fausse. Nous pouvons le faire de cette façon:

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

Ceci est aussi appelé "condition imbriquée" , mais ici nous avons un cas particulier qui peut améliorer la lisibilité du code et réduire les risques d'erreur - nous pouvons écrire:

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

en utilisant le elseif nous pouvons vérifier une autre expression dans le même bloc de condition, et cela ne se limite pas à un essai:

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

Des précautions supplémentaires doivent être prises lors du choix d'utiliser elseif dans une ligne, car un seul d'entre eux sera exécuté à partir de tout le bloc if to end . Donc, dans notre exemple, si nous voulons afficher tous les diviseurs d' a (à partir de ceux que nous vérifions explicitement), l'exemple ci-dessus ne sera pas bon:

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 seulement 3, mais aussi 5 est un diviseur de 15, mais la partie qui vérifie la division par 5 n'est pas atteinte si l'une des expressions ci-dessus était vraie.

Enfin, nous pouvons ajouter un else (et un seul) après toutes les elseif conditions d'exécution d' un code lorsque aucune des conditions ci - dessus sont remplies:

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

Conditions imbriquées

Lorsque nous utilisons une condition dans une autre condition, nous disons que les conditions sont "imbriquées". Un cas particulier de conditions imbriquées est donné par l'option elseif , mais il existe de nombreuses autres façons d'utiliser des conditions imbriquées. Examinons le code suivant:

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 

Pour a=2 , le résultat sera a is even , ce qui est correct. Pour a=3 , le résultat sera a is odd , ce qui est également correct, mais rate la vérification si 3 est un diviseur de a . C'est parce que les conditions sont imbriquées, donc seulement si la première est true , que nous passons à la valeur interne, et si a est impair, aucune des conditions internes n'est vérifiée. Ceci est quelque peu opposé à l'utilisation de elseif où seulement si la première condition est false que la suivante. Et si on vérifiait la division par 5? seul un nombre ayant 6 comme diviseur (à la fois 2 et 3) sera vérifié pour la division par 5, et nous pouvons tester et voir que pour a=30 la sortie est:

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

Nous devrions également remarquer deux choses:

  1. La position de la end au bon endroit pour chaque if est crucial pour l'ensemble des conditions de travail comme prévu, de sorte que l' indentation est plus qu'une bonne recommandation ici.
  2. La position de l'instruction else est également cruciale, car nous devons savoir if (et il pourrait y en avoir plusieurs) nous voulons faire quelque chose si cette expression est false .

Regardons un autre exemple:

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

Et le résultat sera:

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

nous voyons que nous n’avons que 6 lignes pour 6 chiffres, car les conditions sont imbriquées de manière à ne garantir qu’une impression par numéro. un nombre n'est même pas il n'y a aucun point à vérifier si 4 est l'un de ses diviseurs.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow