ajout séquence fonctions booléennes

This commit is contained in:
2023-07-03 17:54:40 +02:00
parent 02967d029f
commit 1ae2f22c46
9 changed files with 347 additions and 264 deletions

Binary file not shown.

View File

@@ -269,3 +269,10 @@ Exemple : (944)<sub>10</sub> → ( 12234)<sub>5</sub>
![base.png](assets/base.png)
--------
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

View File

@@ -113,3 +113,10 @@ En Python, la taille des entiers est arbitraire (donc non fixe), ainsi les valeu
Néanmoins, on dispose de la bibliothèque _numpy_ qui permet de forcer une représentation sur 8 bits, par exemple, à l'aide de la fonction *int8*
--------
Auteurs : Florian Mathieu - Philippe Boddaert
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

View File

@@ -17,14 +17,14 @@ Maintenant que nous allons tenter de coder les réels, les limites de notre mach
### À Faire
1. effectuez le calcul $`0.2 + 0.1`$ en Python :
Effectuez le calcul $`0.2 + 0.1`$ en Python :
```python
>>> 0.2 + 0.1
???
```
2. testez l'égalité suivante :
Testez l'égalité suivante :
```python
>>> 0.2 + 0.1 == 0.3
@@ -45,7 +45,7 @@ Ainsi, un calcul avec des nombres à virgule ne peut-être qu'__approximatif__.
Il existe deux façons de coder les nombres réels, en virgule fixe ou virgule flottante.
### 3.1. Virgule fixe
### Virgule fixe
Le codage en __virgule fixe__ consiste à garder __un nombre fixe de chiffes après la virgule__.
@@ -63,8 +63,8 @@ Linconvénient de cette méthode est que, pour un nombre avec peu de chiffres
Représenter les valeurs suivants sur 8 bits, en virgule fixe :
1. 7,75
2. 0,1
- 7,75
- 0,1
### Virgule flottante
@@ -103,9 +103,7 @@ Par exemple :
_N.B : Dans le cas de la notation scientifique binaire, le nombre avant la virgule doit être compris entre $`1_2`$ inclus et $`10_2`$ exclus (c'est-à-dire 2 exclus), c'est-à-dire que sa partie entière est nécessairement 1._
#### 3.2.3 Passage de l'écriture décimale à l'écriture binaire pour un nombre flottant
#### Passage de l'écriture décimale à l'écriture binaire pour un nombre flottant
Si vous avez bien suivi, vous savez qu'un nombre est composé de deux parties :
@@ -130,7 +128,7 @@ Exemple :
0,6875 s'écrit donc 0,1011<sub>2</sub>
#### 3.2.4. Principe du codage en virgule flottante
#### Principe du codage en virgule flottante
Un nombre flottant est formé de trois éléments : la mantisse, l'exposant et le signe.
@@ -165,7 +163,7 @@ Le code `1 101 1011` sur un octet utilisant 1 bit de signe, 3 bits pour l'exposa
----------------
## 4. La norme IEEE 754
## La norme IEEE 754
> L'__IEEE 754__ est une norme pour la représentation des nombres à virgule flottante en binaire. Elle est la norme la plus employée actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique.
@@ -179,7 +177,7 @@ Cette norme définit notamment 2 formats pour représenter des nombres à virgul
![](./assets/ieee_754_double.svg)
### 4.1. Valeurs remarquables
### Valeurs remarquables
Chaque norme défini aussi des valeurs spéciales, par exemple en double précision:
@@ -188,7 +186,7 @@ Chaque norme défini aussi des valeurs spéciales, par exemple en double précis
- l'infini positif: +∞ = `0 11111111111 0000000000000000000000000000000000000000000000000000`,
- l'infini négatif: +∞ = `1 11111111111 0000000000000000000000000000000000000000000000000000`
### 4.2. Impossibilité de coder tous les nombres réels
### Impossibilité de coder tous les nombres réels
Voici lécriture binaire en format double précision de deux flottants.
@@ -230,15 +228,15 @@ Le flottant 2.000000238418579 est donc représenté comme le suivant de 2.0.
La précision possible avec une mantisse sur 23 bits se situe au niveau dernier bit qui vaut
$`2^{-23}`$ . On ne peut pas trouver un flottant compris entre les deux.
### 4.3. Conclusion
### Conclusion
Les nombres flottants sont une représentation approximative des nombres réels dans un ordinateur. En particulier, il nest pas possible de représenter de manière exacte en machine tous les nombres réels. La manipulation de nombres réels par un langage informatique est donc à prendre avec précaution car elle peut engendrer des résultats surprenants, en particulier il ne faut jamais tester légalité entre deux flottants.
----------
## 5. Exercices
## Exercices
### 5.1. Exercice
### Exercice
On considère des nombres flottants encodés sur un octet avec dans l'ordre:
@@ -257,7 +255,7 @@ On considère des nombres flottants encodés sur un octet avec dans l'ordre:
- Quel est le plus petit nombre à virgule, donc négatif ?
- Quel est le plus petit nombre à virgule strictement positif que l'on peut représenter ?
### 5.2. Exercice
### Exercice
1. Quelles sont les valeurs attendues des instructions suivantes ?
@@ -300,7 +298,7 @@ On considère des nombres flottants encodés sur un octet avec dans l'ordre:
```
2. Copier et exécuter les instructions précédentes et comparer avec les résultats attendus.
### 5.3. Exercice
### Exercice
On considère le programme suivant:

View File

@@ -1,97 +1,57 @@
# Les tableaux de Karnaugh
## Les tableaux de Karnaugh
------
## Introduction
La réduction, pour une même expression, du nombre d'*opérateur*s ***et / ou*** du nombre de *variables*, conduit à une écriture simplifiée de cette expression.
La simplification d'une expression booléenne consiste à réduire le nombre d'opérateurs et/ou de variables, permettant ainsi d'obtenir une version plus compacte de cette expression.
Il existe un grand nombre de méthodes de simplification d'expression booléenne, parmi lesquelles ont peut distinguer :
Plusieurs méthodes sont disponibles à cet effet, mais l'une des plus efficaces est l'utilisation du tableau de Karnaugh. Voici comment elle fonctionne :
- La simplification par **Tableau de Karnaugh**. On fait cela en quelques étapes :
- On construit un tableau de la fonction à simplifier
- On recherche les cases adjacentes qui ont pour valeur 1
- On regroupe ces cases par puissance de 2, en paquets les plus gros possibles.
- On crée un tableau pour la fonction à simplifier.
- On cherche les cellules adjacentes avec la valeur 1.
- On regroupe ces cellules en blocs de 2^n (n étant un nombre entier), en visant à faire des blocs aussi grands que possible.
Cette méthode s'avère la plus redoutable.
---------
------
## Construction du tableau de Karnaugh
- Tableau à 3 variables:
- En haut, on regroupe deux variables ensemble (A B)
- À gauche, on indique la troisième (C)
- S = sortie
Pour une fonction à 3 variables :
| S | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
| 0 | | | | |
| 1 | | | | |
- On met deux variables en haut du tableau (A et B).
- On place la troisième variable sur le côté gauche (C).
- La sortie (S) est le résultat de la fonction pour chaque combinaison de valeurs des variables.
Pour une fonction à 4 variables :
- Deux variables en haut (A et B)
- Deux variables à gauche (C et D)
- Tableau à 4 variables :
- Deux variables en haut ( A B)
- Deux variables à gauche ( C D)
| U | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
| 00 | | | | |
| 01 | | | | |
| 11 | | | | |
| 10 | | | | |
-----------
------
## Exemples
*Simplification de l'équation logique suivante :*
```math
Considérons la simplification de l'équation logique suivante :
$$
S = \overline a b \overline c \overline d + abcd + a \overline b c d + ab \overline c \overline d
```
| S | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
| 00 | 0 | 1 | 1 | 0 |
| 01 | 0 | 0 | 0 | 0 |
| 11 | 0 | 0 | 1 | 1 |
| 10 | 0 | 0 | 0 | 0 |
- On regroupe les 1 collés en haut : a change d'état et est éliminé. Il reste donc :
```math
b \overline c \overline d
```
- On regroupe les 1 en bas : b change d'état et est éliminé, il reste :
```math
acd
```
On a donc une équation réduite sous forme de polynôme ou canonique en ***OU***
```math
$$
En utilisant le tableau de Karnaugh, on peut regrouper les 1 adjacents. Dans le premier regroupement (en haut du tableau), la variable a change d'état et est donc éliminée. Il reste alors :
$$
b \overline c \overline d
$$
Dans le second regroupement (en bas du tableau), la variable b change d'état et est éliminée. Il reste alors :
$$
acd
$$
L'équation logique simplifiée est donc :
$$
S = acd + b \overline c \overline d
```
$$
------
-------
En utilisant la même méthode, on peut simplifier d'autres équations logiques. Par exemple :
| S | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
@@ -100,13 +60,15 @@ S = acd + b \overline c \overline d
| 11 | 1 | 0 | 0 | 0 |
| 10 | 1 | 0 | 0 | 0 |
```math
Est simplifiée en :
$$
S = \overline a \overline b
```
$$
------
-------
Et de même pour :
| S | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
@@ -115,13 +77,15 @@ S = \overline a \overline b
| 11 | 1 | 0 | 0 | 1 |
| 10 | 1 | 0 | 0 | 1 |
```math
Qui devient :
$$
S = \overline b
```
$$
------
----------
Et encore une fois pour :
| S | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
@@ -130,38 +94,23 @@ S = \overline b
| 11 | 0 | 0 | 0 | 0 |
| 10 | 1 | 0 | 0 | 1 |
```math
Qui devient :
$$
S = \overline b \overline d
```
$$
---------
------
## Exercices
**Simplifier à l'aide du tableau du Karnaugh l'équation logique suivante** :
```math
Essayez de simplifier l'équation logique suivante à l'aide d'un tableau de Karnaugh :
$$
T = \overline a b \overline c \overline d + ab \overline c \overline d + \overline a bc \overline d + abc\overline d + \overline a \overline b c \overline d + a \overline b c \overline d
```
| T | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
| 00 | 0 | 1 | 1 | 0 |
| 01 | 0 | 0 | 0 | 0 |
| 11 | 0 | 0 | 0 | 0 |
| 10 | 1 | 1 | 1 | 1 |
-------------
D'après le tableau de Karnaugh suivant, rechercher l'équation logique réduite :
$$
Puis, en utilisant le tableau de Karnaugh ci-dessous, tentez de trouver l'équation logique réduite correspondante. Astuce : utilisez le théorème de DE MORGAN.
| U | 00 | 01 | 11 | 10 |
| ---- | ---- | ---- | ---- | ---- |
@@ -170,13 +119,16 @@ D'après le tableau de Karnaugh suivant, rechercher l'équation logique réduite
| 11 | 1 | 1 | 0 | 1 |
| 10 | 1 | 1 | 1 | 1 |
Indice : utiliser le théorème de **DE MORGAN**
```math
$$
\overline U = abcd
```
$$
-------------
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

