Page 1 sur 1

TP9 - question 1

Publié : 07 janv. 2018 12:10
par karsenty
Bonjour,

n'ayant pas compris comment faire des While et For dans le TP6, et n'ayant pas de correction, je ne vois pas comment remplacer les while et les for pour cette question 1.

Merci pour votre aide, cela me permettra peut être de commencer ce TP.

Florent

Re: TP9 - question 1

Publié : 07 janv. 2018 17:55
par ideligniere
Bonjour,

le tp6 est joint dans le tp9, ensuite, en vous aidant des structures de données du tp6, vous pouvez vous inspirer de la classe AST_Aff pour compléter les autres. Le test de la classe AST_Fact est déjà défini, le plus simple est de commencer par la classe AST_Fact du coup.
Les tests déjà définis vous aideront aussi à créer ceux demandés.

Isabelle

Re: TP9 - question 1

Publié : 08 janv. 2018 11:02
par karsenty
ok merci, je vais vais essayer comme cela.
Mais je dois dire que je suis un peu perdu avec ce langage WhileL.

Merci.

Florent

Re: TP9 - question 1

Publié : 08 janv. 2018 13:11
par Douin
Bonjour,

M. Karsenty a écrit
n'ayant pas compris comment faire des While et For dans le TP6, et n'ayant pas de correction,
Mettez du conditionnel, cela évite d'écrire de fausses assertions
Les corrections partielles sont en ligne en général quelques jours après la correction de vos rapport
ce lien est accessible via la page de l'unité http://lmi92.cnam.fr/progAvancee/source ... le_des_TP/

Bonne fin de tp

Re: TP9 - question 1

Publié : 08 janv. 2018 22:01
par karsenty
Bonsoir,

au temps pour moi, je n'avais pas trouvé les corrections.

Je vais donc regarder.

Merci et bonne soirée.

Florent


Nickel, c'est exactement ce qu'il me manquait. Merci.

Re: TP9 - question 1

Publié : 08 janv. 2018 23:10
par karsenty
Re Bonsoir,

donc, pour le factoriel, j'ai une erreur sur :

private Instruction ast = new Sequence(
new Affectation(xxx,n),
new Affectation(fact,un),
new TantQue(
new Sup(xxx,zero),
new Sequence(
new Affectation(fact,new Multiplication(fact,xxx)),
new Affectation(xxx,new Soustraction(xxx, un))
)
)
);

Cela me semble pourtant correct.

Re: TP9 - question 1

Publié : 09 janv. 2018 0:06
par slash
Bonsoir,

Je pense qu'il y a quand même une erreur : la Séquence permet d'enchaîner deux instructions seulement, donc il faut que tu fasses une Séquence comprenant une Affectation et une autre Séquence, si tu veux enchaîner plus de deux instructions.

Re: TP9 - question 1

Publié : 09 janv. 2018 7:57
par karsenty
Ok, merci, effectivement, ça marche mieux, mais bon, j'ai quand même une exception null au final :-(

Re: TP9 - question 1

Publié : 09 janv. 2018 20:33
par Thomas P
Bonjour,

Personnellement, n'ai pas compris à quoi correspondent ces mots clés (et n'arrive donc pas à les "traduire" en AST) :
- ftp;
- fpt;
- fi;
- end (sans ;)

Quelqu'un peut-il m'éclairer ?

Merci par avance de votre aide
Thomas P


PS : je viens de tester ma classe AST_Fact avec la classe de test fournie. Celle-ci a l'air de bien fonctionner (pas d'erreur) mais la console m'affiche 0, est-ce normal ?
Si je comprend bien la classe de test, on doit obtenir la factorielle de 10 donc 3 628 800, non ?

Re: TP9 - question 1

Publié : 09 janv. 2018 22:43
par karsenty
Bonsoir,

ce que je comprends, c'est :
ftp => fin tant que
fpt => fin tant que
fi => fin if
end => fin tant que

Pour moi aussi, c'est un peu du chinois l'AST.

Bon courage.
Florent

Re: TP9 - question 1

Publié : 13 janv. 2018 13:58
par julien_24
Bonjour a tous,

@Karsenti

