Valeurs booléennes

Représentation des données: types et valeurs de base

Plan

Origine des booléens

Georges Boole sort ' Mathematical Analysis of Logic' en 1847, qui est une structure algébrique a seulement deux états: 0 et 1. A cette époque, tout cela reste théorique mais sera grandement utilisé par la suite. Bien que le Binaire soit apparu en 3000 avant J.C. en Chine pour calculer des périodes religieuses, les Français ne l'utiliseront qu'en 1600 avec la table de Harriot(mathématicien et astronome anglais) et Leibniz y consacra un article important en 1703.Il fallut attendre 1930 pour que Claude Shannon démontre qu'avec des interupteurs fermés pour 'vrai' et ouvert pour 'faux', on peut effectuer des opération logiques en associant le nombre 1 pour vrai et 0 pour faux. C'est lui qui va populariser le mot 'bit' créé par John Tukey.

En 1937, Georges Stibitz et Samuel Williams fabriquent un calculateur avec des relais, basé sur le système binaire, capable de réaliser les 4 opérations avec des nombres décimaux en entrée en 1 minute! Ils ont même établi un système de communication pour piloter une machine à des centaines de kilomètres. D'autres calculateurs avaient été fabriquées bien avant mais étaient mécaniques et utilisaient des engrenages. La Pascaline de Blaise Pascal, à 16 ans, est capable de soustraire et additionner. Gottfried Wilhelm Leibniz conçoit en 1694 une machine capable d'en plus multiplier et diviser. D'autres modèles mécaniques suivirent, le dernier fut une calculatrice mécanique de 1948 capable de faire une multitude de calculs mathématiques rapidement. Elle sera utilisée jusqu'en 1970, année de mise en marché de la calculatrice dite conventionnelle que l'on connaît aujourd'hui.

C'est l'arrivée du transistor en 1947 qui va bouleverser les travaux sur les calculateurs. Jusqu'alors on utilisait les relais ou les lampes. Les lampes étaient 1000 fois plus grandes et consommaient 1000 fois plus.

Que fait un transistor? Un transistor a trois broches: le collecteur, la base et l'emetteur. Le courant dans l'emetteur est égal à la somme des courants du collecteur et de la base. Si la base n'est pas alimentée, le courant ne passe pas et une faible tension dans la base laissera passer le courant...passe, passe pas,....1,0...

Mais comment fonctionne ce transistor. Le transistor est construit avec du silicium. Le silicium est composé d'atomes Si14, ils ont donc 4 électrons sur la dernière couche. Dans le cas d'un transistor NPN (Negatif/Positif/Négatif), on dope le silicium N en lui ajoutant des électrons grace au Phosphore (5 électrons sur la dernière couche) et on dope la partie qui deviendra P en créant un déficit d'électrons avec du Bore (3 électrons sur la dernière couche), ce qui va créer des trous (donc attirer les électrons)

En mettant deux transistors en série, on voit que le courant ne passe que si les deux bases sont à 1..c'est la porte logique and &.

Il aura fallu 7 ans pour que le grand public découvre le transistor...dans la radio (que l'on appelait alors transistor ! ) et en 1950 dans les ordinateurs. En 1958 arrive le circuit intégré qui regroupe quelques transistors, puis en 1969 le microprocesseur qui contient des milliers (aujourd'hui des milliards).

La multiplication du nombre de transistors a suivi loi de Moore: "le nombre de transistors par circuit de même taille allait doubler, à prix constant, tous les ans. Il rectifia par la suite en portant à dix-huit mois le rythme de doublement. Il en déduisit que la puissance des ordinateurs allait croître de manière exponentielle, et ce pour des années." Depuis 2014 la loi de Moore n'est plus complétement vérifiée et subit un ralentissemnt.

Les bases

En programmation, plutôt que d'utiliser 0 et 1, on dit qu'une variable booléenne peut prendre deux valeurs FALSE ou TRUE. La comparaison de variables booléennes dans les langages informatiques se formule au travers des commandes AND (&& ou &), OR (||), NOT (!).

Ces variables sont du type Bool (ou Boolean) en informatique. Voir ici pour plus de types de variables.

Conformément aux tables de vérité (voir plus bas) ,

le AND retourne True, uniquement si les deux valeurs comparées sont à True.

le OR retourne True dès qu'une variable est True

le NOT retourne True si l'on a False et inversement

le XOR, retourne True si une seule des deux variables comparées est à True

Le AND se note . (la multiplication) et le OU se note + (l'addition). Le XOR se note avec un plus dans un cercle. Le NOT d'un événement se note avec une barre au dessus. NOT(a) se note a

Utilisation

Les variables booléennes sont essentielles en programmation et leur bonne Utilisation va vous permettre une meilleur compréhension de votre code et faciliter le débugage.

Par exemple, vous cherchez un nombre mystère et vous faites une boucle tant que pour pouvoir trouver la bonne valeur.

						
from random import randint

nombreATrouver=randint(0,100)
# print(nombreATrouver) pour tricher
trouve=False
while not trouve:
	 proposition=int(input("entrez votre proposition"))
	 trouve= proposition==nombreATrouver
print("bravo")
						
					

Observez aussi que j'ai mis le résultat d'un test booléen proposition==nombreATrouver dans la variable trouve !

Il est bien plus clair de lire "if fini:" que "if l[i]**2-l[i+1]==0:"

J'insiste encore une fois, coder n'est pas juste faire en sorte qu'un programme fonctionne mais faire en sorte qu'on puisse facilement le débugger, voire pouvoir confier le débuggage à une autre personne! Donc lisibilité, noms de variables, commentaires, spécifications des fonctions...tout cela est essentiel.

Nous reviendrons plus tard sur les booléens pour créer des circuits logiques, ici.

Exercices

  1. Quelle différence il y-a-il entre a=0 et b==0? Répondre en utilisant le mot type est une bonne option!

  2. Pourquoi l'instruction en python 'if total=0:' ne fonctionne pas?

  3. Faire un tableau à 5 lignes. Placer a et b dans les deux premieres colonnes et y inscrire toutes les combinaisons possibles de 0 et 1 pour a et b dans les 4 lignes qui suivent. Ajouter des colonnes pour ecrire not(a) and b, not(a) or b, not(a) or not(b), not(a and b). Comparer les deux dernières colonnes. Que concluez vous?

  4. Faire de même avec (a or b) and (a and b), et (a or b) or (a and b). Comment peut-on écrire ces deux règles plus simplement?

  5. Soit, liste1=[3,5,7], liste2=[10,3,18,25], test1=3 in (liste1 and liste2), test2=10 in (liste1 and liste2), test3=10 in (liste1 or liste2), test4=20 in (liste1 and liste2). Donner les valeurs des tests.

  6. Refaire un tableau pour (not(a) and b) or (a and not(b)).

  7. L'opérateur xor existe en python mais ne peut être appliqué qu'à des booléens avec la commande ^. On peut faire par exemple a ^ b. Mais je ne peux pas utiliser cela pour mes listes: test5= 3 in (liste1 ^ liste2) ne fonctionne pas puisque liste1 et liste2 ne sont pas des booléens. Trouvez une solution!

  8. On peut aussi utiliser 'in' pour une chaine de caractères. Que vaut la variable test6="si" in ("nsi c'est super" and "si j'ai une bonne note")

Android

De la programmation pour pc à la programmation pour téléphone.

A finir

Pas eu le temps de tout faire.....