View File

@@ -1,8 +1,14 @@
# Type Booléen en Python
## Introduction
> Le type booléen, ou `bool`, est un type de données en Python qui a deux valeurs possibles : `True` (vrai) ou `False` (faux). Il est généralement utilisé pour effectuer des comparaisons et des opérations logiques.
## Valeur et Type
En Python, les booléens sont `True` et `False`, ils sont du type `bool`
En Python, les booléens sont représentés par `True` et `False`, et sont du type `bool`. Par exemple :
```python
>>> True
@@ -15,11 +21,11 @@ False
<class 'bool'>
```
------
## Comparaison
Les opérateurs de comparaison courants sont identiques à ceux des mathématiques mais ATTENTION, il ne faut pas confondre légalité et laffectation
Python
Les opérateurs de comparaison en Python sont similaires à ceux utilisés en mathématiques. Il est important de ne pas confondre l'opérateur d'affectation (`=`) avec l'opérateur d'égalité (`==`). Par exemple :
```python
>>> variable = 5 # une affectation
@@ -27,22 +33,43 @@ Python
False
```
**Le résultat dune comparaison est toujours un booléen**
**Le résultat d'une comparaison est toujours un booléen.**
------
## Comparaisons des nombres
| Comparaison | Symbole | Exemple | Résultat |
| ----------------- | ------- | ------------- | -------- |
| Égalité | `==` | `1 + 2 == 3` | `True` |
| Différence | `!=` | `1 + 2 != 3` | `False` |
| Supérieur | `>` | `4 > 3` | `True` |
| Inférieur | `<` | `2.2 < 2 * 3` | `True` |
| Supérieur ou égal | `>=` | `5 >= 6` | `False` |
| Inférieur ou égal | `<=` | `8 <= 3` | `False` |
On peut comparer les nombres en utilisant les opérateurs de comparaison suivants :
- Égalité : `==`
- Différence : `!=`
- Supérieur : `>`
- Inférieur : `<`
- Supérieur ou égal : `>=`
- Inférieur ou égal : `<=`
Par exemple :
```python
>>> 1 + 2 == 3
True
>>> 1 + 2 != 3
False
>>> 4 > 3
True
>>> 2.2 < 2 * 3
True
>>> 5 >= 6
False
>>> 8 <= 3
False
```
------
## Appartenance à une structure
On peut tester quun élément appartient à une structure avec le mot clé `in`
On peut utiliser l'opérateur `in` pour vérifier si un élément est présent dans une structure de données. Par exemple :
```python
>>> "a" in "bonjour" # False
@@ -53,31 +80,20 @@ True
False
```
# Opérations sur les booléens
------
Les opérateurs sur les booléens sont de deux types :
## Opérations sur les booléens
- opérateur unaire : prend *un* booléen et en renvoie *un*.
- opérateur binaire : prend *deux* booléens et en renvoie *un*.
## Opérateur unaire : la négation
### La négation: `not`
Cest le seul opérateur *unaire*, il donne le contraire de ce quon lui passe.
Les opérations sur les booléens comprennent la négation (`not`), l'opérateur OU (`or`), l'opérateur ET (`and`) et l'opérateur XOR (`^`). Par exemple :
```python
>>> not True # s'évalue à False
# La négation
>>> not True
False
>>> not False # s'évalue à True
>>> not False
True
```
## Opérateur binaire : le OU, noté `or`
**Il est vrai si lun des deux booléens est vrai.**
```python
# L'opérateur OU
>>> False or False
False
>>> False or True
@@ -86,13 +102,8 @@ True
True
>>> True or True
True
```
## Opérateur binaire : le ET, noté `and`
**Il est vrai si les deux booléens sont vrais.**
```python
# L'opérateur ET
>>> False and False
False
>>> False and True
@@ -101,13 +112,8 @@ False
False
>>> True and True
True
```
## Opérateur binaire : le XOR noté `^`
**Il est vrai si EXACTEMENT un des deux booléens est vrai**
```python
# L'opérateur XOR
>>> False ^ False
False
>>> False ^ True
@@ -118,35 +124,34 @@ True
False
```
------
## Python et les booléens
Python permet de comparer nimporte quoi à un booleen.
Par exemple, une chaîne de caractère vide est évaluée à `False`.`
Python permet d'évaluer n'importe quel type de donnée comme un booléen. Par exemple :
```python
>>> bool(1)
>>> bool(1) # Vrai
True
>>> bool(0)
>>> bool(0) # Faux
False
>>> bool("")
>>> bool("") # Faux
False
>>> bool("abc")
>>> bool("abc") # Vrai
True
>>> bool([])
>>> bool([]) # Faux
False
>>> bool([1, 2])
>>> bool([1, 2]) # Vrai
True
```
- 0 est faux, les autres entiers sont vrais,
- une structure vide est fausse, les autres sont vraies.
En règle générale, zéro, les structures de données vides et `None` sont évalués comme `False`, tandis que les autres valeurs sont évaluées comme `True`.
## Complément : `None` et lidentité `is`
------
Python propose la valeur `None` (rien) qui est fréquement utilisé pour représenter labsence dune valeur.
## Complément : `None` et l'identité `is`
Étant le seul objet du type `NoneType`, on peut tester son *identité* avec `is` :
Python propose la valeur `None` pour représenter l'absence d'une valeur. On peut utiliser l'opérateur `is` pour vérifier l'identité d'une valeur. Par exemple :
```python
>>> 1 is None
@@ -160,4 +165,38 @@ True
False
```
On verra plus tard quune _fonction_ qui ne se termine par `return ...` renvoie néanmoins `None`.
Une fonction qui ne se termine pas par `return ...` renvoie implicitement `None`.
--------
## Opérations bit à bit
Python, comme de nombreux autres langages de programmation, fournit des opérateurs bit à bit pour manipuler les nombres au niveau des bits.
Ces opérateurs incluent les opérations AND (&), OR (|), XOR (^), NOT (~), ainsi que les décalages de bits à gauche (<<) et à droite (>>).
Voici un exemple de leur utilisation :
```python
a = 10 # 1010 en binaire
b = 4 # 0100 en binaire
print(a & b) # Opération AND: 0000 en binaire (0 en decimale)
print(a | b) # Opération OR: 1110 en binaire (14 en decimale)
print(a ^ b) # Opération XOR: 1110 en binaire (14 en decimale)
print(~a) # Opération NOT: 0101 en binaire (-11 en decimale, complément à deux)
print(a << 1) # Opération décalage à gauche: 10100 en binaire (20 en decimale)
print(a >> 1) # Opération décalage à droite: 0101 en binaire (5 en decimale)
```
---------
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

View File

@@ -1,14 +1,16 @@
# Codage des booléens
## Codage des booléens
## Attendus
> Ce cours fournit une introduction à la logique booléenne et à la manière dont elle s'applique à l'informatique. Vous apprendrez non seulement les bases des opérations booléennes, mais vous comprendrez également comment ces opérations peuvent être utilisées pour créer des structures plus complexes, telles que des additions binaires, des multiplexeurs, des décodeurs et, finalement, un ordinateur entier.
| Contenus | Capacités attendues |
| :--: | :-- |
| Valeurs booléennes : 0,1. Opérateurs booléens : and, or, not.<br />Expressions booléennes | Dresser la table dune expression booléenne |
## Le programme
![bo](assets/bo.png)
---------
## Définition
De nombreux dispositifs électroniques, électromécanique, (mécanique, électrique, pneumatique, etc....) fonctionnement en TOUT ou RIEN.
De nombreux dispositifs électroniques, électromécaniques, (mécaniques, électriques, pneumatiques, etc....) fonctionnement en TOUT ou RIEN.
Ceci sous-entend qu'ils peuvent prendre 2 états.
@@ -23,29 +25,26 @@ Exemples :
Un système présentera un fonctionnement __logique combinatoire__ si l'état à un instant $`t`$ des variables de sortie ne dépend que de l'état des variables d'entrée au même instant $`t`$.
---------
## Variable logique
Une variable logique ne peut prendre que 2 états:
Une variable logique est un type de variable qui peut prendre uniquement l'une de deux valeurs, généralement désignées comme 0 (faux) et 1 (vrai). Ces deux valeurs sont souvent utilisées pour représenter deux états opposés. Par exemple :
| État Vrai | État Faux |
| :--: | :--: |
| Oui | Non |
| True | False |
| 1 | 0 |
| Haut | Bas |
| High | Low |
| :-------: | :-------: |
| Oui | Non |
| True | False |
| 1 | 0 |
| Haut | Bas |
Pour ces raisons, il est beaucoup plus avantageux d'employer un système mathématique n'utilisant que 2 valeurs numériques.
*Par exemple, la variable "IsLightOn" peut avoir deux états : 1 (la lumière est allumée) ou 0 (la lumière est éteinte).*
Par convention, on utilise les valeurs 0 / 1 pour représenter les états d'une variable logique.
La variable binaire est aussi appelée variable __booléenne__. (De George Boole, mathématicien anglais 1815 - 1864)
------
## Fonction logique
Une fonction $`S`$ (exemple: allumer une lampe) peut comporter $`n`$ variables logiques.
Pour chacune de ces combinaisons, la fonction peut prendre une valeur 0 ou 1.
Nous obtenons $`2^n`$ combinaisons pour ces $`n`$ variables.
Une fonction logique est une expression qui produit une valeur de vérité à partir d'autres valeurs de vérité. Par exemple, une fonction logique peut comporter des variables logiques $`n`$. Pour chacune de ces combinaisons, la fonction peut prendre une valeur 0 ou 1. Nous obtenons donc $`2^n`$ combinaisons pour ces $`n`$ variables.
### Table de vérité
@@ -163,6 +162,36 @@ La table de vérité de l'opérateur OU :
\end{aligned}
```
### Portes Logiques de Base
Une porte logique est un dispositif qui effectue une opération logique sur un ou plusieurs signaux logiques produisant une sortie. Les portes logiques de base sont :
1. **Porte AND** : Cette porte a deux ou plusieurs entrées et une sortie. La sortie est vraie (1) si toutes les entrées sont vraies.
![AND Gate](https://upload.wikimedia.org/wikipedia/commons/6/64/AND_ANSI.svg?uselang=fr)
2. **Porte OR** : Cette porte a deux ou plusieurs entrées et une sortie. La sortie est vraie (1) si au moins une des entrées est vraie.
![OR Gate](https://upload.wikimedia.org/wikipedia/commons/b/b5/OR_ANSI.svg?uselang=fr)
3. **Porte NOT** : Cette porte a une seule entrée et une sortie. La sortie est l'inverse de l'entrée. Si l'entrée est vraie (1), la sortie est fausse (0) et vice versa.
![NOT Gate](https://upload.wikimedia.org/wikipedia/commons/b/bc/NOT_ANSI.svg?uselang=fr)
4. **Porte XOR (OU exclusif)** : Cette porte a deux entrées et une sortie. La sortie est vraie (1) si une, et seulement une, des entrées est vraie.
![XOR Gate](https://upload.wikimedia.org/wikipedia/commons/0/01/XOR_ANSI.svg?uselang=fr)
5. **Porte NAND (NON-ET)** : Cette porte a deux ou plusieurs entrées et une sortie. La sortie est fausse (0) uniquement si toutes les entrées sont vraies. C'est l'inverse de la porte AND.
![NAND Gate](https://upload.wikimedia.org/wikipedia/commons/f/f2/NAND_ANSI.svg?uselang=fr)
6. **Porte NOR (NON-OU)** : Cette porte a deux ou plusieurs entrées et une sortie. La sortie est vraie (1) uniquement si toutes les entrées sont fausses. C'est l'inverse de la porte OR.
![NOR Gate](https://upload.wikimedia.org/wikipedia/commons/6/6c/NOR_ANSI.svg?uselang=fr)
---------
### Algèbre de Boole
#### Définition
@@ -196,13 +225,15 @@ S = 1 \text{ si} \left\{
$`S`$ s'écrit sous sa forme canonique : $`S= (\overline{a} \land b) \lor (\overline{a} \land \overline{b}) \lor (a \land \overline{b})`$
###
--------------
## Exercices
### Établir des tables de vérité
**Travail à effectuer** : Écrire les tables de vérité des expressions booléennes suivantes :
**Travail à effectuer** : Écrire les tables de vérité des expressions booléennes suivantes.
Conseil : essayez d'imaginer comment la lumière d'une maison pourrait être contrôlée par deux interrupteurs (a et b).
1. $`S(a, b) = \overline{a} \land b`$
2. $`S(a, b) = b \lor (a \land b)`$
@@ -241,3 +272,20 @@ Les __lois de De Morgan__ sont des identités entre propositions logiques. Elles
**Travail à effectuer** : Démontrer ces 2 lois.
----------
### Ressources supplémentaires
### NANDGAME
Si vous êtes intéressé par une approche pratique et interactive pour apprendre ces concepts, je vous recommande fortement de consulter [NANDGAME](http://nandgame.com/). Il s'agit d'un jeu en ligne gratuit où vous pouvez construire un ordinateur à partir de zéro en utilisant uniquement la porte logique NAND.
À travers une série de défis et d'énigmes, NANDGAME vous guidera à travers les concepts de base de la logique booléenne et vous montrera comment ces concepts peuvent être utilisés pour construire des structures plus complexes. En fin de compte, vous aurez une meilleure compréhension de la manière dont les ordinateurs fonctionnent au niveau le plus fondamental.
-----------
Auteurs : Florian Mathieu - Philippe Boddaert
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -1,15 +1,14 @@
# Mystère
## Mystère
## Description
### Description
L'idée de ce TP est de manipuler les expressions booléennes.
Pour cela, vous allez devoir programmer des fonctions booléennes.
A chaque fonction `mystere` suivante, sont données des doctests.
Ces doctests correspondent aux valeurs des tables de vérités.
A chaque fonction `mystere` suivante, sont données des doctests. Ces doctests correspondent aux valeurs des tables de vérités.
## Consignes
### Consignes
Recopier le bloc de code suivant dans un fichier `mystere.py`
@@ -18,92 +17,125 @@ Vous devez écrire le corps de la fonction sous la forme d'une expression boolé
```python
def mystere1(a):
'''
>>> mystere1(True)
False
>>> mystere1(False)
True
Cette fonction renvoie l'inverse du paramètre a.
>>> mystere1(True)
False
>>> mystere1(False)
True
'''
# Votre code ici.
pass
def mystere2(a, b):
'''
>>> mystere2(True, True)
True
>>> mystere2(True, False)
True
>>> mystere2(False, True)
True
>>> mystere2(False, False)
False
Cette fonction renvoie True si au moins l'un des paramètres est True.
>>> mystere2(True, True)
True
>>> mystere2(True, False)
True
>>> mystere2(False, True)
True
>>> mystere2(False, False)
False
'''
# Votre code ici.
pass
def mystere3(a, b):
'''
>>> mystere3(True, True)
False
>>> mystere3(True, False)
True
>>> mystere3(False, True)
True
>>> mystere3(False, False)
False
Cette fonction renvoie True si les paramètres sont différents l'un de l'autre.
>>> mystere3(True, True)
False
>>> mystere3(True, False)
True
>>> mystere3(False, True)
True
>>> mystere3(False, False)
False
'''
# Votre code ici.
pass
def mystere4(a, b):
'''
>>> mystere4(True, True)
False
>>> mystere4(True, False)
False
>>> mystere4(False, True)
False
>>> mystere4(False, False)
True
Cette fonction renvoie True seulement si les deux paramètres sont False.
>>> mystere4(True, True)
False
>>> mystere4(True, False)
False
>>> mystere4(False, True)
False
>>> mystere4(False, False)
True
'''
# Votre code ici.
pass
def mystere5(a, b):
'''
>>> mystere5(True, True)
True
>>> mystere5(True, False)
False
>>> mystere5(False, True)
False
>>> mystere5(False, False)
True
Cette fonction est une équivalence, elle renvoie True si les deux paramètres ont la même valeur.
>>> mystere5(True, True)
True
>>> mystere5(True, False)
False
>>> mystere5(False, True)
False
>>> mystere5(False, False)
True
'''
# Votre code ici.
pass
def mystere6(a, b):
'''
>>> mystere6(True, True)
False
>>> mystere6(True, False)
True
>>> mystere6(False, True)
False
>>> mystere6(False, False)
False
Cette fonction renvoie True si le premier paramètre est True et le deuxième est False.
>>> mystere6(True, True)
False
>>> mystere6(True, False)
True
>>> mystere6(False, True)
False
>>> mystere6(False, False)
False
'''
# Votre code ici.
pass
def mystere7(a, b):
'''
>>> mystere7(True, True)
False
>>> mystere7(True, False)
True
>>> mystere7(False, True)
False
>>> mystere7(False, False)
True
Cette fonction renvoie True si le premier paramètre est False et le deuxième est True, ou si les deux paramètres sont False.
>>> mystere7(True, True)
False
>>> mystere7(True, False)
True
>>> mystere7(False, True)
False
>>> mystere7(False, False)
True
'''
# Votre code ici.
pass
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=False)
doctest.testmod(verbose=True)
```
A la fin de ce TP, n'oubliez pas de vérifier que toutes les fonctions passent les doctests. Vous pouvez exécuter votre fichier Python en ligne de commande pour voir les résultats des tests. Si une fonction ne passe pas un doctest, revoyez votre logique booléenne pour cette fonction et essayez à nouveau.
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.