Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Les fonctions conditionnelles en Basic Casio

II - Les conditions

Jusqu'à maintenant, nous avons vu comment écrire un programme simple dans lequel la calculatrice exécute les instructions ligne par ligne. Cependant, votre programme devra souvent prendre en compte des situations particulières. Par exemple, revenons à notre personnage. Pendant un combat, il subit un coup mortel, sa vie tombe à 0 et le combat prend fin. Ainsi, une condition va dire « si l'un des combattant n'a plus de vie (Vie = 0) », alors le combat s'arrête. Dans cette partie, je vous apprendrai à gérer ces situations.

Si vous avez quelques notions en anglais, vous partez avec un petit atout. En effet, les fonctions sont écrites en anglais. Si vous ne maitrisez pas cette langue, n'ayez aucune inquiétude : au lycée, j'ai fait de l'allemand et de l'italien, et cela ne m'a pas empêché de programmer :p (la preuve puisque j'écris ce tutoriel) !

Les fonctions conditionelles

Pour commencer en douceur, utilisons la fonction If (en français, « si »). Vous la trouvez dans le menu (PRGM) en faisant, pour rappel, [SHIFT] + [VARS], puis [F1] (COM). Les symboles = ? < > ≤ ≥ sont aussi dans le menu (PRGM) dans l'onglet (REL).

La condition If

Créez un nouveau programme et entrez le code ci-dessous :

"QUEL EST TON AGE"?→A
If A≥18
Then "TU ES MAJEUR"
IfEnd
If A<18
Then "TU ES MINEUR"
IfEnd

Traduction en français :

Si A est supérieure ou égale à 18,
Alors la calculatrice affiche « TU ES MAJEUR »
(fin du Si).
Si A est strictement inférieure à 18,
Alors elle affiche « TU ES MINEUR »
(fin du Si).

Vous remarquerez que If est toujours suivi de Then et terminé par IfEnd. Je vous conseille d'abord d'écrire If-Then-IfEnd puis le reste du code. En effet, quand le programme fera plusieurs dizaines voire centaines de lignes, vous n'aurez aucune envie de perdre du temps à chercher l'endroit où placer le IfEnd, et vous êtes donc certain de ne pas l'oublier.

Sachez aussi que vous n'êtes pas limité à une seule instruction dans un If, vous pouvez mettre autant de calculs et d'instructions que nécessaire ! Le plus important est que la condition If (« si ») soit accompagnée du Then (« alors ») et délimitée par un IfEnd (« fin du si »).

La condition Else

Optimisons notre précédent code avec la fonction Else (« sinon »). En effet, si on n'est pas majeur, alors on est forcément mineur. Au lieu de mettre deux If, on les regroupe en une seule condition : c'est plus lisible, rapide et léger.

"QUEL EST TON AGE"?→A
If A≥18
Then "TU ES MAJEUR"
Else "TU ES MINEUR"
IfEnd

Même principe, si A est supérieure ou égale à 18, alors elle affiche « TU ES MAJEUR », sinon elle affiche « TU ES MINEUR ».

Bien sûr, on peut ajouter à l'intérieur d'une condition, une autre condition :

"QUEL EST TON AGE"?→A
If A≥18
Then "TU ES ADULTE"
Else If A≥13
Then "TU ES ADO"
Else "TU ES ENFANT"
IfEnd

Un autre exemple...

"QUEL EST TON AGE"?→A
"TU ES (1=GARCON, 2=FILLE)"?→B
If A≥18
Then If B=1
Then "TU ES UN GARCON MAJEUR"
Else "TU ES UNE FILLE MAJEURE"
IfEnd
Else If B=1
Then "TU ES UN GARCON MINEUR"
Else "TU ES UNE FILLE MINEURE"
IfEnd
IfEnd

Retenez bien : un IfEnd ne délimite qu'un seul If. Si votre programme contient 2 If, on doit obligatoirement retrouver 2 Then et 2 IfEnd.


Les boucles conditionnelles

Les boucles ont l'avantage d'exécuter en continu du code tant que la condition est vraie. Vous les trouvez dans le même onglet que les If (PRGM) → (COM) puis faites deux fois [F6]. Il existe deux boucles conditionnelles :

  • La première, While-WhileEnd, vérifie si les conditions sont vraies avant d'exécuter le code qu'elle encadre.
  • La seconde, Do-LpWhile, vérifie la condition à la fin de la boucle, le code encadré est alors exécuté au moins une fois.

