Un programme pour Quine–McCluskey

[Résolu]
Signaler
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009
-
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011
-
Bonjour,
J'aimerais savoir si quelqu'un pourrait m'aider. Quine–McCluskey est une "logique" (si je peux appeler ça comme ça) qui permet de minimiser une équation logique (algèbre de boole pour ceux qui en ont entendu parler).

J'ai trouvé sur Wikipédia un programme en JAVA pour pouvoir résoudre les équations à l'aide d'un programme. Mais je n'arrive pas à le faire fonctioner (sans dire que je ne suis pas encore au point au niveau du java).

C'est un programme qui m'intéresse du point de vue pédagogique personnel (Je me mets à tester des petits programmes pour apprendre le java que je trouve sur le net mais bon.. pour l'instant c'est pas trop top). Celui-ci m'intéresse particulièrement parce que dans wikipédia ils expliquent plus ou moins pourquoi ci ou pourquoi ça.
Mais c'est que je n'arrive pas à "monter" le programme comme il faut. En tout cas, c'est encore un que je n'ai pas réussi à compiler.

Conséquence : je déduie que je n'ai pas encore la logique de "structuration".
Enfin, si quelqu'un est disponible pour aider (ou expliquer), ce serait gentil.

Merci d'avance.

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."

Dave Barry
Extrait des  Chroniques déjantées d'internet

17 réponses

Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Pas de soucis la plupart des erreurs sont toutes bêtes ,
par contre n'oublie pas le tag "résolu"
à la prochaine
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
je n'ai pas bien compris ce que tu voulais dire par "monter".
Quel logiciel utilises tu pour compiler ?
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

Eclipse.
Et le programme est ici : http://en.literateprograms.org/Quine-McCluskey_algorithm_(Java)
Monter = ce serait comment séparer des classes ... parce que pour moi il y en a que 2 celle pour formula et celle ce Term et ensuite j'ajoute les compléments de codes qui sont des les liens (parce que c'est comme ça que je comprend qu'il faut faire).
Par exemple celui de term c'est  ça:
import java.util.*;
Term import statements

classTerm{
publicstaticfinalbyteDontCare =2;

publicTerm(byte[]varVals){
this.varVals=varVals;
}

publicintgetNumVars(){
returnvarVals.length;
}

Term public methods

privatebyte[]varVals;
}
Le Term import statement est un lien qui donne la ligne de code.
Donc je la reprend et je la met à même place que le texte indiqué.
Est-ce ainsi qu'il faut procéder?

Merci de l'aide.

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

C'est bien cela qu'il faut faire.

Tu as bien 2 classes : Term.java et Formula.java

Il faut bien remplacer les liens par les lignes de codes indiquées. Tu peux aussi mettre certaines parties de codes dans des méthodes (ce qui sera plus simples par la suite pour d'éventuelles modifications mais comme tu débutes ne modifie rien)
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

Le problème c'est que ça m'indique des erreurs comme quoi certaines "the field X is never read locally" .. et je ne comprends pas pourquoi. Aussi il y a du code en plus donné et je ne vois pas trop où le placer. C'est pour ça que je me demandais s'il me fallait créer une autre classe par exemple.

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Pas besoin d'avoir d'autres classes. Si tu ne trompes pas dans tes remplacements de liens par les blocs de code tu ne devrais pas avoir de soucis.

Par contre tu pourrais me donner plus d'informations sur cette erreur?! Elle ressemble plus à un warning qu'à une erreur en fait.
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

Bonjour,
Alors les soucis de "the field X is never read locally" c'est pas une erreur (comme vous l'aviez dit). Je m'inquiétais pour rien.
L'erreur que j'ai c'est dans :
//    <<Formula test main>>=
    public static void main(String[] args) throws IOException {
        Formula f = Formula. read (new BufferedReader(new FileReader(args[0])));
        f.reduceToPrimeImplicants();
        System.out.println(f);
        f.reducePrimeImplicantsToSubset();
        System.out.println(f);
    }
}

Alors tout ce qui est en gras et souligné ("reduceToPrimeImplicants" et "read") ça me dit qu'il faut :
<li>soit créer une méthode</li><li>soit "Add cast to f."</li>J'ai donc cherché la méthode pour reduceToPrimeImplicants et j'ai trouvé donc ça :

