Un ordinateur ne connaît au fond que deux états : le courant passe, ou il ne passe pas. Mais comment, à partir d'un choix aussi pauvre que « oui / non », une machine peut-elle comparer, décider, suivre un chemin plutôt qu'un autre ?
Dès 1847, George Boole imaginait une algèbre fondée sur ces deux seules valeurs. Et si toute la logique d'un programme pouvait s'y ramener ?
Un booléen n'a que deux valeurs possibles : VRAI(True) ou FAUX(False).
Il peut être associé aux nombres 0 et 1.
Dans l'algèbre de Boole, il y a trois opérations fondamentales :
Ce sont des fonctions que l'on appelle "fonction logique".
On peut résumer une fonction logique à l'aide d'une table de vérité.
Il faut énumérer toutes les possibilités d'entrées et regarder les sorties possibles.
À faire dans le cahier.
Compléter les tables de vérité suivantes :
| La fonction "ou" | ||
|---|---|---|
| \(x\) | \(y\) | \(x \text{ or } y\) |
| F | F | |
| F | V | |
| V | F | |
| V | V | |
| La fonction "et" | ||
|---|---|---|
| \(x\) | \(y\) | \(x \text{ and } y\) |
| F | F | |
| F | V | |
| V | F | |
| V | V | |
| La fonction "non" | |
|---|---|
| \(x\) | \( not(x) \) |
| F | |
| V | |
À faire dans le cahier.
Compléter la table de vérité suivante
| \(x\) | \(y\) | \(z\) | \(x \text{ or } y\) | \( not(x \text{ or } y)\) | \( not(x \text{ or } y) \text{ and } z\) |
|---|---|---|---|---|---|
| F | F | F | |||
| F | F | V | |||
| F | V | F | |||
| F | V | V | |||
| V | F | F | |||
| V | F | V | |||
| V | V | F | |||
| V | V | V |
À faire dans le cahier.
Compléter la table de vérité suivante
| \(x\) | \(y\) | \(z\) | \(x \text{ and } y\) | \((x \text{ and } y) \text{ or } z\) | \(not(x) or ((x \text{ and } y) \text{ or } z)\) |
|---|---|---|---|---|---|
| F | F | F | |||
| F | F | V | |||
| F | V | F | |||
| F | V | V | |||
| V | F | F | |||
| V | F | V | |||
| V | V | F | |||
| V | V | V |
À faire dans le cahier.
On considère le programme suivant :
def test_bool(a,b,c):
return not(a) or ((b and c) or a)
Simplifier l'écriture de ce code à l'aide d'une table de vérité.
Écrire ensuite une fonction simplifie qui doit toujours renvoyer le même booléen que test_bool aurait renvoyé pour les mêmes arguments a, b, c.
À faire dans le cahier.
Établir la table de vérité de l'expression (x and not(y)) or (not(x) and y ).
Cette fonction est appelée "xor" ou "ou exclusif".
À faire dans le cahier.
On veut savoir si la distributivité marche avec les booléens.
Soit \(a\), \(b\) et \(c\) des booléens
À faire dans le cahier.
Tu noteras dans ton cahier les questions et les bonnes réponses associées.
Pour chaque expression, indique si elle vaut True ou False.
(3 > 2) or (7 == 9) ?not (3 > 12) ?(3 > 2) and (7 == 9) ?not ( (12 > 3) and (8 == 4 + 4)) ?(5 <= 5) and (10 != 2 * 5) ?not (7 < 3) or (4 >= 4) ?(2 + 3 == 5) and not (6 < 2) ?not( (10 > 1) or (3 == 8) ) ?(4 != 4) or ( (3 < 9) and (2 >= 1) ) ?(7 >= 7) and not(5 > 10) ?not( (2 == 2) and (3 != 3) ) ?(1 < 0) or not(4 <= 4) ?(8 > 3) and (2 < 1 or 5 == 5) ?not( (9 < 2) or (3 >= 1 and 6 == 3 * 2) ) ?(0 == 0) or (1 == 2 and not(3 < 7)) ?not( not(5 > 2) ) ?(4 + 1 > 2 * 3) or (10 / 2 == 5) ?(3**2 == 9) and not(8 % 2 != 0) ?not( (1 != 1) or (2 == 2 and 3 < 1) ) ?(7 > 1) and ( (2 > 9) or not(4 < 2) ) ?