Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
boole_et_morgan [2015/07/19 22:34] winjerome [Distributivité] |
boole_et_morgan [2016/07/05 18:53] (Version actuelle) gbdivers |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ^ [[nombres_reels|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[virgule_fixe|Chapitre suivant]] ^ | + | ^ [[string|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[complex|Chapitre suivant]] ^ |
- | ====== L'algèbre de Boole ====== | + | ====== [Aller plus loin] L'algèbre de Boole ====== |
Vous avez vu dans les chapitres précédents comment utiliser les booléens et les opérations de base : ET, OU, NON et OU-EXCLUSIF. En fait, l'utilisation des booléens est plus riche et complexe que cela. Ils sont à la base d'une branche des mathématiques, appelée [[https://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_(logique)|Algèbre de Boole]], en l'honneur de son créateur, le mathématicien George Boole. | Vous avez vu dans les chapitres précédents comment utiliser les booléens et les opérations de base : ET, OU, NON et OU-EXCLUSIF. En fait, l'utilisation des booléens est plus riche et complexe que cela. Ils sont à la base d'une branche des mathématiques, appelée [[https://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_(logique)|Algèbre de Boole]], en l'honneur de son créateur, le mathématicien George Boole. | ||
Ligne 36: | Ligne 36: | ||
* NON-ET (//NAND//) correspond à ''!(a && b)'' ; | * NON-ET (//NAND//) correspond à ''!(a && b)'' ; | ||
* OU-Exclusif (//XOR//) correspond à ''(a && !b) || (!a && b)'' ; | * OU-Exclusif (//XOR//) correspond à ''(a && !b) || (!a && b)'' ; | ||
- | * NON-OU-Exclusif (//XNOR//) correspond à ''!((a && !b) || (!a && b))''. | + | * NON-OU-Exclusif (//XNOR//) correspond à ''!( (a && !b) || (!a && b) )''. |
Ces opérateurs n'ont pas d'équivalent direct en C++, mais il est facile de les écrire en utilisant les opérateurs de base du C++. | Ces opérateurs n'ont pas d'équivalent direct en C++, mais il est facile de les écrire en utilisant les opérateurs de base du C++. | ||
Ligne 123: | Ligne 123: | ||
==== Idempotence ==== | ==== Idempotence ==== | ||
- | La première notion est relativement simple : appliquer un opérateur en utilisant deux fois la même valeur est équivalent à utiliser directement la variable. Si on regarde le tableau de vérité précédent, on peut remarquer que lorsque ''a'' et ''b'' sont égaux, alors le résultat des opérations logiques aura la même valeur : | + | La première notion est relativement simple : appliquer un opérateur en utilisant deux fois la même valeur est équivalent à utiliser directement la variable. Si on regarde la table de vérité précédente, on peut remarquer que lorsque ''a'' et ''b'' sont égaux, alors le résultat des opérations logiques aura la même valeur : |
| ''a'' | ''b'' | ''a && b'' | ''a || b'' | | | ''a'' | ''b'' | ''a && b'' | ''a || b'' | | ||
Ligne 146: | Ligne 146: | ||
^ 1 ^ 1 ^ 1 ^ | ^ 1 ^ 1 ^ 1 ^ | ||
- | Pour l'opérateur OU, ça sera la valeur ''false'' qui est l'élément neutre : | + | Pour l'opérateur OU, ça sera faux qui est l'élément neutre : |
| ''a'' | ''b'' | ''a || b'' | | | ''a'' | ''b'' | ''a || b'' | | ||
Ligne 184: | Ligne 184: | ||
$$ \text{A} ~ \text{OU} ~ \text{Vrai} ~ = ~ \text{Vrai} $$ | $$ \text{A} ~ \text{OU} ~ \text{Vrai} ~ = ~ \text{Vrai} $$ | ||
- | Cette propriété est particulièrement intéressante en C++, puisque cela permet de ne pas évaluer une expression, si possible. Comme expliqué dans le chapitre [[logique_et_calcul_booleen]], le C++ utilise la //lazy evaluation// lorsque c'est possible. Pour évaluer les expressions suivantes : | + | Cette propriété est particulièrement intéressante en C++, puisque cela permet de ne pas évaluer une expression, si possible. Comme expliqué dans le chapitre [[logique_et_calcul_booleen]], le C++ utilise la //lazy evaluation// (évaluation paresseuse) lorsque c'est possible. Pour évaluer les expressions suivantes : |
$$ \text{A} ~ \text{ET} ~ \text{Expression complexe} $$ | $$ \text{A} ~ \text{ET} ~ \text{Expression complexe} $$ | ||
Ligne 241: | Ligne 241: | ||
^ ''a'' ^ ''b'' ^ ''c'' ^ ''a && b'' ^ ''(a && b) && c'' ^ ''b && c'' ^ ''a && (b && c)'' ^ | ^ ''a'' ^ ''b'' ^ ''c'' ^ ''a && b'' ^ ''(a && b) && c'' ^ ''b && c'' ^ ''a && (b && c)'' ^ | ||
| 0 | 0 | 0 | ... | ... | ... | ... | | | 0 | 0 | 0 | ... | ... | ... | ... | | ||
+ | | ... | ... | ... | ... | ... | ... | ... | | ||
^ ''a'' ^ ''b'' ^ ''c'' ^ ''a || b'' ^ ''(a || b) || c'' ^ ''b || c'' ^ ''a || (b || c)'' ^ | ^ ''a'' ^ ''b'' ^ ''c'' ^ ''a || b'' ^ ''(a || b) || c'' ^ ''b || c'' ^ ''a || (b || c)'' ^ | ||
| 0 | 0 | 0 | ... | ... | ... | ... | | | 0 | 0 | 0 | ... | ... | ... | ... | | ||
+ | | ... | ... | ... | ... | ... | ... | ... | | ||
==== Distributivité ==== | ==== Distributivité ==== | ||
Ligne 275: | Ligne 277: | ||
^ ''a'' ^ ''b'' ^ ''c'' ^ ''a && b'' ^ ''(a && b) || c'' ^ ''a || c'' ^ ''b || c'' ^ ''(a || c) && (b || c)'' ^ | ^ ''a'' ^ ''b'' ^ ''c'' ^ ''a && b'' ^ ''(a && b) || c'' ^ ''a || c'' ^ ''b || c'' ^ ''(a || c) && (b || c)'' ^ | ||
| 0 | 0 | 0 | ... | ... | ... | ... | ... | | | 0 | 0 | 0 | ... | ... | ... | ... | ... | | ||
+ | | ... | ... | ... | ... | ... | ... | ... | | ||
^ ''a'' ^ ''b'' ^ ''c'' ^ ''a || b'' ^ ''(a || b) && c'' ^ ''a && c'' ^ ''b && c'' ^ ''(a && c) || (b && c)'' ^ | ^ ''a'' ^ ''b'' ^ ''c'' ^ ''a || b'' ^ ''(a || b) && c'' ^ ''a && c'' ^ ''b && c'' ^ ''(a && c) || (b && c)'' ^ | ||
| 0 | 0 | 0 | ... | ... | ... | ... | ... | | | 0 | 0 | 0 | ... | ... | ... | ... | ... | | ||
+ | | ... | ... | ... | ... | ... | ... | ... | | ||
===== Lois de De Morgan ===== | ===== Lois de De Morgan ===== | ||
Ligne 291: | Ligne 295: | ||
===== Exercices ===== | ===== Exercices ===== | ||
- | 1. Ecrire les opérateurs NON-ET, NON-OU, OU-Exclusif et NON-OU-Exclusif avec les opérateurs de base du C++. | ||
- | 2. Ecrire tous les opérateurs en utilisant uniquement l'opérateur NON-ET. | ||
- | 3. Ecrire un additionner à un bit. Un additionner va prendre deux valeurs booléennes et retourne la somme et la retenu de ces valeurs, suivant la table de vérité suivante : | + | * Écrire les opérateurs NON-ET, NON-OU, OU-Exclusif et NON-OU-Exclusif avec les opérateurs de base du C++. |
+ | * Écrire tous les opérateurs en utilisant uniquement l'opérateur NON-ET. | ||
+ | * Écrire un additionneur à un bit. Un additionneur va prendre deux valeurs booléennes et retournera la somme et la retenue de ces valeurs, suivant la table de vérité suivante : | ||
- | ^ a ^ b ^ Somme ^ Retenu ^ | + | ^ a ^ b ^ Somme ^ Retenue ^ |
- | | 0 | 0 | 0 | 0 | | + | | 0 | 0 | 0 | 0 | |
- | | 0 | 1 | 1 | 0 | | + | | 0 | 1 | 1 | 0 | |
- | | 1 | 0 | 1 | 0 | | + | | 1 | 0 | 1 | 0 | |
- | | 1 | 1 | 0 | 1 | | + | | 1 | 1 | 0 | 1 | |
__ faire un schéma __ | __ faire un schéma __ | ||
- | 4. Ecrire un additionner quatre bits. | ||
- | 5. Ecrire un multiplicateur 4x4 bits. | + | * Écrire un additionneur quatre bits. |
+ | * Écrire un multiplicateur 4x4 bits. | ||
+ | * Écrire un multiplexeur. | ||
- | 6. Ecrire un multiplexeur. | + | ^ [[string|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[complex|Chapitre suivant]] ^ |
- | ^ [[nombres_reels|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[virgule_fixe|Chapitre suivant]] ^ | ||
- | |||
- | {{tag> Cours C++}} |