<<Formula public methods>> =
publicvoidreducePrimeImplicantsToSubset(){
// <<create implies table>>=
int numPrimeImplicants =termList.size();
intnumOriginalTerms= originalTermList.size ( );
boolean[][]table =newboolean[numPrimeImplicants][numOriginalTerms];
for(intimpl= 0;impl<numPrimeImplicants;impl++ ) {
for(intterm =0;term<numOriginalTerms;term++){
table[impl][term]= termList.get ( impl). implies</gras> (originalTermList.get(term));
}
}
// <<extract implicants heuristically until done>> =
ArrayList<Term>newTermList= new ArrayList<Term>();
booleandone =false;
intimpl;
while(!done){
impl= extractEssentialImplicant ( table);
if(impl! =-1){
newTermList.add(termList.get(impl));
}else{
impl= extractLargestImplicant ( table<gras>);
if(impl! =-1){
newTermList.add(termList.get(impl));
}else{
done= true ;
}
}
}
termList =newTermList;
originalTermList=null;
}

Mais je ne sais pas où le mettre puisque ce n'était pas indiqué.
Je l'ai mis juste après "Formula public methods". Et les erreurs ne se sont pas résolues.
Sans dire que maintenant j'ai une erreur aussi au niveau de l'ajout qui se trouve sur
implies et extractLargestImplicant. Les conseils pour résoudre le problème étaient
les mêmes sauf que pour extractLargestImplicant on me conseil de changer par
extractEssentialImplicant.
Donc je suis partie à la recherche de ces trucs là. Mais je commence à me perdre
Du coup je ne sais trop où mettre quoi maintenant. (enfin pour ce qu'il reste).

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

D'accord, il serait possible de me transmettre ton fichier (Formula.java) ou me montrer entièrement ta classe pour voir éventuellement comment elle est composée? (en MP )
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Je viens d'y faire attention mais lorsque tu lances ton application, tu lui passes bien en paramètre un fichier?
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

??? je ne comprends pas la question?!

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

genre quelque chose avec une équation pour que ça soit résolu?

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Voila !! du genre :
<<example.txt>>
000
010
011
110
101
111

Et lorsque tu lances ton application tu devrais avec "example.txt" en paramètre (ou le chemin d'accès du fichier).
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

C'est bien la première fois que je dois faire ça... je croyais que j'allais entrer des données moi même.
d'ailleurs je n'ai plus aucun des problèmes que j'ai cité auparavant. Maintenant lors de la compilation j'ai ça :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Formula.main(Formula.java:162)

et je pense que ça a un rapport avec mettre quelque chose en paramètre. Mais c'est que j'ai pensé qu'il suffisait d'utiliser un fichier.txt comme tu as donné dans ton exemple en le mettant dans le dossier où je trouve le .project
Mais bon vue l'erreur que j'ai ça doit pas être ça.

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

C'est bien la première fois que je dois faire ça... je croyais que j'allais entrer des données moi même.
d'ailleurs je n'ai plus aucun des problèmes que j'ai cité auparavant. Maintenant lors de la compilation j'ai ça :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Formula.main(Formula.java:162)

et je pense que ça a un rapport avec mettre quelque chose en paramètre. Mais c'est que j'ai pensé qu'il suffisait d'utiliser un fichier.txt comme tu as donné dans ton exemple en le mettant dans le dossier où je trouve le .project
Mais bon vue l'erreur que j'ai ça doit pas être ça.

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

C'est bien la première fois que je dois faire ça... je croyais que j'allais entrer des données moi même.
d'ailleurs je n'ai plus aucun des problèmes que j'ai cité auparavant. Maintenant lors de la compilation j'ai ça :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Formula.main(Formula.java:162)

et je pense que ça a un rapport avec mettre quelque chose en paramètre. Mais c'est que j'ai pensé qu'il suffisait d'utiliser un fichier.txt comme tu as donné dans ton exemple en le mettant dans le dossier où je trouve le .project
Mais bon vue l'erreur que j'ai ça doit pas être ça.

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Ton erreur indique qu'il y  a un problème au niveau de taille d'un tableau. Il est possible que cela soit l'arraylist utilisée. En fait, il n'y a aucun élément dans le tableau, il est vide .... donc on ne peut pas effectuer de traitement.

Afin d'enlever tout doutes possibles, mets en paramètres le chemin absolu du fichier (comme cela peu importe où il se localise sur le disque ça va marcher)
Messages postés
19
Date d'inscription
vendredi 2 janvier 2009
Statut
Membre
Dernière intervention
31 août 2009

Bon alors le soucis ct de simples guillemets (soupir de désespoir) ... j'avais
Formula f = Formula.read(new BufferedReader(new FileReader(exemple.txt)));
au lieu de :
Formula f = Formula.read(new BufferedReader(new FileReader("exemple.txt")));

arf c'est triste d'être aussi nulle quand mm!

Merci beaucoup pour l'attention c'est très gentil!!! Dsl du dérangement aussi

Rosy Vilela

"Nous ne pouvons pas prédire où nous conduira la Révolution Informatique. Tout ce que nous savons avec certitude, c'est que, quand on y sera enfin, on n'aura pas assez de RAM."