Algorithmique 1 · C1 Notions de base · Chapitre 3 · 20 min
Conditions et booléens
Écrire des tests corrects, enchaîner les cas, combiner avec ET, OU et NON.
Jusqu'ici, nos algorithmes exécutaient toutes leurs lignes, dans l'ordre, à chaque fois. Un algorithme utile doit pouvoir choisir : afficher un message d'erreur seulement si la saisie est invalide, appliquer une réduction seulement aux adhérents.
Une condition vaut VRAI ou FAUX
C'est le point de départ, et il n'admet aucune nuance. note ≥ 10 n'est pas « la note »,
n'est pas « 10 » : c'est une expression qui, une fois évaluée, vaut VRAI ou FAUX.
Rien d'autre. Pas « à peu près vrai », pas « vrai pour la plupart des étudiants ».
Ces expressions ont même un type, le booléen, et on peut les ranger dans une variable :
majeur ← (age ≥ 18)Si majeur Alors Écrire("Accès autorisé")FinSiAttention à ne pas confondre deux symboles qui se ressemblent : ← affecte, = compare.
x ← 5 met 5 dans x ; x = 5 demande si x vaut 5 et répond VRAI ou FAUX. Les langages
qui écrivent les deux avec le signe = (comme C ou JavaScript, avec = et ==) causent
des bugs par milliers pour cette seule raison.
Les opérateurs de comparaison sont =, ≠, <, >, ≤ et ≥. Ils s'appliquent aux
nombres, mais aussi aux chaînes (ordre alphabétique).
Si, Sinon, et l'ordre des cas
Si condition Alors ...instructions si VRAI...Sinon ...instructions si FAUX...FinSiLe Sinon est facultatif. Quand il est là, exactement une des deux branches s'exécute —
jamais les deux, jamais aucune.
Pour plus de deux cas, on enchaîne avec SinonSi. Et là, l'ordre des tests décide de
tout : la cascade s'arrête au premier test vrai et ignore tous les suivants.
Animation · 8 étapes
Attribuer une mention (note = 13)
- Avant l'exécution — Deux casiers : un entier lu en entrée, une chaîne à produire.
- On lit la note : 13 — C'est la seule donnée d'entrée. Tout le reste est un choix.
- Premier test : 13 ≥ 16 ? FAUX — Une condition ne vaut jamais « un peu vrai » : elle vaut VRAI ou FAUX. Ici FAUX, donc on saute le bloc et on descend au SinonSi.
- Deuxième test : 13 ≥ 14 ? FAUX — Toujours pas. La cascade continue vers le test suivant.
- Troisième test : 13 ≥ 10 ? VRAI — Cette fois le test réussit. Remarquez qu'on n'a pas eu besoin d'écrire « note ≥ 10 ET note < 14 » : les tests précédents ont déjà éliminé ces cas.
- mention reçoit "Passable" — Le bloc du premier test VRAI est exécuté, et lui seul.
- On saute directement au FinSi — Le bloc Sinon n'est même pas examiné. Dans une cascade, exactement un bloc s'exécute — jamais deux, jamais zéro s'il y a un Sinon.
- On affiche la mention — 13 donne bien « Passable ».
Deux enseignements dans cette trace. D'abord, à l'étape 5, on n'a pas eu besoin d'écrire
note ≥ 10 ET note < 14 : arriver à ce test signifie déjà que les deux précédents ont
échoué. Une cascade bien ordonnée s'écrit avec des conditions plus simples qu'une série de
Si indépendants. Ensuite, à l'étape 7, le bloc Sinon n'est même pas examiné : on saute
directement au FinSi.
Quiz · 1 question
Avec cette cascade — Si note ≥ 10 Alors « Passable » SinonSi note ≥ 16 Alors « Très bien » — quelle mention obtient un étudiant qui a 18 ?
- Très bien — seuil 16
- Passable — seuil 10
- Les deux, dans l'ordre — deux blocs exécutés
Réponse : 18 ≥ 10 est VRAI, donc le premier bloc s'exécute et la cascade s'arrête là. Le test ≥ 16 n'est jamais atteint : « Très bien » est du code mort. Règle : dans une cascade, du plus exigeant au plus permissif.
ET, OU, NON
Trois opérateurs suffisent à combiner les conditions.
| a | b | a ET b | a OU b | NON a |
|---|---|---|---|---|
| VRAI | VRAI | VRAI | VRAI | FAUX |
| VRAI | FAUX | FAUX | VRAI | FAUX |
| FAUX | VRAI | FAUX | VRAI | VRAI |
| FAUX | FAUX | FAUX | FAUX | VRAI |
ET est exigeant : il faut que tout soit vrai. OU est accueillant : il suffit qu'au
moins une chose le soit — et c'est un « ou » inclusif, contrairement au français courant
où « fromage ou dessert » veut dire l'un ou l'autre mais pas les deux.
Une négation se distribue en inversant l'opérateur. NON(age ≥ 18 ET inscrit) ne signifie
pas age < 18 ET NON inscrit, mais age < 18 OU NON inscrit : il suffit qu'une des deux
conditions tombe pour que l'ensemble tombe. En cas de doute, le plus sûr reste de laisser
le NON devant la parenthèse plutôt que de le distribuer de tête.
Le piège des intervalles
En mathématiques on écrit . En algorithmique, c'est faux :
Si 0 ≤ note ≤ 20 Alors ← à ne pas écrireUn opérateur de comparaison prend deux opérandes et rend un booléen. La machine évalue donc
0 ≤ note, obtient VRAI ou FAUX, puis essaie de comparer ce booléen à 20 — ce qui n'a
aucun sens, et selon le langage produit une erreur ou, pire, un résultat silencieusement
faux. Un intervalle s'écrit toujours avec deux comparaisons complètes reliées par ET :
Si note ≥ 0 ET note ≤ 20 Alors ...FinSiQuiz · 1 question
Comment traduire « x est en dehors de l'intervalle [0 ; 20] » ?
- x < 0 ET x > 20
- x < 0 OU x > 20
- NON(0 ≤ x ≤ 20)
Réponse : Avec ET, il faudrait que x soit à la fois plus petit que 0 et plus grand que 20 : impossible, la condition serait toujours FAUSSE. Être en dehors, c'est être d'un côté OU de l'autre. C'est exactement la négation de « x ≥ 0 ET x ≤ 20 », le ET devenant OU.
Quiz · 1 question
Quelle est la différence entre x ← 5 et x = 5 ?
- Aucune, ce sont deux notations pour la même chose
- La première met 5 dans x ; la seconde demande si x vaut 5 et rend VRAI ou FAUX
- La première teste, la seconde affecte
Réponse : Affecter modifie la mémoire ; comparer ne modifie rien et produit un booléen. Confondre les deux est l'erreur la plus fréquente au passage vers un vrai langage de programmation.
À vous
Exercice de code
Réparez la cascade pour que les quatre mentions soient atteignables.
Point de départ
// Complétez la cascade. L'ordre des tests décide de tout :
// mettez le test le plus permissif en premier et les autres deviennent
// inatteignables.
function mention(note) {
if (note >= 10) return "Passable"; // ← ce test est-il au bon endroit ?
return "Insuffisant";
}
for (const n of [18, 15, 13, 7]) {
console.log(n, "->", mention(n));
}
// attendu : Très bien / Bien / Passable / Insuffisant
Solution
function mention(note) {
// Du plus exigeant au plus permissif : chaque test suppose que les
// précédents ont échoué, ce qui évite d'écrire "note >= 10 ET note < 14".
if (note >= 16) return "Très bien";
if (note >= 14) return "Bien";
if (note >= 10) return "Passable";
return "Insuffisant";
}
for (const n of [18, 15, 13, 7]) {
console.log(n, "->", mention(n));
}
À retenir
Flashcards · 2 cartes
- Dans quel ordre écrire les tests d'une cascade Si / SinonSi ?
- Du plus exigeant au plus permissif. Un test trop permissif placé en premier rend tous les suivants inatteignables.
- Comment écrire « x est entre 0 et 20 inclus » ?
- x ≥ 0 ET x ≤ 20. Jamais 0 ≤ x ≤ 20 : une comparaison ne prend que deux opérandes.