> Tous les forumsAutres langages

 Distributivité des oppérateurs booléen
Statut du sujet : NON RESOLU Imprimer
 Musachi
  Posté le 01/10/2006 @ 16:47  
 Petit astucien

10 Messages
Bonjour ! Voilà, dans mes études, je passe par une unité d'apprentissage à la programation, et j'ai un truc à faire, développer des expressions booléennes. Mais le truc, c'est que je comprend pas trop comment ça marche la distributivité des oppéarateurs booléens. Quelqu'un pourait il m'expliquer vite fait ? Par exemple, en prenant : (a<b) et ((a>b) ou (a<c)) Qu'est ce que ça donnerait ? Merci pour votre aide !
 Afficher le profil de Musachi Envoyer un message privé à Musachi
 
 
Publicité
 AlexPrince  Posté le 01/10/2006 à 18:04  
Petit astucien

398 Messages
C'est très très très simple. ET ne va être vrai que si tu a 'vrai' et 'vrai' de chaque côté ou 'faux' et 'faux'. Au contraire, OU ne va être vrai que si un côté est vrai et l'autre faux. Dans ton exemple, si on considère l'ordre alphabétique des lettres comme point de comparaison on a: [code](a < b) && ((a > b) || (a < c)) vrai && (faux || vrai) vrai && vrai vrai[/code]
Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 don diego  Posté le 01/10/2006 à 19:06  
Petit astucien

325 Messages
Salut, Je ne suis pas d'accord avec toi AlexPrince. L'opérateur ET n'est vrai que dans un seul cas : Vrai ET Vrai = Vrai Sinon : Vrai ET Faux = Faux Faux ET Vrai = Faux Faux ET Faux = Faux Pour l'opérateur Vrai, on a : Vrai OU Vrai = Vrai Vrai OU Faux = Vrai Faux OU Vrai = Vrai Faux OU Faux = Faux Sinon en ce qui concerne la réponse de AlexPrince, je suis d'accord.
Afficher le profil de don diegoEnvoyer un message privé à don diego
 Revenir en haut de la page
 koala01  Posté le 01/10/2006 à 21:33  
Astucien

4715 Messages
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
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 Musachi  Posté le 01/10/2006 à 22:02  
Petit astucien

10 Messages
Wow, et ben ça c'est de la réponse ! Bon je vais m'imprimer et me relire tout ça ce soir. En tout cas, merci à vous et particulièrement à toi koala01 pour votre aide. Merci !

Modifié par Musachi le 01/10/2006 22:03
Afficher le profil de Musachi Voir la configuration de MusachiEnvoyer un message privé à Musachi
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2009 WebastucesAller en haut de la page