22 - Booléens et logique
Exercice 1 : QCM – vérification des prérequis
Pour chaque question, une seule réponse est correcte.
1. Quelle est la valeur de True and False ?
- A.
True - B.
False - C.
None - D. Erreur
Correction
Réponse : B. L’opérateur and (ET) ne renvoie True que si les deux opérandes sont vrais. Ici, l’un est faux, donc le résultat est False.
- A est faux : il faudrait que les deux soient
True. - C est faux :
andrenvoie toujours un booléen quand les opérandes sont des booléens. - D est faux : l’expression est parfaitement valide.
2. Quelle est la table de vérité de l’opérateur OU ?
- A. OU ne vaut
Trueque si les deux entrées sontTrue - B. OU ne vaut
Trueque si une seule des deux entrées estTrue - C. OU vaut
Truedès qu’au moins une des deux entrées estTrue - D. OU vaut
Trueuniquement si les deux entrées sont différentes
Correction
Réponse : C. Le OU logique (inclusif) vaut True si au moins un des opérandes est vrai, y compris si les deux le sont.
- A est faux : c’est la définition du ET, pas du OU.
- B est faux : c’est la définition du OU exclusif (XOR), pas du OU inclusif.
- D est faux : c’est aussi la définition du XOR.
3. Que vaut not(True or False) ?
- A.
True - B.
False - C.
not True - D. Erreur
Correction
Réponse : B. D’abord, True or False vaut True (OU : au moins un vrai). Puis not True vaut False.
- A est faux : erreur d’application du NON (inversion du résultat).
- C est faux :
not Trueest évalué et donneFalse, pas une expression non évaluée. - D est faux : l’expression est valide.
4. En Python, le ET logique est noté :
- A.
&& - B.
AND - C.
and - D.
&
Correction
Réponse : C. En Python, les opérateurs logiques s’écrivent en minuscules : and, or, not.
- A est faux :
&&est la syntaxe du C, Java et JavaScript, pas de Python. - B est faux : Python est sensible à la casse ;
ANDn’est pas reconnu. - D est faux :
&est l’opérateur ET bit à bit, pas l’opérateur logique.
Exercice 2 : exemple travaillé – dresser une table de vérité
Objectif : construire la table de vérité de l’expression $\overline{x} \text{ ou } y$ (en Python : not x or y).
Méthode : on crée une colonne pour chaque sous-expression, en évaluant de gauche à droite selon la priorité (NON avant ET avant OU).
Étape 1. Lister toutes les combinaisons possibles de $x$ et $y$ (avec deux variables, il y a $2^2 = 4$ lignes).
Étape 2. Calculer $\overline{x}$ (NON $x$) pour chaque ligne.
Étape 3. Calculer $\overline{x} \text{ ou } y$ en appliquant le OU entre la colonne $\overline{x}$ et la colonne $y$.
| $x$ | $y$ | $\overline{x}$ | $\overline{x} \text{ ou } y$ |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 |
Vérification avec Python :
for x in [False, True]:
for y in [False, True]:
print(f"x={int(x)}, y={int(y)} → {int(not x or y)}")
Observation : cette expression est fausse uniquement quand $x = 1$ et $y = 0$. Elle correspond à l’implication logique ($x \Rightarrow y$).
Exercice 3 : tables de vérité guidées
3.1 Tables de base
Compléter les tables de vérité des opérateurs NON ET (NAND) et OU exclusif (XOR).
NAND : $\overline{x \text{ et } y}$
| $x$ | $y$ | $x \text{ et } y$ | NAND |
|---|---|---|---|
| 0 | 0 | … | … |
| 0 | 1 | … | … |
| 1 | 0 | … | … |
| 1 | 1 | … | … |
XOR : vrai si exactement un des deux est vrai
| $x$ | $y$ | XOR |
|---|---|---|
| 0 | 0 | … |
| 0 | 1 | … |
| 1 | 0 | … |
| 1 | 1 | … |
Correction
NAND :
| $x$ | $y$ | $x \text{ et } y$ | NAND |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
Le NAND est l’inverse du ET : il vaut 0 uniquement quand les deux entrées valent 1.
XOR :
| $x$ | $y$ | XOR |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Le XOR vaut 1 quand les entrées sont différentes.
3.2 Expression composée
Construire la table de vérité de $(x \text{ et } \overline{y}) \text{ ou } (\overline{x} \text{ et } y)$ en suivant la méthode de l’exemple travaillé (une colonne par sous-expression).
| $x$ | $y$ | $\overline{x}$ | $\overline{y}$ | $x \text{ et } \overline{y}$ | $\overline{x} \text{ et } y$ | Résultat |
|---|---|---|---|---|---|---|
| 0 | 0 | … | … | … | … | … |
| 0 | 1 | … | … | … | … | … |
| 1 | 0 | … | … | … | … | … |
| 1 | 1 | … | … | … | … | … |
Comparer la dernière colonne avec la table du XOR (exercice 3.1). Que constate-t-on ?
Correction
| $x$ | $y$ | $\overline{x}$ | $\overline{y}$ | $x \text{ et } \overline{y}$ | $\overline{x} \text{ et } y$ | Résultat |
|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 |
La dernière colonne est identique à celle du XOR. On a donc montré que :
$$\text{XOR}(x, y) = (x \text{ et } \overline{y}) \text{ ou } (\overline{x} \text{ et } y)$$
Interprétation : le XOR vaut 1 quand exactement l’une des deux entrées vaut 1. C’est bien le cas : soit $x = 1$ et $y = 0$, soit $x = 0$ et $y = 1$.
Exercice 4 : lois de De Morgan
Les lois de De Morgan sont deux identités fondamentales :
$$\overline{x \text{ ou } y} = \overline{x} \text{ et } \overline{y}$$ $$\overline{x \text{ et } y} = \overline{x} \text{ ou } \overline{y}$$
- Démontrer la seconde loi à l’aide d’une table de vérité.
- Vérifier les deux lois en Python pour toutes les combinaisons de
xety.
Correction
1. Table de vérité de $\overline{x \text{ et } y}$ et $\overline{x} \text{ ou } \overline{y}$ :
| $x$ | $y$ | $x \text{ et } y$ | $\overline{x \text{ et } y}$ | $\overline{x}$ | $\overline{y}$ | $\overline{x} \text{ ou } \overline{y}$ |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 |
Les colonnes 4 et 7 sont identiques : la loi est vérifiée.
2. Programme Python :
for x in [False, True]:
for y in [False, True]:
# Première loi
assert not(x or y) == (not x and not y)
# Seconde loi
assert not(x and y) == (not x or not y)
print("Les deux lois de De Morgan sont vérifiées.")
Exercice 5 : logique et vie courante
5.1 Système d’alarme (sécurité)
Un système de sécurité déclenche l’alarme si la porte et la fenêtre sont ouvertes, ou si le détecteur de mouvement est activé. On note $P$ (porte ouverte), $F$ (fenêtre ouverte), $M$ (mouvement détecté) et $A$ (alarme).
- Écrire l’expression booléenne de $A$ en fonction de $P$, $F$ et $M$.
- Dresser la table de vérité (huit lignes).
- Dans quels cas l’alarme ne se déclenche-t-elle pas ?
Correction
$A = (P \text{ et } F) \text{ ou } M$
Table de vérité :
| $P$ | $F$ | $M$ | $P \text{ et } F$ | $A$ |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 |
- L’alarme ne se déclenche pas dans trois cas : quand il n’y a aucun mouvement et que la porte ou la fenêtre (ou les deux) sont fermées.
5.2 Conditions d’accès à un manège (loisirs)
Un manège autorise l’accès si l’enfant a au moins 10 ans ou mesure au moins 140 cm. De plus, un accompagnateur adulte est requis si l’enfant a moins de 12 ans. On note $G$ (âge ≥ 10), $T$ (taille ≥ 140), $J$ (âge < 12).
- Écrire l’expression booléenne de l’accès autorisé : $A = G \text{ ou } T$.
- Écrire l’expression de l’accompagnateur requis : $C = A \text{ et } J$.
- Un enfant de 11 ans mesurant 135 cm peut-il monter ? Un accompagnateur est-il nécessaire ?
Correction
- $A = G \text{ ou } T$.
- $C = A \text{ et } J$ (accompagnateur nécessaire si accès autorisé mais moins de 12 ans).
- L’enfant a 11 ans : $G = \text{Vrai}$ (11 ≥ 10). Il mesure 135 cm : $T = \text{Faux}$ (135 < 140). Accès : $A = \text{Vrai ou Faux} = \text{Vrai}$. Il a 11 ans < 12 : $J = \text{Vrai}$. Accompagnateur : $C = \text{Vrai et Vrai} = \text{Vrai}$. L’enfant peut monter, mais avec un accompagnateur.
5.3 Simplification de conditions en Python (programmation)
Les lois de la logique permettent de simplifier des conditions complexes dans un programme. Pour chacune des conditions suivantes, écrire une condition équivalente simplifiée, puis vérifier en Python que les deux formes donnent le même résultat pour toutes les combinaisons de valeurs.
not(age >= 18 and solde >= 0)not(note < 10 or absent)not(not inscrit or not majeur)
Correction
1. Par De Morgan : not(A and B) = not A or not B.
# Version originale
not(age >= 18 and solde >= 0)
# Version simplifiée
age < 18 or solde < 0
2. Par De Morgan : not(A or B) = not A and not B.
# Version originale
not(note < 10 or absent)
# Version simplifiée
note >= 10 and not absent
3. Par double négation et De Morgan : not(not A or not B) = A and B.
# Version originale
not(not inscrit or not majeur)
# Version simplifiée
inscrit and majeur
Vérification automatique :
for inscrit in [False, True]:
for majeur in [False, True]:
v1 = not(not inscrit or not majeur)
v2 = inscrit and majeur
assert v1 == v2
print("Toutes les simplifications sont vérifiées.")
Conseil : en NSI, on préfère toujours la forme la plus simple et la plus lisible. Les lois de De Morgan et la double négation sont les outils les plus utiles pour simplifier les conditions.
Exercice 6 : multiplexeur et porte logique
6.1 Multiplexeur
On définit $\text{mux}(x,y,z) = (\overline{x} \text{ et } y) \text{ ou } (x \text{ et } z)$.
Compléter la table de vérité :
| $x$ | $y$ | $z$ | $\overline{x}$ | $\overline{x} \text{ et } y$ | $x \text{ et } z$ | $\text{mux}(x,y,z)$ |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | ||||
| 0 | 0 | 1 | ||||
| 0 | 1 | 0 | ||||
| 0 | 1 | 1 | ||||
| 1 | 0 | 0 | ||||
| 1 | 0 | 1 | ||||
| 1 | 1 | 0 | ||||
| 1 | 1 | 1 |
Que fait cette fonction ? (Quel rôle joue $x$ ?)
Correction
| $x$ | $y$ | $z$ | $\overline{x}$ | $\overline{x} \text{ et } y$ | $x \text{ et } z$ | $\text{mux}(x,y,z)$ |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 | 1 |
$x$ joue le rôle de sélecteur : quand $x = 0$, la sortie vaut $y$ ; quand $x = 1$, la sortie vaut $z$. C’est un multiplexeur à deux entrées de données et un bit de sélection.
Exercice 7 : synthèse – simplification et énigme logique
7.1 Simplification avec l’algèbre de Boole
Simplifier les expressions suivantes en utilisant les propriétés de l’algèbre de Boole (absorption, De Morgan, distributivité).
- $A = a + a \cdot b$
- $C = a + \overline{a} \cdot b$
Correction
Absorption : $A = a + a \cdot b = a \cdot (1 + b) = a \cdot 1 = a$. Propriété utilisée : $x + x \cdot y = x$ (un terme « absorbe » le terme qui le contient).
On utilise la distributivité de l’addition sur le produit : $C = a + \overline{a} \cdot b = (a + \overline{a}) \cdot (a + b) = 1 \cdot (a + b) = a + b$.
Vérification par table de vérité : $a + \overline{a} \cdot b$ et $a + b$ ont la même table.
7.2 Énigme logique (raisonnement)
Sur la planète CSI vivent les Profs (qui disent toujours la vérité) et les Élèves (qui mentent toujours). Vous croisez deux personnes A et B. A affirme : « Au moins l’un de nous deux est un élève. »
Déterminer ce que sont A et B.
Correction
Raisonnement par cas :
Cas 1 : A est un élève (menteur). Alors l’affirmation « au moins l’un de nous est un élève » est fausse (puisque A ment). Cela signifierait qu’aucun des deux n’est un élève, donc A serait un prof. Contradiction : A ne peut pas être à la fois élève et prof.
Cas 2 : A est un prof (dit la vérité). L’affirmation est donc vraie : au moins l’un des deux est un élève. Comme A est un prof, c’est nécessairement B qui est l’élève.
Conclusion : A est un prof et B est un élève.
Exercice 8 : table de vérité du XNOR
La fonction XNOR (NON OU exclusif) est définie par $a \odot b = \overline{a \oplus b}$.
- Construire la table de vérité de $a \odot b$ (colonnes $a$, $b$, $a \oplus b$, $a \odot b$).
- À quelle condition a-t-on $a \odot b = 1$ ?
- Montrer que $a \odot b = a \cdot b + \overline{a} \cdot \overline{b}$.
Correction
- Table de vérité :
| $a$ | $b$ | $a \oplus b$ | $a \odot b$ |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
- $a \odot b = 1$ si et seulement si $a$ et $b$ ont la même valeur : le XNOR est un test d’égalité.
- On évalue $a \cdot b + \overline{a} \cdot \overline{b}$ sur les quatre lignes : $0 + 1 = 1$, $0 + 0 = 0$, $0 + 0 = 0$, $1 + 0 = 1$. On retrouve la table du XNOR : « les deux sont vrais ou les deux sont faux ».
Exercice 9 : le théorème du consensus
Le théorème du consensus affirme que $a \cdot b + \overline{a} \cdot c + b \cdot c = a \cdot b + \overline{a} \cdot c$.
- Vérifier cette égalité à l’aide d’une table de vérité à huit lignes (colonnes $a$, $b$, $c$, $a \cdot b$, $\overline{a} \cdot c$, $b \cdot c$, membre de gauche, membre de droite).
- Expliquer sans table pourquoi le terme $b \cdot c$ est redondant.
Correction
- Table de vérité :
| $a$ | $b$ | $c$ | $a \cdot b$ | $\overline{a} \cdot c$ | $b \cdot c$ | gauche | droite |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
Les deux dernières colonnes sont identiques.
- Le terme $b \cdot c$ ne vaut 1 que si $b = 1$ et $c = 1$. Dans ce cas, soit $a = 1$ et alors $a \cdot b = 1$, soit $a = 0$ et alors $\overline{a} \cdot c = 1$ : l’un des deux autres termes est déjà vrai. Le terme $b \cdot c$ n’apporte donc rien et peut être supprimé.
Exercice 10 : profs et élèves
Sur la planète CSI vivent des Profs, qui disent toujours la vérité, et des Élèves, qui mentent toujours. Vous croisez deux habitants A et B. A affirme : « Au moins l’un de nous deux est un élève. »
- On note $a$ le booléen qui vaut 1 si A est un Prof et 0 si A est un Élève, et de même $b$ pour B. Écrire l’expression logique de l’affirmation de A.
- Si A est un Prof, son affirmation est vraie : qu’en déduire sur B ?
- Si A est un Élève, son affirmation est fausse : que se passe-t-il ?
- Conclure : que sont A et B ?
Correction
- « Au moins l’un de nous deux est un élève » s’écrit $\overline{a} + \overline{b}$ (être élève, c’est $\overline{a} = 1$ ; « au moins l’un » est un OU).
- Si $a = 1$, l’affirmation vaut $0 + \overline{b} = \overline{b}$ ; elle est vraie si et seulement si $b = 0$. Donc si A est un Prof, B est un Élève.
- Si $a = 0$, l’affirmation vaut $1 + \overline{b} = 1$ : elle est toujours vraie. Or un Élève ment : son affirmation devrait être fausse. Contradiction : A ne peut pas être un Élève.
- A est un Prof et B est un Élève.
Exercice 11 : conditions d’accès
Un système de sécurité autorise l’accès si l’utilisateur a un badge valide et entre un code correct, ou s’il est administrateur (quels que soient le badge et le code). On note $B$ « badge valide », $C$ « code correct » et $A$ « administrateur ».
- Écrire l’expression logique de la condition d’accès.
- Construire sa table de vérité (huit lignes).
- Peut-on simplifier l’expression ? Que signifie la propriété d’absorption $A + A \cdot X = A$ pour ce système ?
Correction
- $\text{Accès} = B \cdot C + A$.
- Table de vérité :
| $A$ | $B$ | $C$ | Accès |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
- L’expression est déjà minimale. L’absorption dit qu’ajouter une condition « administrateur avec badge » ($A \cdot B$) ne changerait rien : dès que $A = 1$, l’accès est accordé, le reste est absorbé.
Exercice 12 : comparateur 1 bit
On souhaite concevoir un circuit qui compare deux bits $a$ et $b$ et produit trois sorties : $S$ vaut 1 si $a > b$, $E$ vaut 1 si $a = b$, $I$ vaut 1 si $a < b$.
- Compléter la table de vérité (colonnes $a$, $b$, $S$, $E$, $I$).
- Donner l’expression booléenne de chacune des sorties.
- Quelle relation lie $S$, $E$ et $I$ ?
Correction
- Table de vérité :
| $a$ | $b$ | $S$ | $E$ | $I$ |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 |
- $S = a \cdot \overline{b}$ ; $E = a \cdot b + \overline{a} \cdot \overline{b} = \overline{a \oplus b}$ (XNOR) ; $I = \overline{a} \cdot b$.
- À tout instant, exactement une des trois sorties vaut 1 : $S + E + I = 1$ et $S \cdot E = E \cdot I = S \cdot I = 0$. On a aussi $S + I = a \oplus b$.