TP 6 : Question 3 : L'imbrication de boucle TantQue

Programmation Avancée

Modérateur : Douin

Christelle_R
Messages : 8
Inscription : 23 oct. 2016 14:56

TP 6 : Question 3 : L'imbrication de boucle TantQue

Message par Christelle_R » 27 nov. 2016 18:44

Grâce aux tests ici et là et les miens, j'ai pu résoudre quasiment tous mes problèmes, et me voilà au dernier. Le tenace, celui que je n'arrive pas à cerner !

1) test_CompilationDeBouclesTantQueImbriquées(question3) failed


Pourtant, je passe ces tests, le code généré compile :

Code : Tout sélectionner

public void testImbrication() throws Exception{
        Contexte m = new Memoire();
        Variable n = new Variable(m,"n",10);
        Variable s = new Variable(m,"s",0);
        Variable i = new Variable(m,"i",0);
        VisiteurExpression<Integer> ve = new VisiteurEvaluation(m);
        VisiteurExpressionBooleenne<Boolean> vb = new VisiteurBoolEvaluation(ve);
        VisiteurInstruction<Contexte> vi = new VisiteurInstEvaluation(ve,vb);

        VisiteurExpression<String> ves = new VisiteurInfixe(m);
        VisiteurExpressionBooleenne<String> vbs = new VisiteurBoolToString(ves);
        VisiteurInstruction<String> vs = new VisiteurInstToString(ves,vbs);
        VisiteurInstruction<String> vj = new VisiteurInstToJava(ves, vbs, 4);

        //pour (init, cond, inst, inc)
        Instruction inst = 
            new TantQue(
                new Inf (i,n),
                new Sequence(
                    new Sequence(
                        new Afficher(i),
                        new Pour(
                            new Affectation(s,new Constante(0)),
                            new Inf(s,new Constante(2)),
                            new Afficher(s),
                            new Affectation(s,new Addition(s,new Constante(1))
                            )
                        )
                    ),
                    new Affectation(i,new Addition(i,new Constante(1)))
                )
            );

        inst.accepter(vj);
        ClasseJava cj = new ClasseJava("TestAffichage", inst, vj);
        System.out.println(cj.sourceComplet());
        cj.enFichier();
    }

    public void testImbricationTanque() throws Exception{
        Contexte m = new Memoire();
        Variable n = new Variable(m,"n",10);
        Variable s = new Variable(m,"s",0);
        Variable i = new Variable(m,"i",0);
        VisiteurExpression<Integer> ve = new VisiteurEvaluation(m);
        VisiteurExpressionBooleenne<Boolean> vb = new VisiteurBoolEvaluation(ve);
        VisiteurInstruction<Contexte> vi = new VisiteurInstEvaluation(ve,vb);

        VisiteurExpression<String> ves = new VisiteurInfixe(m);
        VisiteurExpressionBooleenne<String> vbs = new VisiteurBoolToString(ves);
        VisiteurInstruction<String> vs = new VisiteurInstToString(ves,vbs);
        VisiteurInstruction<String> vj = new VisiteurInstToJava(ves, vbs, 4);

        //pour (init, cond, inst, inc)
        Instruction inst = 
            new Sequence(
                new TantQue(
                    new Inf (i,n),
                    new Sequence(
                        new TantQue(
                            new Inf(s,new Constante(2)),
                            new Sequence (
                                new Afficher(s),
                                new Affectation(s, new Addition (s, new Constante(1)))
                            )
                        ),
                        new Sequence(
                            new Affectation(i, new Addition (i, new Constante(1))),
                            new Affectation(s,new Constante(0))
                        )
                    )
                ),
                new Selection (
                    new Inf (n, new Constante (20)),
                    new Affectation(
                        s, 
                        new Addition(
                            new Multiplication(
                                new Soustraction(
                                    new Addition(
                                        n,new Constante(10)),
                                    new Constante (5)),
                                new Constante (4)),
                            new Constante (2))
                    ),
                    null)
            );

        inst.accepter(vj);
        ClasseJava cj = new ClasseJava("TestAffichage2", inst, vj);
        System.out.println(cj.sourceComplet());
        cj.enFichier();
    }
Merci pour l'aide.

Joris_Oziol
Messages : 52
Inscription : 15 oct. 2016 13:59

Re: TP 6 : Question 3 : L'imbrication de boucle TantQue

Message par Joris_Oziol » 27 nov. 2016 18:55

Code : Tout sélectionner

package question3;

/** NFP121 tp6, question3
   source Java généré par l'intermédiaire de votre visiteur "VisiteurInstToJava"
*/
public class BoucleTantQue{

  public static void main(String[] args)throws Exception{
    int i=0;
    int j=1;

    while(i < 10){
     
     
     while(j < 10){
      j=(j + 1);
     }
     
     i=(i + 1);
     j=1;
    }
  }

}
Avec ce test

Code : Tout sélectionner

public void test_CompilationDeBouclesTantQueImbriquees()throws Exception{
        Contexte m = new Memoire();
        Variable i = new Variable(m, "i");
        Variable j = new Variable(m, "j", 1); 

        Instruction inst = 
            new TantQue(
                new Inf(i, new Constante(10)),
                new Sequence(
                    new TantQue(
                        new Inf(j, new Constante(10)),
                        new Affectation(j, new Addition(j, new Constante(1)))
                    ),
                    new Sequence(
                        new Affectation(i, new Addition(i, new Constante(1))),
                        new Affectation(j, new Constante(1))
                    )
                )
            );

        VisiteurExpression<String> ves = new VisiteurInfixe(m);
        VisiteurExpressionBooleenne<String> vbs = new VisiteurBoolToJava(ves);
        VisiteurInstruction<String> vs = new VisiteurInstToJava(ves, vbs, 4);   

        ClasseJava cj = new ClasseJava("BoucleTantQue","question3", inst,vs);
        System.out.println(cj.sourceComplet());
        cj.enFichier();
    }
Voici le code compilé que j'obtiens et toi ?
Avec cela pas de pb sur jnews ...

Christelle_R
Messages : 8
Inscription : 23 oct. 2016 14:56

Re: TP 6 : Question 3 : L'imbrication de boucle TantQue

Message par Christelle_R » 28 nov. 2016 19:23

Merci beaucoup pour ce test.
J'ai compris d'où venait mon erreur. J'avais mal gérer le passage des "; " quand la boucle ne contenait qu'une seule Affectation et non une séquence.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité