TP9 - question 1

Programmation Avancée

Modérateur : Douin

Répondre
karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

TP9 - question 1

Message par karsenty » 07 janv. 2018 12:10

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

ideligniere
Messages : 8
Inscription : 08 oct. 2017 23:08

Re: TP9 - question 1

Message par ideligniere » 07 janv. 2018 17:55

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

karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

Re: TP9 - question 1

Message par karsenty » 08 janv. 2018 11:02

ok merci, je vais vais essayer comme cela.
Mais je dois dire que je suis un peu perdu avec ce langage WhileL.

Merci.

Florent

Douin
Messages : 343
Inscription : 18 mars 2009 15:46

Re: TP9 - question 1

Message par Douin » 08 janv. 2018 13:11

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

karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

Re: TP9 - question 1

Message par karsenty » 08 janv. 2018 22:01

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.

karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

Re: TP9 - question 1

Message par karsenty » 08 janv. 2018 23:10

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.

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP9 - question 1

Message par slash » 09 janv. 2018 0:06

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.

karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

Re: TP9 - question 1

Message par karsenty » 09 janv. 2018 7:57

Ok, merci, effectivement, ça marche mieux, mais bon, j'ai quand même une exception null au final :-(

Thomas P
Messages : 15
Inscription : 29 oct. 2017 16:07

Re: TP9 - question 1

Message par Thomas P » 09 janv. 2018 20:33

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 ?

karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

Re: TP9 - question 1

Message par karsenty » 09 janv. 2018 22:43

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

julien_24
Messages : 47
Inscription : 17 oct. 2017 13:41

Re: TP9 - question 1

Message par julien_24 » 13 janv. 2018 13:58

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

julien_24
Messages : 47
Inscription : 17 oct. 2017 13:41

Re: TP9 - question 1

Message par julien_24 » 13 janv. 2018 15:08

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

karsenty
Messages : 27
Inscription : 09 oct. 2017 22:30

Re: TP9 - question 1

Message par karsenty » 13 janv. 2018 15:15

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

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP9 - question 1

Message par slash » 13 janv. 2018 15:43

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é.

Raphael
Messages : 28
Inscription : 24 oct. 2016 17:43

Re: TP9 - question 1

Message par Raphael » 14 janv. 2018 19:01

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

Répondre

Qui est en ligne ?

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