Jump to content
  • entries
    69
  • comments
    18
  • views
    6047

La factorisation d'équations booléennes !

Sign in to follow this  
David Julot

288 views

Si avec un titre pareil je ne vous fais pas fuir, c’est que vous êtes peut-être un peu masochiste ! Ce titre pompeux pour simplement faire une formule de politesse, en tenant compte de deux rubriques : civilité et titre.

Vous allez surtout apprendre à utiliser les fonctions ET (AND) et OU (OR). Alors, maintenant prenez une feuille de papier, et silence dans la classe…

Il est indispensable à tout développeur de connaître les opérateurs and (et), or (ou), xor (ou exclusif) et not (non) pour les formules de calculs et surtout dans le cadre de programmation conditionnelle (qui fait appel aux fonctions de condition).

Mais avant de voir les fonctions booléennes, il faut donc revoir les conditions.

 

Les conditions

L’art de bien utiliser les conditions est la clef de voûte de la programmation. Dans FileMaker Pro, les conditions se trouvent dans les cas suivants :

  • Dans l’action de script Si [] ;
  • Dans l’action de script Sinon si [] ;
  • Dans l’action de script Fin de boucle si [] ;
  • Dans les calculs conditionnels.

Dans les formules de calculs, pour effectuer une condition il existe deux instructions :

SI (  
  condition ;  résultat si vrai ;
  résultat si faux
)

CAS (  
  condition 1 ; résultat si vrai ;
  condition 2 ; résultat si vrai ;
  ...
  résultat par défaut
)

Dans tous les cas, une condition est une comparaison entre deux valeurs, par exemple :

A = B
A > 12
B  "texte"

ATTENTION ! À une condition, le système doit être capable de répondre par vrai ou par faux. À une condition, il y a toujours deux résultats possibles.

 

Avantage à utiliser l’instruction CAS

L’instruction CAS a l’avantage d’être plus lisible, ce qui évite des erreurs de formulation que l’on peut avoir lors d’imbrication de fonctions SI.

En effet, il suffit pour s’en convaincre de comparer les deux formulations suivantes :

SI ( 
  A=1 ; "v1" ; 
  SI ( 
    A=2 ; "v2" ; 
    SI ( 
      A=3 ; "v3" ; 
      "v4" 
    ) 
  ) 
)

CAS (
  A = 1 ; "v1" ;
  A = 2 ; "v2" ; 
  A = 3 ; "v3" ;
  "v4"
)

Parmi vous, il y en aura bien un qui va me dire qu’il existe une fonction (CHOIX) qui fait ceci encore mieux ! Oui, mais j’ai pris cet exemple pour illustrer mon propos… Fin de l’aparté… ;-)

Il est évident que si l’usage de l’instruction CAS est plus lisible que l’instruction SI, elle est aussi plus économe en parenthèses, principales sources de confusion dans l’usage de l’instruction SI, et elle est surtout plus rapide.

 

Les fonctions booléennes

Il est possible d’assembler plusieurs conditions dans une formule booléenne, du nom du mathématicien anglais du XIXe siècle : George Boole. Pour ce type d’assemblage, on doit utiliser les fonctions logiques suivantes :

  • AND, et logique ;
  • OR, ou logique ;
  • XOR, ou logique exclusif ;
  • NOT, non logique.

Et pour ceux qui ont fait de l’électronique, se souviendront des fonctions NAND, NOR, YES (pour le changement d’impédance, par exemple CMOS/TTL ), etc… Ha que de souvenirs… Fin du deuxième aparté ;-)

Les tables de vérité des fonctions booléennes

À chaque fonction booléenne correspond une table de vérité. En effet, pour une des formulations suivantes :

condition 1 AND condition 2
condition 1 OR condition 2
condition 1 XOR condition 2
NOT condition 1

La condition 1 peut être vraie ou fausse, idem pour la condition 2. Il faut donc savoir ce que donne comme résultat la fonction booléenne, et pour cela, se référer aux tables de vérités suivantes.

AND (ET)
condition 1   condition 2  résultat
faux          faux         faux
faux          vrai         faux
vrai          faux         faux
vrai          vrai         vrai

OR (OU)
condition 1   condition 2  résultat
faux          faux         faux
faux          vrai         vrai
vrai          faux         vrai
vrai          vrai         vrai

XOR (OU EXCLUSIF)
condition 1   condition 2  résultat
faux          faux         faux
faux          vrai         vrai
vrai          faux         vrai
vrai          vrai         faux

NOT (NON)
condition 1   résultat
faux          vrai
vrai          faux


La priorité

Tout comme en arithmétique, entre les fonctions booléennes il existe des ordres de priorité. La fonction logique AND est prioritaire sur la fonction logique OR ou XOR. C’est-à-dire que les deux formulations suivantes sont égales :

A > 1 OR B = 2 AND C  123
A > 1 OR ( B = 2 AND C  123 )

Pour s’en souvenir, il faut savoir qu’en algèbre de Boole on écrit un x en lieu et place de la fonction AND et un + en lieu et place de la fonction OR.

A > 1 OR B = 2 AND C  123

