TP6 Q3 : Boucle For

Programmation Avancée

Modérateur : Douin

gautierd
Messages : 49
Inscription : 12 oct. 2016 14:55

TP6 Q3 : Boucle For

Message par gautierd » 26 nov. 2016 21:26

Bonjour à tous,
j'essaye actuellement de mettre au point la méthode de la boucle for.
J'ai le code suivant dans la classe VisiteurInstEvaluation. Mon test de boucle Pour m'indique que je ne renvoie qu'un vecteur null.
Mais que doit faire la méthode accepter de la classe For ?
Merci d'avance.

public Contexte visite(Pour pour) {
pour.init();
TantQue tq = new TantQue(pour.cond(), pour.inc());
tq.i1().accepter(this);
visite(tq);
return this.vi.contexte();
}

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

Joris_Oziol

Message par Joris_Oziol » 27 nov. 2016 1:30

Pour et Tantque ...
For et while ...
Ce n'est pas la même chose ...

tasic
Messages : 28
Inscription : 09 oct. 2016 14:13

Re: TP6 Q3 : Boucle For

Message par tasic » 27 nov. 2016 4:11

@Joris_Oziol
Et pourtant

Code : Tout sélectionner

for(i=0;i<10;i++) {
//une instruction
}
et identique à

Code : Tout sélectionner

i=0
while(i<10) {
//une instruction
i++
}
Perso j'ai utilisé TantQue dans mon Pour et ça marche très bien
Pourquoi réinventer la roue ?

@gautierd
En faites tu acceptes l'ensemble de TantQue sauf l'initialisation.
tu n'as pas besoin de la variable TantQue tq et tu auras sans doute besoin d'une Sequence pour y glisser ton instruction.

courage

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

Re: TP6 Q3 : Boucle For

Message par Joris_Oziol » 27 nov. 2016 16:01

@tasic

tu as entièrement raison ... j'ai réinventé la poudre et en plus j'avais faux d'où mes stackoveflow de jnews malgré mes 0 fautes aux tests distants.
En utilisant tes conseils ... plus de stackoverflow ;-) Merci

gautierd
Messages : 49
Inscription : 12 oct. 2016 14:55

Re: TP6 Q3 : Boucle For

Message par gautierd » 27 nov. 2016 16:17

Merci pour le retour.
Du coup j'ai écrit les lignes suivantes en me basant sur vos réponses :
public Contexte visite(Pour pour) {
Sequence seq = new Sequence (pour.init(),new TantQue(pour.cond(),new Sequence(pour.i1(),pour.inc())));
seq.accepter(this);
return this.vi.contexte();
}

Mais ce qui me chagrine aussi, c'est qu'il y a dans la classe For une modification à faire pour le visiteur. Pourquoi ?

tasic
Messages : 28
Inscription : 09 oct. 2016 14:13

Re: TP6 Q3 : Boucle For

Message par tasic » 27 nov. 2016 16:54

@gautierd
Je ne comprends pas ton chagrin ?
Tu parles de la classe Pour

Code : Tout sélectionner

	public <T> T accepter(VisiteurInstruction<T> vi) {
		return vi.visite(this); // à compléter
	}
Celle là ?

Si c'est bien ça, c'est juste pour éviter les erreurs dans les questions d'avant sinon il aurait fallu la traiter dès le début. (enfin je crois ^^)

Tu peux tester ça voir si ça marche (c'est la version simplifié du test de notre bon professeur :) )

Code : Tout sélectionner

	public void testPourIterations() {
		Contexte m = new Memoire();
		Variable i = new Variable(m, "i", 0);
		VisiteurExpression ve = new VisiteurEvaluation(m);
		VisiteurExpressionBooleenne vb = new VisiteurBoolEvaluation(ve);
		VisiteurInstruction vi = new VisiteurInstEvaluation(ve, vb);
		VisiteurExpression ves = new VisiteurInfixe(m);
		VisiteurExpressionBooleenne vbs = new VisiteurBoolToString(ves);
		VisiteurInstruction vs = new VisiteurInstToString(ves, vbs);

		Instruction inst = new Pour(
				new Affectation(i, new Constante(0))
				,
				new Inf(i, new Constante(10))
				,
				new Affectation(i, new Addition(i, new Constante(1)))
				,	
				new Afficher(i)
				);

		inst.accepter(vi);
	}
Tu dois avoir dans ton Sysout
0
1
2
3
4
5
6
7
8
9

gautierd
Messages : 49
Inscription : 12 oct. 2016 14:55

Re: TP6 Q3 : Boucle For

Message par gautierd » 27 nov. 2016 20:00

Je te remercie beaucoup pour ton retour.

C'était bien de cette fonction que je parlais. Ensuite, grâce à ton test, j'obtiens bien la même trace que toi.

Après tout çà, il me reste quand même les erreurs suivantes.
There were 6 failures:
1) testSelection(question3) failed
2) test_CompilationExecutionDeMult_7_85(question3) failed
3) test_CompilationExecutionDUneBouclePour(question3) failed
4) test_CompilationDeMult(question3) failed
5) test_CompilationDeBouclesTantQueImbriquées(question3) failed
6) test_CompilationDeBouclesPourImbriquées(question3) failed
Ce qui me gêne le plus c'est le testSelection.

Pourtant mon code n'est que
public Contexte visite(Selection sel) {
if(sel.cond().accepter(vb)) {
sel.i1().accepter(this);
}
else {
sel.i2().accepter(this);
}
return this.vi.contexte();
}

Est-ce que quelqu'un peut avoir une idée ?

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

Re: TP6 Q3 : Boucle For

Message par Joris_Oziol » 27 nov. 2016 20:08

Code : Tout sélectionner

if(sel.cond().accepter(this.vb)){
            sel.i1().accepter(this);
        }else{
            if (sel.i2() != null)  {
                sel.i2().accepter(this);
            }
        }
        return this.vi.contexte(); 

gautierd
Messages : 49
Inscription : 12 oct. 2016 14:55

Re: TP6 Q3 : Boucle For

Message par gautierd » 27 nov. 2016 22:16

Merci beaucoup pour la réponse, le test du coup passe mais jamais je n'aurais penser seul à ajouter cette condition ...

Répondre

Qui est en ligne ?

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