Formation I.S.N.

Opérations booléennes

Introduction

BO : Opérations booléennes (programme 2011)

Savoirs Capacités Observations
Opérations booléennes Présentation des opérations booléennes de base (et, ou, non,ou-exclusif). Exprimer des opérations logiques simples par combinaison d'opérateurs de base. On découvre les opérations logiques de base à l'aide d'exercices simples et on met en évidence ces opérations dans les mécanismes de recherche. En parallèle avec les séances d'algorithmique, on peut expliquer le principe d'addition de deux octets.

L'algèbre de Boole

L'algèbre de Boole, ou calcul booléen : opérations et fonctions sur les variables logiques.

  • Il faut au moins deux symboles.Inventée par George Boole (1815-1864), un mathématicien britannique.
  • \(B\) l'ensemble constitué de deux valeurs de vérité {FAUX, VRAI}.
  • Les fonctions booléennes associent un booléen, 0 ou 1, à un ou plusieurs booléens.
  • En Python: deux valeurs de type booléen : False et True.

Principales fonctions

La fonction non (not)

Définition
\(non (x)\) est VRAI si et seulement si \(x\) est FAUX.

Table : \(non(x)\)

\(x\) \(non(x)\)
0 1
1 0

Avec Python


		
		

Exemple
Avec le programme suivant, quel sera l'affichage final ?


		
		

La fonction et (and)

Définition
\(x \text{ } et \text{ }y \) est VRAI si et seulement si \(x \) est VRAI et \(y \) est VRAI.

Table : \(et(x;y)\)

\(x\) \(y\) \(et(x;y)\)
0 0 0
0 1 0
1 0 0
1 1 1

Avec Python


		
		

Exemple
Avec le programme suivant, quel sera l'affichage final ?


		
		

La fonction ou (or)

Définition
\(x \text{ } ou \text{ }y \) est VRAI si et seulement si au moins \(x \) est VRAI ou \(y \) est VRAI.

Table : \(ou(x;y)\)

\(x\) \(y\) \(et(x;y)\)
0 0 0
0 1 1
1 0 1
1 1 1

Avec Python


		
		

Exemple
Avec le programme suivant, quel sera l'affichage final ?


		
		

Règles de priorité

  • Les opérateurs booléens peuvent s’enchaîner.
  • De la même façon que les opérateurs arithmétiques / et * sont évalués avant + ou - , il y a un ordre de priorité pour les opérateurs booléens.
  • Voici l'ordre :
    • not est évalué en premier.
    • and est évalué en deuxième.
    • or est évalué en dernier.
  • Il est possible de changer cet ordre en ajoutant des parenthèses ().

Exercices

  • Enoncés
  • Solutions
Pour les exercices 1,2,3 et 4, donner l'affichage final.

1.

A = not True
B = not 3**4 < 4**3
C = not 10 % 3 <= 10 % 2
D = not 3**2 + 4**2 != 5**2
E = not not False

print(A,B,C,D,E)
	

2.

A =  False and False
B = -(-(-(-2))) == -2 and 4 >= 16**0.5
C = 19 % 4 != 300 / 10 / 10 and False
D = -(1**2) < 2**0 and 10 % 10 <= 20 - 10 * 2
E = True and True
print(A,B,C,D,E)
	

3.

A =  2**3 == 108%100 or 'Bonjour' == 'Salut'
B = True or False
C = 100**0.5 >= 50 or False
D = True or True
E = 1**100 == 100**1 or 3 * 2 * 1 != 3 + 2 + 1
F = -(1**2) < 2**0 and 10 % 10 <= 20 - 10 * 2
print(A,B,C,D,E)
	

4.

A = False or not True and True
B = False and not True or True
C = True and not (False or False)
D = not not True or False and not True
E = False or not (True and True)
print(A,B,C,D,E)
	

5.

Montrer que:

  • non(x et y) = non(x) ou non(y)
  • non(x ou y) = non(x) et non(y)

D’une manière générale, on peut montrer que toutes les fonctions booléennes peuvent s’exprimer avec les fonctions ou et et.

6. (Source : France IOI)

On place un jeton sur une table, à l'exception des frontières entre les différentes zones
On vous donne les coordonnées de chaque jeton... Votre programme doit indiquer la couleur de la zone où a été placée ce jeton.*
Écrivez votre programme de telle sorte qu'il y ait au maximum une instruction "si" par possibilité de texte affiché.
La zone de la table va de x = 0 à x = 90, et de aussi de y = 0 à y*= 70.

zones de couleurs


1.
False True True True False

2.
False False False True True

3.
True True False True False

4.
False True True True False

5.

\(x\) \(y\) \(x\space et\space y\) \(non( x\space et\space y)\)
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0


\(x\) \(y\) \(non(x)\) \(non(x)\) \(non(x)\space ou\space non(y)\)
0 0 1 1 1
0 1 1 0 1
1 0 0 1 1
1 1 0 0 0

6.

nbJetons = int(input())

for loop in range(nbJetons):
    x = int(input())
    y = int(input())
    
    if not(0 <= x <= 90) or not(0 <= y <= 70):
        print("En dehors de la feuille")
    elif (y > 60) and ((15 < x < 45) or (60 < x < 85)):
        print("Dans une zone rouge")
    elif (10 < x < 85) and (10 < y < 55) and not((25 < x < 50) and (20 < y < 45)):
        print("Dans une zone bleue")
    else:
        print("Dans une zone jaune")
	


Complément : La fonction \(mux(x,y,z)\)

  • Définition
  • Code Python
  • Solution

On définit la fonction multiplexeur, notée mux, de \(B^3\) dans \(B\) par : \(mux(x,y,z) = (non(x)\text{ } et \text{ } y)\text{ } ou\text{ } (x\text{ } et\text{ } z)\)
Compléter la table suivante.

Table : \(mux(x;y;z)\)

\(x\) \(y\) \(z\) \(non(x)\) \(non(x) \text{ } et \text{ } y\) \(x \text{ } et \text{ } z\) \(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


		
		

Si \(x\) vaut 0, alors \(mux(x,y,z)\) vaut \(y\), et si \(x\) vaut 1, alors \(mux(x,y,z)\) vaut \(z\).
Table : \(mux(x;y;z)\)

\(x\) \(y\) \(z\) \(non(x)\) \(non(x) \text{ } et \text{ } y\) \(x \text{ } et \text{ } z\) \(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