// si on remplace :
//   A > 1 par a
//   B = 2 par b
//   C ≠ 123 par c
// alors on peut écrire :
a + b x c

// ce qui est bien égale à :
a + ( b x c )

// ce qui est bien différent de :
( a + b ) x c


La simplification par la mise en facteur

Une équation booléenne ( cond1 AND cond2 OR cond3 est une équation) peut se simplifier par la mise en facteur d’un élément commun. Prendre l’équation suivante :

cond1 AND cond2 OR cond1 AND cond3 OR cond4 AND cond2 OR cond4 AND cond3

Elle peut donc s’écrire, après une première mise en facteur :

cond1 x ( cond2 + cond3 ) + cond4 x ( cond2 + cond3 )

Qui peut à son tour s’écrire après une seconde mise en facteur :

( cond1 + cond4 ) x ( cond2 + cond3 )

// donc
( cond1 OR cond4 ) AND ( cond2 OR cond3 )


Je vais vous rappeler un très mauvais souvenir de collège : a x b + a x c = a x ( b + c ) ! :D

 

Exemple d’une utilisation de fonctions booléennes

Pour illustrer l’usage des opérateurs booléens, on va créer une formule de calcul qui donnera une formule de politesse à appliquer suivant le contenu de deux rubriques :

  • civilité, de type texte, pouvant contenir les valeurs suivantes : M., Mme et Mle ;
  • titre, de type texte, pouvant contenir les valeurs suivantes : Dr et Me.

La formule de politesse devra retourner les résultats suivants les valeurs des deux rubriques Civilité et Titre :

Civilite  Titre  Formule de politesse
M.               Cher Monsieur
M.        Dr     Cher confrère
M.        Me     Cher confrère
Mme              Chère Madame
Mme       Dr     Chère consœur
Mme       Me     Chère consœur
Mle              Chère Mademoiselle
Mle       Dr     Chère consœur
Mle       Me     Chère consœur
                 Chère Madame, Cher Monsieur


Pour connaître l’opérateur booléen à utiliser, il faut savoir que la réunion des conditions d’une même rangée utilisera la fonction AND, alors que la réunion des conditions de deux rangées (ou plus) utilisera la fonction OR.

Mais pour commencer, on peut écrire la formule suivante en prenant en compte chaque rang :

CAS (  
  Civilite = "M."  AND Titre = ""   ; "Cher Monsieur" ;
  Civilite = "M."  AND Titre = "Dr" ; "Cher confrère" ;
  Civilite = "M."  AND Titre = "Me" ; "Cher confrère" ; 
  Civilite = "Mme" AND Titre = ""   ; "Chère Madame" ;
  Civilite = "Mme" AND Titre = "Dr" ; "Chère consœur" ;
  Civilite = "Mme" AND Titre = "Me" ; "Chère consœur" ;
  Civilite = "Mle" AND Titre = ""   ; "Chère Mademoiselle" ;
  Civilite = "Mle" AND Titre = "Dr" ; "Chère consœur" ;
  Civilite = "Mle" AND Titre = "Me" ; "Chère consœur" ;
  "Chère Madame, Cher Monsieur"
)


La formule peut paraître un peu longue, mais elle est totalement opérationnelle.

Si maintenant on ne prend plus en compte chaque rang, mais seulement les différents résultats possibles, on n’a alors plus que cinq équations à écrire au lieu de neuf.

// cas n° 1 - "Cher Monsieur" :
Civilite = "M." AND Titre = ""

// cas n° 2 - "Cher confrère" : 
Civilite = "M." AND Titre = "Dr" OR Civilite = "M." AND Titre = "Me"

// cas n° 3 - "Chère Madame" :
Civilite = "Mme" AND Titre = ""

// cas n° 4 - "Chère consœur" :
Civilite = "Mme" AND Titre = "Dr" OR Civilite = "Mme" AND Titre = "Me" OR
Civilite = "Mle" AND Titre = "Dr" OR Civilite = "Mle" AND Titre = "Me"

// cas n° 5 - "Chère Mademoiselle" :
Civilite = "Mle" AND Titre = ""

On obtient donc la formule suivante, après mise en facteur :

CAS (  
  Civilite = "M." AND Titre = "" ; "Cher Monsieur" ;
  Civilite = "M." AND ( Titre = "Dr" OR Titre = "Me" ) ; "Cher confrère" ;  
  Civilite = "Mme" AND Titre = "" ; "Chère Madame" ;
  ( Civilite = "Mme" OR Civilite = "Mle" ) AND ( Titre = "Dr" OR Titre = "Me" ) ; "Chère consœur" ;
  Civilite = "Mle" AND Titre = "" ; "Chère Mademoiselle" ;
  "Chère Madame, Cher Monsieur"
)


    
C’est tout pour aujourd’hui !

Si après tout ça vous n’avez pas mal à la tête, c’est que vous aimez les mathématiques…. Comme d’habitude, si vous avez des questions, des suggestions ou des corrections à apporter, n’hésitez pas à mettre un commentaire ci-après…

Bonne semaine à toutes et à tous.

Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...