Es ce que tu as fini par trouver la solution??
Je ne réussis pas a affecter la valeur de n dans mon instruction ast.

Ce que je comprends c'est qu'au moment de la création de l'objet, les variables d'instance sont declarées et initialisées avant appel du constructeur.
J'ai bien tenter de modifier la valeur dans le constructeur mais cela ne marche pas. je copie mon code ce sera peut etre plus simple a comprendre:

private Integer val = new Integer(0);
private Variable xxx = new Variable(m, "xxx", 0);

private Variable fact = new Variable(m, "fact", 1);

private Instruction ast = new Sequence(new Affectation(xxx, new Constante(val.intValue())),
new TantQue(
new Sup(xxx, new Constante(0)),
new Sequence(
new Affectation(fact, new Multiplication(fact, xxx)),
new Affectation(xxx, new Soustraction(xxx, new Constante(1)))
)
)
);

Dans le constructeur si j'ajoute val = n;

Cela ne change rien a la valeur dans la constante de ma premiere affectation dans l'instruction ast. La constante reste égale à zero.
J'ai changer Constante par Variable, ne change rien (modifier une constante n'est pas logique).
Si a la place de ma declaration de Constante ou Varaiable, je mets la valeur 10 (new Constante(10)), le test passe.

Si quelqu'un a une explication, merci d'avance.

julien

Re: TP9 - question 1

Publié : 13 janv. 2018 15:08
par julien_24
Bonjour,,

J'ai compris la grosse erreur que je fais, les objets sont construits et changer la valeur du paramètre a posteriori n'a aucun effet.

Maintenant a part instancier l'instruction ast dans le constructeur, je ne vois pas comment faire, je suis pas certain que c'est ce qui est demandé.

julien

Re: TP9 - question 1

Publié : 13 janv. 2018 15:15
par karsenty
Bonjour,

alors en fait, j'ai utilisé la méthode décrite dans un autre sujet :

private Variable m1 = new Variable(m, "m1");
public AST_Fact(int n) {
m.ecrire("m1", n);
ast = new Sequence( new Affectation(xxx, new Constante(m.lire("m1"))) ....

Cela me permet de récupérer la valeur de n et de la traiter.

Je ne sais pas trop comment faire autrement, mais de cette manière cela fonctionne plutôt bien.

Bonne continuation.
Florent

Re: TP9 - question 1

Publié : 13 janv. 2018 15:43
par slash
Bonjour,

C'est un point qui m' a aussi posé problème.

J'ai été induit en erreur par le fait que le test déjà écrit pour tester AST_Aff (testSimple) utilisait une nouvelle mémoire (Contexte m = new Memoire();). Du coup, en copiant collant ce bout de code pour créer mes autres tests, je créais toujours une nouvelle mémoire pour tester. En soit, cela ne pose pas de problème pour les tests de la première question si on affecte une valeur constante à la variable contentant la valeur donnée en paramètre (n pour AST_Fact, a et b pour AST_Mult1, etc.). Pour autant, ce n'était pas ce qui était demandé :

Dans la question 2, pour AST_Fact, l'énoncé indique que la première affectation de xxx dans le code XML doit être formalisée comme ceci :
<Affectation>
<Variable>xxx</Variable>
<Variable>n</Variable>
</Affectation>

On affecte donc bien une variable (n) dans une autre (xxx), et pas une constante (de la valeur de n) dans la variable xxx.
La première affectation est donc donnée par : new Affectation(xxx,n) . Et la variable n doit bien être déclarée en tant que telle, de la même manière que xxx.

Ensuite, dans la classe de tests TestDesSer, il faudra bien penser à récupérer la mémoire de AST_Fact (et non en créer une nouvelle comme dans test_simple()) pour instancier le visiteur.

J'espère vous avoir aidé.

Re: TP9 - question 1

Publié : 14 janv. 2018 19:01
par Raphael
Merci de ton aide.

Je bloquais sur cette question depuis un moment et je commençais vraiment à m'arracher les cheveux :(

Il manquait juste la déclaration pour la variable n
Il ne reste plus qu'à voir si je passe les test Jnews mais avant il faut compléter les autres classes.

Raphael