Un programme pour Quine–McCluskey

Résolu
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009 - 21 avril 2009 à 01:29
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 - 21 avril 2009 à 22:51
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

cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 22:51
Pas de soucis la plupart des erreurs sont toutes bêtes ,
par contre n'oublie pas le tag "résolu"
à la prochaine
3
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 17:04
Salut,
je n'ai pas bien compris ce que tu voulais dire par "monter".
Quel logiciel utilises tu pour compiler ?
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 18:06
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."
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 18:20
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 18:26
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."
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 18:47
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.
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 19:31
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."
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 20:32
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 )
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 20:34
Je viens d'y faire attention mais lorsque tu lances ton application, tu lui passes bien en paramètre un fichier?
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 20:43
??? 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."
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 20:50
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."
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 21:06
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).
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 21:48
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."
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 21:49
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."
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 22:01
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."
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
21 avril 2009 à 22:03
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)
0
anjinho49 Messages postés 19 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 août 2009
21 avril 2009 à 22:32
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."
0
Rejoignez-nous