Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AMOS - Les conditions
(Article écrit par Jean Monos - décembre 2017)
|
|
Un langage de programmation sans les conditions, c'est un peu un fromage sans vin rouge ! Nous allons commencer
par le début. Qu'est-ce qu'une condition dans un langage de programmation ? Ou plutôt, un
test de condition ? C'est un petit truc qui permet, comme son nom l'indique, de tester une expression et
d'appliquer une conséquence. Exemple un peu concret de la vie : pour aller voir le dernier film d'horreur
bien sanglant avec du sang, et tout ce qui va avec, il faut être âgé de 18 ans ou plus. Quand vous vous pointez
au cinéma pour voir ce film, le vendeur de billet, s'il fait bien son travail, dit un truc : "quel âge avez-vous ?"
Si votre âge est inférieur à 18 ans, il ne vous vend pas le billet. Si votre âge est égal ou supérieur à 18 ans,
alors vous avez votre billet et vous pouvez voir un film d'horreur avec du sang et tout ce qui va avec !
Nous allons décomposer cela en langage universel :
Age = (Ton Age)
Si "Age est supérieur ou égal à 18, alors s'affiche à l'écran : "C'est bon, vous êtes majeur, vous pouvez regarder le film"
sinon, s'affiche à l'écran : "Vous n'êtes pas majeur, ce film est interdit pour vous."
Dans cette phrase, j'ai ajouté un petit truc : le "sinon". Il permet dans cet exemple de mettre en place
une conséquence si la condition initiale n'est pas vraie.
En AMOS, c'est simple. Nous utilisons la triplette suivante : If, Then, Else.
- If = Si.
- Then = Alors.
- Else = Sinon.
Voici un petit programme en AMOS pour illustrer ceci :
AGE=16
If AGE=>18 Then Print "Vous pouvez entrer" Else Print "Vous n'êtes pas majeur"
|
Lancez le programme pour voir l'effet. Dans cet exemple, la condition n'est pas validée,
donc le "Then" en lui-même n'est pas enclenché. Mais comme il y a un "Else", alors celui-ci est joué.
Le "Else" n'est pas obligatoire dans une condition. C'est bien sûr en fonction de ce que vous voulez faire.
Vous pouvez modifier la valeur de "AGE" à 18 ou plus pour voir l'effet du "Then".
Voici les tests de condition possibles en AMOS :
- Égale est représenté par le signe égale : =. Attention : en AMOS, c'est bel et bien un seul signe égal
dans les tests de conditions et non le double égale qui est présent dans 99% des autres langages de programmation.
- Supérieur : >
- Inférieur : <
- Inférieur ou égal : <=
- Supérieur ou égal : =>
- Différent : <>
Plusieurs conditions pour un effet
Il est possible de tester de multiples conditions combinées pour savoir si l'effet peut être
joué. Voici un exemple. Je voudrais que la phrase Ok soit affichée à l'écran seulement si
la variable A=1 ET B=1. Sinon, nous affichons "Pas Ok".
Le "ET" se traduit en AMOS par "AND". Et la condition :
If A=1 and B=1 Then Print "Ok" Else Print "Pas Ok"
|
Pour que "Then" soit opérationnel, il faut que la condition A soit vraie ET que la condition B soit vraie.
A=1
B=1
If (A=1 and B=1) Then Print "Ok" Else Print "Pas Ok"
|
Voici le petit code complet et j'ai ajouté une parenthèse à la condition. Cela marche et comme
toute parenthèse, cela a son utilité dans des conditions un peu plus complexes.
A la place du "ET", nous pouvons utiliser le "OU" (qui s'écrit "OR" en AMOS).
A=1
B=1
If (A=1 or B=1) Then Print "Ok" Else Print "Pas Ok"
|
Concrètement dans ce petit morceau de code, le "Ok" est affiché à l'écran quand la condition 1 est
vraie OU que la condition 2 est vraie. Donc si A=1 et si B=1, alors le test est vrai. Si A=0
et que B=1, le test est vrai. Si A=1 et que B=0, le test est vrai. Mais si A=0 et que B=0,
alors le test n'est plus vrai !
Effet sur plusieurs lignes
Les effets sur une seule ligne, c'est casse bonbon et pas lisible car c'est trop compacté. Imaginez une condition qui déclenche
une vingtaine d'instructions : c'est la misère. Les conditions peuvent prendre plusieurs lignes. Je reprends
le dernier test de condition et je le transforme en plusieurs lignes.
A=1
B=1
If (A=1 or B=1)
Print "Ok"
Else
Print "Pas ok"
End If
|
Voyons un peu ce qui change dans cet exemple :
- Déjà, la condition n'est pas suivie d'un "Then". Le "Then" est donc implicite.
- Les instructions sont donc placées en dessous de la condition en elle-même.
- Le "Else" fonctionne aussi comme le "If". Il est seul sur une ligne et en dessous se trouvent les instructions
du "Else".
- Et à la fin de la condition, nous avons droit au "End If" qui marque la fin du test de condition.
Cela devient tout de suite lisible. Elle n'est pas belle la vie ?
Conditions dans des conditions
Il est possible de placer des conditions dans des conditions. Mais pour ça, il faut utiliser des
conditions en plusieurs lignes.
A=1
B=1
If (A=1 or B=1)
Print "Ok"
If A=1
Print "A=1"
End If
Else
Print "Pas ok"
End If
|
Vous ne pouvez pas placer une condition "If...Then", donc sur une seule ligne, dans des conditions multilignes.
Faites bien attention à cela.
Vrai et faux
Nous allons ajouter deux nouveaux états dans les tests de condition qui existent en AMOS.
Tester une variable si elle est vraie ou fausse. En AMOS, c'est "True" pour vrai et "False" pour faux.
"True" et "False" sont des constantes. "True" est égale à -1 et "False" à 0.
Donc :
A=-1
If (A=True) Then print "Condition vraie"
|
La condition est vraie car A est bien égale à -1. Si nous changeons A par une autre valeur,
la condition n'est plus vraie du tout.
A=0
If (A=False) Then print "Condition vraie"
|
Cette condition est vraie car False=0 et que A=0. La condition est donc vérifiée. Si nous changeons A
par une autre valeur, la condition est fausse.
Notons que dans d'autres langages de programmation, "True" peut être égal à toute valeur qui
est différente de 0. Mais pas en AMOS !
Multiples tests
Attention, ceci n'est valable que dans la version professionnelle d'AMOS ! L'AMOS ne possède pas la
fonction "CASE" qui existe dans d'autres langages de programmation comme le C par exemple,
mais il est possible de s'approcher de tout cela avec "Else If". Voyons cela sur un simple test :
A=1
If (A=1)
Print "A=1"
Else If (A=2)
Print "A=2"
Else If (A=3)
Print "A=3"
End If
|
"A" est testé au début de la condition. Quand la condition est vraie, les instructions sont lues
et interprétées. Une fois un nouveau "Else If" rencontré du même bloc, cela saute jusqu'au "End If"
de cette même condition.
Pour mieux comprendre tout cela, regardez les deux petits programmes suivants. L'un avec des "Else If"
et l'autre avec seulement des "If" les uns à la suite des autres :
A=1
If (A=1)
Print "A=1"
A=A+1
Else If (A=2)
Print "A=2"
A=A+1
Else If (A=3)
Print "A=3"
A=A+1
End If
|
Et :
A=1
If (A=1)
Print "A=1"
A=A+1
End If
if (A=2)
Print "A=2"
A=A+1
End If
if (A=3)
Print "A=3"
A=A+1
End If
|
Dans le premier cas, A=1. Il passe au premier test et vu que A=1, cela affiche bien le texte et ajoute 1 à A.
Donc A=2 et nous sautons directement au "End If". Les autres tests ne sont pas joués.
Dans le deuxième cas, A=1, la condition est vraie, donc nous affichons bien le texte, nous ajoutons 1 à A.
Donc A=2. Nous allons au "End If". Et là, nous avons un nouveau test pour savoir si A=2. Et comme c'est vrai,
nous affichons le texte.
Donc "Else If" est important pour tester de multiples conditions. Il est possible en AMOS
non professionnel et Easy AMOS d'arriver à ce même résultat. Voici un exemple :
A=1
If (A=1)
Print "A=1"
A=A+1
End If
if (A=2)
Print "A=2"
A=A+1
Goto Condition_A
End If
if (A=3)
Print "A=3"
A=A+1
Goto Condition_A
End If
Condition_A :
print "Fin"
|
L'exemple présenté ici est l'utilisation d'une étiquette et d'un Goto pas très beau. Nous pouvons
aussi imbriquer des conditions de condition de condition avec des "Else". Mais c'est encore
bien moins lisible à mon goût.
Alors concrètement, à quoi vont servir les conditions ?
C'est le nerf de la programmation, sans condition, pas de déviation de programme. Les tests de
condition vont donc servir par exemple à tester, dans un jeu, si le nombre de vies de votre héros
n'est pas à 0 pour enclencher la fin de la partie par exemple. Ou à tester si la position du héros
n'est pas sur une case piège. Ou je ne sais pas quoi d'autre encore.
Soutenez le travail de l'auteur
|
|
|