IF
DESCRIPTION.
L'instruction IF exécute une ou plusieurs instructions selon que le résultat d'une expression est vraie ou fausse.
SYNTAXE.
IF expression THEN actiona
IF expression THEN actiona ELSE actionb
IF expression PRINT liste d'affichage
IF expression GOTO ligne
IF expression GOSUB ligne
IF expression END
IF expression THEN
ligneTa
ligneTb
...
ligneTn
ELSE
ligneEa
ligneEb
...
ligneEn
ENDIF
REMARQUES.
expression doit être une suite de termes valides, tels que des valeurs brutes, des constantes, des variables, des opérateurs, des comparateurs, permettant son évaluation logique afin de déterminer sa vérité en retournant une valeur booléenne :
- TRUE, -1, si expression est vraie ;
- FALSE, 0, si expression est fausse.
L'instruction IF permet une prise de décision en fonction des données qui lui sont fournies pour la poursuite du programme.
LES TESTS SIMPLES : SI ... ALORS ... (IF ... THEN ... ).
Si expression est vraie, la ou les instructions suivant la clause THEN sont exécutées, sinon elles sont ignorées.
kpairs = 0
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 THEN kpairs = kpairs + 1
NEXT kvaleur
PRINT "Il y a " ; STR$( kpairs ) ; " chiffres pairs entre 1 et 9."
END
retourne : Il y a 4 chiffres pairs entre 1 et 9.
Dans la plupart des tests conditionnels IF monolignes, l'instruction est THEN est facultatif, sauf dans cas où elle est immédiatement suivi :
- d'un numéro de ligne de destination ;
- d'une pseudo-variable telle que HIMEM, LOMEM, TIME, ... ;
- d'une instruction étoilée telle que *LIST, *QUIT, *DIR, ... ;
- d'un signe égal (=) signalant la sortie d'une fonction.
Si l'action suivant une expression vraie est un simple affichage, l'instruction PRINT peut être employé seule à la place de l'instruction THEN.
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 PRINT STR$( kvaleur ) ; " est un chiffre pair."
NEXT kvaleur
END
retourne :
2 est un chiffre pair.
4 est un chiffre pair.
6 est un chiffre pair.
8 est un chiffre pair.
De même; il est aussi possible d'utiliser les instructions GOTO et GOSUB sans les précéder de l'instruction THEN.
10 INPUT "Entrez un nombre " ; knombre
20 IF knombre MOD 2 = 0 GOSUB 100
50 IF knombre MOD 2 <> 0 GOSUB 200
60 END
100 PRINT knombre ; " est pair." : RETURN
200 PRINT knombre ; " n'est pas pair." : RETURN
Note : les instructions GOTO et GOSUB, ne devraient plus être utilisées dans les scripts modernes. On préférera de nos jours diriger le flux vers des procédures ou fonctions personnalisées.
Si plusieurs instructions doivent être exécutées à la suite d'un test conditionnel IF ... THEN ... il est possible de les séparer par des symboles deux-points (:), mais on préférera les écrire sur plusieurs lignes. Dans ce cas, il faudra utiliser l'instruction ENDIF pour indiquer que la suite d'instructions associées à la clause THEN est terminée. Dans ce cas, l'instruction THEN doit être la dernière inscription sur la ligne, même les commentaires, débutant par une instruction REM sont interdits.
Toutes les lignes d'instructions à exécuter devront être indentées, décalées vers la droite, par rapport à l'instruction IF à la quelle elles se rapportent. Tandis que l'instruction ENDIF doit être alignée sur l'instruction IF dont elle termine le bloc d'instructions.
kpairs = 0
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 THEN
kpairs = kpairs + 1
kvaleur$ = STR$( kvaleur )
PRINT kvaleur$ ; " est un chiffre pair."
ENDIF
NEXT kvaleur
PRINT "Il y a " ; STR$( kpairs ) ; " chiffres pairs entre 1 et 9."
END
retourne :
2 est un chiffre pair.
4 est un chiffre pair.
6 est un chiffre pair.
8 est un chiffre pair.
Il y a 4 chiffres pairs entre 1 et 9.
A noter qu'il est tout a fait possible de réaliser un test conditionnel IF à l'intérieur d'un bloc THEN.
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 THEN
PRINT STR$( kvaleur ) ; " est un chiffre pair."
IF kvaleur = 4 PRINT On est arrivé au chiffre 4."
ENDIF
NEXT kvaleur
END
retourne :
2 est un chiffre pair.
4 est un chiffre pair.
On est arrivé au chiffre 4.
6 est un chiffre pair.
8 est un chiffre pair.
Si la clause THEN contient un test conditionnel IF, la clause THEN de celui peut être aussi exprimé sur plusieurs lignes et être terminé par l'instruction ENDIF
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 THEN
PRINT STR$( kvaleur ) ; " est un chiffre pair."
IF kvaleur = 4 THEN
PRINT "On est arrivé au chiffre 4." ;
PRINT STR$( kvaleur ) ; "qui est le carré de 2."
ENDIF
ENDIF
NEXT kvaleur
END
retourne :
2 est un chiffre pair.
4 est un chiffre pair.
On est arrivé au chiffre 4 qui est le carré de 2.
6 est un chiffre pair.
8 est un chiffre pair.
LES TESTS DOUBLES : SI ... ALORS ... SINON (IF ... THEN ... ELSE ).
L'instruction ELSE permet de d'exécuter une ou plusieurs instructions si expression est fausse. Cependant, l'instruction ELSE ne peut être utilisée que si une clause THEN, PRINT, GOTO ou GOSUB est présente avant elle.
kpairs = 0
kimpairs = 0
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 THEN kpairs = kpairs + 1 ELSE kimpairs = kimpairs + 1
NEXT kvaleur
PRINT "Il y a " ; STR$( kpairs ) ; " chiffres pairs entre 1 et 9."
PRINT "Il y a " ; STR$( kimpairs ) ; " chiffres impairs entre 1 et 9."
END
retourne :
Il y a 4 chiffres pairs entre 1 et 9.
Il y a 5 chiffres impairs entre 1 et 9.
Une instruction ELSE peut, elle aussi, introduire plus d'une instruction a exécuter. Dans ce cas, toutes les lignes d'instructions du bloc ELSE devront être indentées, décalées vers la droite, par rapport à l'instruction ELSE à la quelle elles se rapportent. Tandis que l'instruction ELSE doit être alignée sur l'instruction IF dont elle dépend.
kpairs = 0
kimpairs = 0
FOR kvaleur = 1 TO 9
IF kvaleur MOD 2 = 0 THEN
kpairs = kpairs + 1
PRINT STR$( kvaleur ) ; " est pair, mais " ;
ELSE
kimpairs = kpairs + 1
PRINT STR$( kvaleur ) ; " est impair."
ENDIF
NEXT kvaleur
PRINT "Il y a " ; STR$( kpairs ) ; " chiffres pairs entre 1 et 9."
PRINT "Il y a " ; STR$( kimpairs ) ; " chiffres impairs entre 1 et 9."
END
retourne :
1 est impair.
2 est pair mais 3 est impair.
4 est pair mais 5 est impair.
6 est pair mais 7 est impair.
8 est u pair mais 9 est impair.
Il y a 4 chiffres pairs entre 1 et 9.
Il y a 5 chiffres impairs entre 1 et 9.
Note : Une clause ELSE peut elle aussi contenir un, ou plusieurs tests conditionnels IF, sur une ou plusieurs lignes, et se terminant le cas échéant par une instruction ENDIF.
INPUT "Age de votre enfant " ; kage
IF kage < 6 THEN
PRINT "Vous etes un adorable poupon ..."
IF kage < 3 THEN
PRINT "Bienvenue dans notre garderie."
ELSE
IF kage = 3 PRINT "Vous etes en petite section."
IF kage = 4 PRINT "Vous etes en moyenne section."
IF kage = 5 PRINT "Vous etes en grande section."
ENDIF
ELSE
IF kage > 5 AND kage < 12 PRINT "Vous devait vous inscrire en primaire."
IF kage > 11 AND kage < 17 PRINT "Vous devait vous inscrire en secondaire."
IF kage > 16 AND kage < 20 PRINT "Vous devait vous inscrire au CEGEP."
IF kage > 19 PRINT "Votre cas n'est pas retenu pour cette institution."
ENDIF
LES TESTS MULTIPLES : SI ... SINON SI (IF ... THEN ... ELSE ... ELSE IF ).
Si on souhaite tester plusieurs cas, testant différentes valeur de la même variables ou de plusieurs variables, comme dans l'exemple ci-dessus, on pourra associer un nouveau test conditionnel IF après une clause ELSE, L'avantage de cette technique, c'est que si l'une des condition est vraie, toutes les suivantes seront alors ignorée, et le programme se poursuivra à l'instruction suivant le ENDIF adéquat.
INPUT "Age de votre enfant " ; kage
IF kage < 6 THEN
PRINT "Vous etes un adorable poupon ..."
IF kage < 3 THEN
PRINT "Bienvenue dans notre garderie."
ELSE IF kage = 3 THEN
PRINT "Vous etes en petite section."
ELSE IF kage = 4 THEN
PRINT "Vous etes en moyenne section."
ELSE
PRINT "Vous etes en grande section."
ENDIF
ENDIF
ENDIF
ELSE PRINT "Votre cas n'est pas retenu pour cette institution."
ENDIF
Dans la plupart des cas, l'utilisation d'un bloc selon que , introduit par l'instruction composée CASE ... OF, sera mieux adapté, lisible et efficace que l'imbrication de multiples tests IF et ELSE IF.
Voir l'instruction CASE ... OF pour plus de détails sur tests conditionnels selon que de valeur.
Note : pour une plus grande rétrocompatibilité, l'instruction THEN suivant une clause ELSE IF peut être immédiatement suivi d'un point-virgule (;), mais cette ne devrait plus être présente dans de nouveaux programmes.
RUBRIQUE.
Les opérateurs logiques pour plus de détails sur les tables de vérité et les expression logiques.
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
avec un exemple de résolution à télécharger pour vous inspirer.