Selon les situations, on choisira l'une ou l'autre solution. S'il ne l'est pas encore, le choix devient intuitif après quelques essais, donc aucune inquiétude.

While et WhileEnd

La boucle While-WhileEnd vérifie la condition avant d'exécuter le code. Sa syntaxe est la suivante : While < conditions > [votre code] WhileEnd.

1→A
While A=10
Locate 1,1,A
A+1→A
WhileEnd
A[DISP]

On initialise la variable A à 1 et on l'incrémente de 1 tant que A est inférieure ou égale à 10. A chaque boucle, on affiche la variable A, ainsi vous pouvez voir la boucle en action. Enfin, à la fin du programme, on affiche A et la calculatrice doit affiche 11. Donc 11 > 10, donc n'est A plus ≤ 10, alors la boucle While est fausse.

Do et LpWhile

Une autre variante de While est le couple Do-LpWhile. Ces fonctions se trouvent dans le même onglet que While et WhileEnd. Do-LpWhile fonctionne donc de la même façon, mais vérifie la condition à la fin et exécute donc au moins une fois le code. Voici un exemple pour comprendre :

1→A
Do
Locate 1,1,A
A+1→A
LpWhile A≤10
A[DISP]

« Do » vient de l'anglais « to do » qui veut dire « faire ». C'est logique car on demande à la calculatrice de faire (d'exécuter) au moins une fois le code.

Au risque de me répéter, While vérifie la condition avant d'exécuter le code situé entre la boucle, alors que Do-LpWhile le fait à la fin. Mine de rien, cette différence est utile dans les programmes. Pour l'instant, vous ne la voyez pas, mais en progressant dans ce tutoriel, je vous montrerai divers exemples où l'une est plus pratique que l'autre.

For : la boucle incrémentale

For est une boucle un peu particulière. Grosso modo, elle incrémente une variable jusqu'à une valeur définie. Tapez le code suivant et lancez-le :

For 1→A To 10 Step 1
Locate 1,1,A
Next

Comme précédemment, vous avez vu successivement des nombres de 1 à 10.

Voilà ce que dit le code : on initialise la variable A à 1 (For 1→A) qu'on incrémente de 1 (Step 1) jusqu'à ce que A vaut 10 (To 10). Pendant l'incrémentation, on affiche A. Bien évidemment, Next délimite la fin de la boucle For (comme pour WhileEnd). Par ailleurs, Step accepte les valeurs négatives.

For 10→A To 1 Step -1
Locate 1,1,A
Next

Supposons que je tape For 1→A To 10 Step -1. A ne vaudra jamais 10. Dans ce cas, que se passe-t-il ? La calculatrice s'arrête-t-elle au bout d'un moment ?

Et non, elle ne s'arrête pas. On tombe sur une boucle infinie, puisque comme tu le dis, A ne vaudra jamais 10. Pour être exact, elle s'arrêtera à -10^100 + 1 avec un Math error. Mais avant d'arriver à de telles valeurs, tu auras le temps d'user les piles plusieurs fois.

Pour économiser quelques octets, la valeur par défaut de Step est 1. Donc inutile de le mettre si votre pas (Step) vaut 1.

For 1→A To 10
Locate 1,1,A
Next

Et voilà, nous avons vu toutes les fonctions conditionnelles :

  • If-Then-Else-IfEnd
  • While-WhileEnd
  • Do-LpWhile
  • For To Step-Next


Mettre plusieurs conditions dans une fonction conditionnelle

Jusqu'à maintenant, on a mis qu'une seule condition par fonction (par exemple A≥18). Dans vos futurs programmes, qui seront plus complexes qu'un "Quel est ton âge ?", on se limitera rarement à une condition par fonction. C'est à ce moment-là que les fonctions And (« et »), Or (« ou ») et Not entrent en jeu. Pour les trouver, faites [OPTN] + [F6] + [F6] + [F4] (LOGIC).

And et Or

And vérifie que les deux conditions à droite et à gauche soient vraies. Si l'une des deux fausses, alors l'ensemble est faux. Si vous voulez vérifier plusieurs conditions, il faudra mettre autant de And nécessaires. Même si vous en avez 10 conditions vraies, mais qu'1 seule est fausse, alors l'ensemble des 11 conditions de votre fonction est fausse.

If A≥18 And B=1
Then "TU ES UN GARCON MAJEUR"
IfEnd

Alors que Or vérifie qu'au moins une des conditions soit vraie. Une seule condition vraie suffit à rendre l'ensemble vraie, même si toutes les autres sont fausses.

If A≥18 Or B=1
Then "TU ES MAJEUR, UN GARCON OU LES DEUX A LA FOIS"
IfEnd

Bien évidemment, on peut aussi mélanger les And et les Or. Dans ce cas, les And sont prioritaires sur les Or, au même titre que la multiplication soit prioritaire sur l'addition.

If A≥18 And B=1 Or A≥18 And B=2
Then "QUE TU SOIS UN FILLE OU UN GARCON, TU ES MAJEUR"
IfEnd

Not

Not inverse la valeur d'une condition. Si la condition est vraie, elle devient fausse avec Not. Et inversement, si la condition est fausse, elle devient vraie avec Not.

If Not A≥18
Then "TU ES MINEUR"
IfEnd

Dans l'exemple ci-dessus, le code équivaut à celui-ci :

If A<18
Then "TU ES MINEUR"
IfEnd

L'intérêt de Not est assez limité, sauf dans quelques situation où les conditions sont complexes et Not facilite le travail. Dans l'exemple ci-dessous, Not fait aussi gagner un octet dans une condition :

//Les deux codes produisent le même résultat
If A=0
Then ...
IfEnd

//Not équivaut à =0, mais pèse un octet au lieu de deux
If Not A
Then ...
IfEnd

Xor

Nous avons d'abord vu le « Ou inclusif » (Or). Il existe aussi le « Ou exclusif » (Xor). Alors qu'avec le premier, pour que la fonction conditionnelle soit vraie, il faut qu'au moins une des conditions le soit, Xor n'est vrai que si l'une des conditions est vraie, mais pas les deux à la fois. Par exemple, on dit qu'un objet peut soit être un gâteau ou une tarte, mais il ne peut pas être les deux à la fois. C'est ce qu'on appelle le « Ou exclusif ».

Avec le code ci-dessous, A et B valent tous les deux 1. Le message "Vrai" s'affichera seulement avec Or car les deux conditions ne peuvent être vraies en même temps avec Xor.

1->A
1->B
If A=1 Or B=1
Then "Vrai avec Or"
Else "Faux avec Or"
IfEnd
If A=1 Xor B=1
Then "Vrai avec Xor"
Else "Faux avec Xor"
IfEnd
Différence entre Or et Xor
Résultats différents entre Or (ou inclusif) et Xor (ou exclusif)

Notez que Xor n'existe pas sur les anciennes calculatrices, comme les Graph 35, 65, 80 et 100. On peut néanmoins reproduire son fonctionnement avec And et Or à l'aide de l'exemple ci-dessous :

// Equivalent de Xor avec And et Or
?->A
?->B
If (A=1 And B!=1) Or (A!=1 And B=1)
Then "Vrai avec Xor"
IfEnd

Des quatre opérateurs présentés, And et Or sont les plus utilisés par les programmeurs.

Modifier les règles de priorité

Comme pour tous calculs, les parenthèses sont prioritaires sur les autres opérations, et permettent par exemple d'optimiser les conditions. Regardez bien la dernière condition : If A≥18 And B=1 Or A≥18 And B=2. « A≥18 » se répète deux fois. La condition peut donc être allégée. Le code suivant est strictement identique au précédent :

If A≥18 And (B=1 Or B=2)
Then "QUE TU SOIS UN FILLE OU UN GARCON, TU ES MAJEUR"
IfEnd

Si on supprime les parenthèses, le résultat est différent de celui attendu :

If A≥18 And B=1 Or B=2
Then "TU ES SOIT UN GARCON MAJEUR, SOIT UNE FILLE DE TOUTE AGE"
IfEnd

La calculatrice vérifie d'abord si la condition A≥18 et B=1 est vraie puis si B=2. Or, si la personne est une fille (B=2), qu'elle soit mineure (A<18) ou majeure (A≥18), If est vraie (la priorité s'appliquant d'abord à And). Donc, le fonctionnement du code n'est pas celui attendu. Ne négligez pas les parenthèses, elles sont importantes.

Dans les exemples, on les utilise uniquement avec If. Qu'en est-il avec les While, Do-LpWhile et For ?

En effet, j'utilise des If, mais And et Or fonctionnent aussi avec les autres fonctions conditionnelles : While ou LpWhile. For qui est une fonction particulière et n'accepte pas les opérateurs logiques.

Bon, on s'approche de notre premier vrai programme :) !



<<< Revenir au cours précédent Continuer le cours >>>

Licence Creative Commons
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 France.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 117 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd