Search this site
Embedded Files
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
  • More
    • Accueil
    • BBC BASIC
    • BBC OS
    • BBC MODULES
    • RUBRIQUES
    • LIENS

⇨ MENU ⇨ BBC BASIC

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

vos remarques, vos commentaires et de vos suggestions.

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.

Google Sites
Report abuse
Page details
Page updated
Google Sites
Report abuse