Salut,
Les booléens, ainsi que tu l'a surement déjà remarqué, sont des types qui ne peuvent avoir que deux valeurs possibles, généralement anti-nomiques:zero/un vrai/faux, homme/femme, blanc/noir, gauche/droite, le courent passe /ne passe pas etc…
Toute logique d'ordinateur ne peut etre utilisée que si on arrive à réduire une expression en une valeur aussi simple que "c'est vrai" ou "c'est faux".
On dispose donc des opérateurs d'(in)égalités classiques:
- plus grand
- plus petit
- egal
- pas égal
- plus grand ou égal
- plus petit ou egal
pour obtenir chaque fois une réponse en "vrai" ou en "faux".
Ensuite, il existe les opérateur "logiques" OU, ET, PAS et OU Exclusifs qui permettent de regrouper une expression fournissant un résultat "vrai" ou "faux" entre elles…
L'opérateur OU prendra une valeur vraie si l'une des expressions qu'il regroupe a un résultat vrai.
Il ne vaudra faux que si aucunes des expressions qu'il regroupe n'est vrai.
Exemples: deux expressions qui sont en mesure de donner un résultat vrai ou faux:
-exp1:c'est un garcon
-exp2:il a 35 ans
on peut créer une table de vérité (deux affirmations qui peuvent etre vraies ou fausses donnent quatre possibilités [clindoeil]) du genre de
[code]
expr1 | expr2 | resultat
faux | faux | faux ==>C'est une fille qui n'a pas 35 ans ;-)
vrai | faux | vrai ==>c'est un garcon, mais il n'a pas 35 ans
faux | vrai | vrai ==>C'est une fille, mais elle a 35 ans
vrai | vrai | vrai ==> c'est un garcon de 35 ans
[/code]
Comme tu le remarque,on a deux affirmations, quatre possibilité, dont une seule donne un résultat faux et trois donnent un résultat vrai…
Si on met un ET entre les deux expressions, on n'aura un résultat vrai que si on a bel et bien affaire à un garcon de 35 ans (que les deux expressions ont un résultat vrai)
[code]
expr1 | expr2 | resultat
faux | faux | faux ==>C'est une fille qui n'a pas 35 ans ;-)
vrai | faux | faux ==>c'est un garcon, mais il n'a pas 35 ans
faux | vrai | faux ==>C'est une fille, mais elle a 35 ans
vrai | vrai | vrai ==> c'est un garcon de 35 ans
[/code]
On a toujorus les quatre possibilités, mais trois d'entres elles donnent un résultat faux alors qu'une seule donne un résultat vrai [clindoeil]
Si on place un OU Exclusif entre les expressions, le résultat sera vrai seulement si une seule des expression est vérifiée
[code]
expr1 | expr2 | resultat
faux | faux | faux ==>C'est une fille qui n'a pas 35 ans ;-)
vrai | faux | vrai ==>c'est un garcon, mais il n'a pas 35 ans
faux | vrai | vrai ==>C'est une fille, mais elle a 35 ans
vrai | vrai | faux==> c'est un garcon de 35 ans
[/code]
L'inverseur transforme le 0 en 1 et le 1 en zero [clindoeil], le vrai en faux et le faux en vrai
L'informatique n'est qu'une application de l'électronique, et, hérite à ce titre des meme lois [clindoeil]
En électronique, on trouve également des inverseurs (le courent qui passe ne passe plus et inversément), et ce que l'on appelle des "porte" OU, ET et OU Exclusif (OR, AND et XOR)
On représente les portes ET par un . (a.b est équivlaent à a ET b) et les porte OU par un + (a+b est équivalent à a OU B)
Les regles mathématiques sont exactement les meme qu'en algebre classique: .(ET) a priorité sur +(OU), mais les parentheses ont priorité sur les signes
Il n'y a que quelques regles qui changent, principalement si on veut tester A ET NON A,A OU NON A et autres particularités mais, pour l'ensemble, les regles mathématiques restent d'application [clindoeil], et certains produits remarquable dont la démonstration sort sans doute du cadre de ce post [clindoeil]
C'est à dire que A.(B+C)(à lire A ET (B ou C)) peut très bien etre distribué de manière classique AB + AC (comme en math, tu remarquera que j'ai retiré le symbole ET "fois" [clindoeil])
L'une des dernière règles intéressante à savoir est la loi nommée "de Morgan"(du nom de la personne qui l'a trouvée):
Si tu inverse les entrées (les vrai deviennent faux en entrée et vice-versa), que tu inverse la sortie (le vrai devient faux en sortie et vice versa) et que tu inverse la porte (une porte ET devient porte OU et vice versa), tu obtiens une porte qui agit exactement de la meme manière…
A ET B==> agit pareillement que NON(NOB A OU NON B)
A OU B==> agit pareillement que NON(NON A ET NON B)
Tu comprendra qu'on préférera passer du deuxièmes cas au premier [clindoeil]
Pour en venir à l'exemple que tu fournis, on est, justement, dans un des produits remarquable… Ce sera le seul que je démontrerai [clindoeil]
Je le renote ici:
(a<b) et ((a>b) ou (a<c))
Tu es d'accord avec le fait que, si a est plus grand que b, il ne sait pas etre, dans un meme temps plus petit que b…
Si l'un est vrai, l'autre est d'office faux [clindoeil]
Mais bon, faisons comme si on ne l'avait pas remarqué, et réfléchissons un peu:
Nous avons trois expressions qui fournissent un résultat booléen (a<b, a>b et a<c), créons les tables de vérité.
Pour la facilité, donnons des valeurs à a, b et c [clindoeil](trois possiblités chaque fois car l'égalité est une possiblité supplémentaire ici [clindoeil])
Pour a<b on a
a | b | a<b
0 | 10 | vrai
10 | 0 | faux
10 | 10 | faux
pour a>b on a
a | b | a>b
0 | 10 | faux
10 | 0 | vrai
10 | 10 | faux
pour a<c on a
a | c | a<c
0 | 10 | vrai
10 | 0 | faux
10 | 10 | faux
Comme tu te rend compte qu'avec un test "plus grand" ou "plus petit", l'égalité sera d'office fausse, on va supprimer cette valeur des tables suivantes [clindoeil]
On va s'attaquer maintenant à la grande parenthese
((a>b) ou (a<c))
si on considere (a>b) comme étant l'expression B et (a<c) comme étant l'expression C, on a la table de vérité suivante:
[code]
B | C | B ou C
faux | faux | faux
faux | vrai | vrai
vrai | faux | vrai
vrai | vrai | vrai
[/code]
Il faut ensuite mettre le résultat de cette expression avec (a<b) que nous nommerons A
…Sauf, que, comme je te l'ai dit, A ne peut pas etre vrai en meme temps que B, donc, on va utiliser les trois expressions ensemble
[code]
A | B |C |A ET(B ou C)
faux |faux | faux | //ne peut pas arriver, si a est faux, b est vrai
faux |faux | vrai | //ne peut pas arriver, si a est faux, b est vrai
faux |vrai | faux | faux
faux |vrai | vrai | faux
vrai |faux | faux | faux
vrai|faux | vrai | vrai
vrai |vrai | faux | //ne peut pas arriver, si a est vrai, b est faux
vrai |vrai | vrai | //ne peut pas arriver, si a est vrai, b est faux
[/code]
Remarques tu quelque chose avec cette table de vérité [question]
Sur 8 possiblités, quatre n'arriveront jamais…(ce qui représente quand meme la moitié des possiblités).
Sur celles qui restent, l'expression B n'a aucune sorte d'effet, car on peut arriver à un résultat faux que B soit vrai ou qu'il soit faux.
On peut donc purement et simplememnt supprimer l'expression B de l'expression globale [clindoeil]
Cela nous donnera une expression finale du genre de
A ET C
ou si tu préfères
a<b ET a<c
Modifié par koala01 le 01/10/2006 21:34