Je ne vais pas vous expliquer ici la théorie logique du calcul des propositions, j’en serais bien incapable, mais je vais vous faire un rappel important concernant l’application des lois de De Morgan car elles sont source d’erreur pour tout développeur débutant.

Lois de De Morgan :

La négation de la conjonction de deux propositions est équivalente à la disjonction des négations des deux propositions.
La négation de la disjonction de deux propositions est équivalente à la conjonction des négations des deux propositions.

Autrement dit:

non (A ou B) = non A et non B
non (A et B) = non A ou non B

Il faut donc être vigilant dans un programme si vous êtes amené à coder un test sur des non-conditions multiples.

Prenons par exemple le cas d’un test pour lequel la situation familiale doit être différente de “célibataire” ou différente de “veuf” ou différente de “marié”, vous serez sans doute tenté de coder comme suit:

IF SITU-FAMILLE NOT = ‘C’ OR
   SITU-FAMILLE NOT = ‘V’ OR
   SITU-FAMILLE NOT = ‘M’
      [...]
END-IF.

En fait vous aurez tout faux car avec la loi de dualité vue plus haut, il aurait fallu coder ainsi:

IF SITU-FAMILLE NOT = ‘C’ AND
   SITU-FAMILLE NOT = ‘V’ AND
   SITU-FAMILLE NOT = ‘M’
      [...]
END-IF.

« Branchement conditionnel »
[Source : © nojhan 2010-03-17 – Geekscottes]