MATLAB Language
Conditions
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:
- La position de la
end
au bon endroit pour chaqueif
est crucial pour l'ensemble des conditions de travail comme prévu, de sorte que l' indentation est plus qu'une bonne recommandation ici. - La position de l'instruction
else
est également cruciale, car nous devons savoirif
(et il pourrait y en avoir plusieurs) nous voulons faire quelque chose si cette expression estfalse
.
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.