En fait je voulais faire la surprise, en pondant certe un code de merde..Mais qui sortait le resultat escompté.
Apres 4 heures de codages...j'en suis arrivé a 80 % et les 20 % qui restent sont encore pire que le reste
Surement un des matheux du forum connait.
Elle paraissait plus simple a adapter pour moi, que KARNAUGH...mais les apparences sont parfois trompeuses.
Bon avec toutes ces heures perdues...j'aurais surement fini mes 10 conditions qui s'imbriquent, si j'avais pas eu cette idée a la con de vouloir simplifier
Alors attention...si y'en a que ça amuse de finir....surtout derriere moi, c'est pas triste
Code : Tout sélectionner
Global Dim F(15,15,15,15)
Debug "Pour examiner cette méthode, nous prendrons un exemple à quatre variables."
Debug "Partons de la table de vérité de la fonction f (a, b, c, d)"
Debug ""
Debug "F(a, b, c, d)"
Debug "-------------"
Debug "F(0, 0, 0, 0) = 1 ==> Ligne 1"
Debug "F(0, 0, 0, 1) = 1 ==> Ligne 2"
Debug "F(0, 0, 1, 0) = 1 ==> Ligne 3"
Debug "F(0, 0, 1, 1) = 0 ==> Ligne 4"
Debug "F(0, 1, 0, 0) = 1 ==> Ligne 5"
Debug "F(0, 1, 1, 0) = 1 ==> Ligne 6"
Debug "F(0, 1, 1, 1) = 0 ==> Ligne 7"
Debug "F(1, 0, 0, 0) = 1 ==> Ligne 8"
Debug "F(1, 0, 0, 1) = 1 ==> Ligne 9"
Debug "F(1, 0, 1, 0) = 0 ==> Ligne 10"
Debug "F(1, 0, 1, 1) = 0 ==> Ligne 11"
Debug "F(1, 1, 0, 0) = 1 ==> Ligne 12"
Debug "F(1, 1, 0, 1) = 1 ==> Ligne 13"
Debug "F(1, 1, 1, 0) = 1 ==> Ligne 14"
Debug "F(1, 1, 1, 1) = 1 ==> Ligne 15"
Debug ""
; Chargement du tableau
F(0, 0, 0, 0) = 1 ;1
F(0, 0, 0, 1) = 1 ;2
F(0, 0, 1, 0) = 1 ;3
F(0, 0, 1, 1) = 0 ;4
F(0, 1, 0, 0) = 1 ;5
F(0, 1, 1, 0) = 1 ;6
F(0, 1, 1, 1) = 0 ;7
F(1, 0, 0, 0) = 1 ;8
F(1, 0, 0, 1) = 1 ;9
F(1, 0, 1, 0) = 0 ;10
F(1, 0, 1, 1) = 0 ;11
F(1, 1, 0, 0) = 1 ;12
F(1, 1, 0, 1) = 1 ;13
F(1, 1, 1, 0) = 1 ;14
F(1, 1, 1, 1) = 1 ;15
Debug "Nous pouvons constater que la fonction f est «vraie» (égale à 1) pour onze combinaisons des variables a, b, c et d."
Debug "Donnons comme nom à chacune de ces combinaisons la valeur décimale qui correspond au code binaire formé par les "
Debug "variables a, b, c, d en considérant que a est le bit de poids fort et d le bit de poids faible."
Debug ""
Debug "Exemple :"
Debug "0110 = (a)bc(d) : nous l'appellerons la combinaison 6 puisque 0110 en binaire équivaut à 6 en décimal."
Debug "F(0, 1, 1, 0) = 1 ;6"
Debug ""
Debug "Si nous récapitulons, la fonction f est donc la somme des combinaisons résumées dans cette figure :"
Debug ""
; a b c d | COMBINAISONS
; =====================
; 0 0 0 0 | Combinaison 0
; 0 0 0 1 | Combinaison 1
; 0 0 1 0 | Combinaison 2
; 0 1 0 0 | Combinaison 4
; 0 1 1 0 | Combinaison 6
; 1 0 0 0 | Combinaison 8
; 1 0 0 1 | Combinaison 9
; 1 1 0 0 | Combinaison 12
; 1 1 0 1 | Combinaison 13
; 1 1 1 0 | Combinaison 14
; 1 1 1 1 | Combinaison 15
Debug "a b c d | COMBINAISONS"
Debug "====================="
Dim TabloCombinaison(0)
Dim ValeurCombinaison.s(0)
For i = 0 To ArraySize(F())
TexteBin$ = Right("000" + Bin(i), 4)
Bit1 = Val(Left(TexteBin$, 1))
Bit2 = Val(Mid(TexteBin$, 2, 1))
Bit3 = Val(Mid(TexteBin$, 3, 1))
Bit4 = Val(Right(TexteBin$, 1))
If F(Bit1, Bit2, Bit3, Bit4) = #True
Debug Str(Bit1) + " " + Str(Bit2) + " " + Str(Bit3) + " " + Str(Bit4) + " " + " | Combinaison " + Str(i)
ReDim TabloCombinaison(i)
ReDim ValeurCombinaison(i)
TabloCombinaison(i) = i
ValeurCombinaison(i) = Str(Bit1) + Str(Bit2) + Str(Bit3) + Str(Bit4)
EndIf
Next
Debug ""
Debug "Cette liste peut être récapitulée de la façon suivante :"
For i = 1 To ArraySize(TabloCombinaison())
If TabloCombinaison(i)
PhraseCombinaison$ + Str(TabloCombinaison(i)) + ","
EndIf
Next
PhraseCombinaison$ = Left(PhraseCombinaison$, Len(PhraseCombinaison$) - 1)
Debug "F = SIGMA(" + PhraseCombinaison$ + ")"
Debug ""
Debug "A partir de cette liste de combinaisons commence réellement la méthode de QUINE-MAC CLUSKEY."
Debug "La première chose à faire est de classer ces combinaisons en un ensemble successifs en fonction du nombre de zéros"
Debug "de la forme binaire de chaque combinaison en commençant par celle qui en compte le plus."
Debug ""
Debug "Le premier ensemble est donc formé par la combinaison 0 dont la forme binaire 0000 comporte quatre zéros."
Debug "Le second ensemble regroupe les combinaisons comportant trois zéros ... "
Debug "jusqu'au cinquième qui est formé de la combinaison 15 dont la forme binaire 1111 ne comporte pas de zéro du tout."
Debug ""
Debug "Les cinq ensembles sont représentés cette figure :"
Dim TabloEnsembleZero.s(50)
x = 1
NumEnsemble = 0
For NbreZeroRechercher = 4 To 0 Step - 1
NumEnsemble + 1
Debug ""
; Compte les zeros
For u = 0 To ArraySize(ValeurCombinaison())
If CountString(ValeurCombinaison(u), "0") = NbreZeroRechercher And Trim(ValeurCombinaison(u)) <> ""
Debug "Combinaison " + Str(u) + " | " + ValeurCombinaison(u) + " | Ensemble " + Str(NumEnsemble) + " (" + Str(NbreZeroRechercher) + " zéros)"
TabloEnsembleZero(x) + Str(u) + "|"
EndIf
Next
x + 1
Next
ReDim TabloEnsembleZero(x)
Debug ""
Debug "La seconde phase de la méthode consiste à comparer les termes de chaque ensemble avec les termes de l'ensemble qui suit immédiatement"
Debug "de façon à éliminer une variable si cela est possible."
Debug ""
Debug "La combinaison 0000 de l'ensemble 1 doit donc être comparée aux quatre combinaisons de l'ensemble 2."
Debug "Puis chacune des quatre combinaisons de cet ensemble 2 sera comparée à chacune des trois combinaisons de"
Debug "l'ensemble 3 et ainsi de suite jusqu'à l'ensemble 5..."
Debug ""
Debug "Lorsque deux combinaisons ne diffèrent que d'UNE VARIABLE, celles-ci peuvent être associées pour n'en former plus qu'une dans laquelle"
Debug "la variable qui diffère peut être éliminée."
Debug ""
Debug "Quand une variable s'élimine dans une telle association, on signale ce fait en remplaçant cette variable par une croix (ou tout autre signe à votre convenance)."
Debug "Dans l'exemple que nous avons choisi, les combinaisons 0 et 1 peuvent, par exemple, être associées puisque seule la variable d est différente :"
Debug ""
Dim TabloEnsembleCroix.s(0)
x = 0
For a = 1 To ArraySize(TabloEnsembleZero()) - 1 ; Boucle de lecture des Ensembles combinaisons
For h = 1 To CountString(TabloEnsembleZero(a), "|") ; Boucle de lecture des combinaisons
NumTabloCombinaison1 = Val(StringField(TabloEnsembleZero(a), h, "|"))
ValPremierElement = 0
; Calcul de la valeur du premier element
For i = 1 To Len(Trim(ValeurCombinaison(NumTabloCombinaison1)))
ValPremierElement + Val(Mid(ValeurCombinaison(NumTabloCombinaison1), i, 1))
Next
For o = 1 To ArraySize(ValeurCombinaison())
NumTabloCombinaison2 = Val(StringField(TabloEnsembleZero(a + 1), o, "|"))
If Not NumTabloCombinaison2
Continue
EndIf
ValSecondElement = 0
; Calcul de la valeur du second element
For i = 1 To Len(Trim(ValeurCombinaison(NumTabloCombinaison2)))
ValSecondElement + Val(Mid(ValeurCombinaison(NumTabloCombinaison2), i, 1))
Next
If Abs(ValPremierElement - ValSecondElement) = 1 ; Difference entre les deux elements de 1
; Recherche des croix
Temp_TabloEnsembleCroix$ = ""
DifferenceCombinaison = 0
For z = 1 To Len(ValeurCombinaison(NumTabloCombinaison1))
If Mid(ValeurCombinaison(NumTabloCombinaison1), z, 1) <> Mid(ValeurCombinaison(NumTabloCombinaison2), z, 1)
DifferenceCombinaison + 1
Temp_TabloEnsembleCroix$ + "X"
Else
Temp_TabloEnsembleCroix$ + Mid(ValeurCombinaison(NumTabloCombinaison1), z, 1)
EndIf
Next
If DifferenceCombinaison = 1
x + 1
ReDim TabloEnsembleCroix(x)
TabloEnsembleCroix(x) + Temp_TabloEnsembleCroix$
Debug Str(NumTabloCombinaison1) + " - " + Str(NumTabloCombinaison2) + " = " + TabloEnsembleCroix(x)
EndIf
EndIf
Next
Next
Debug ""
Next
Debug "Nous obtenons de nouveaux membres regroupés à présent dans quatre ensembles I, II, III et IV."
Debug "Recommençons la même opération avec ces nouveaux ensembles. La figure suivante donne les nouvelles combinaisons obtenues."
Debug ""