Bonjour,
j'ai un échec que je ne comprends pas : 1) testMult2(question1) : tantque (m2 >0) faire si (m2 / (2 * 2) alors m1 := (m1 * 2) sinon m2 := (m2 / 2) fsi; produit := (produit + m1) ; m2 := (m2-1) ftq; afficher(produit) ne donne pas le résultat attendu...
Pour commencer, dans les commentaires de la classe AST_Mult2, ainsi que sur la page d'instructions du tp l'opération est :
m2 / 2 * 2
et non :
m2 / (2 * 2)
en effet, le résultat n'est pas le même, mais que je code l'une ou l'autre de ces opérations, j'ai le même échec.
Mon test sur cette classe fonctionne en local.
Ensuite, je me suis posé la question : l'algorithme ne donne pas le même résultat si l'on utilise des types int ou double ? Mais je ne vois pas comment appliquer la conversion de cette opération dans la classe AST_Mult2 si c'est ça la cause ?
Bref, je ne vois pas comment corriger cet échec, merci d'avance si quelqu'un a une piste pour moi.
Isabelle
TP9 Question 1 class AST_Mult2
Modérateur : Douin
Re: TP9 Question 1 class AST_Mult2
Bonsoir,
Cette implémentation a passé JNEWS pour moi:
Les opérations se font avec des entiers de bout en bout pour moi... Et en effet, la bonne formule est (m2/2) * 2 dans la condition du if...
Désolé pour le formatage qui n'est pas pris en compte par phpBB...
Bon courage,
CR
Cette implémentation a passé JNEWS pour moi:
Code : Tout sélectionner
public class AST_Mult2 extends AST_Progr implements java.io.Serializable {
/*
* a := 7 ; b := 85 ; produit := 0 ; m1:=a ; m2:=b; while (m2 > 0) do if
* (m2/2*2)=m2 then m1:= m1*2 ; m2 := m2/2;end produit := produit + m1 ;
* m2:=m2-1; end afficher(produit);
*/
private Contexte m = new Memoire();
private Variable m1 = new Variable(m, "m1");
private Variable m2 = new Variable(m, "m2");
private Constante Zero = new Constante(0);
private Constante Un = new Constante(1);
private Constante Deux = new Constante(2);
private Variable produit = new Variable(m, "produit");
public AST_Mult2(int n1, int n2) {
m.ecrire("m1", n1);
m.ecrire("m2", n2);
ast = new Sequence(new Affectation(produit, Zero), new Sequence(new Affectation(m1, new Constante(m.lire("m1"))),
new Sequence(new Affectation(m2, new Constante(m.lire("m2"))),
new TantQue(new Sup(m2, Zero), new Sequence(new Selection(new Egal(new Multiplication(new Division(m2, Deux), Deux), m2), new Sequence(new Affectation(m1, new Multiplication(m1, Deux)), new Affectation(m2, new Division(m2, Deux)))), new Sequence(new Affectation(produit, new Addition(produit, m1)), new Affectation(m2, new Soustraction(m2, Un))))))));
}
Désolé pour le formatage qui n'est pas pris en compte par phpBB...
Bon courage,
CR
Dernière édition par cr2017 le 07 janv. 2018 20:57, édité 1 fois.
Re: TP9 Question 1 class AST_Mult2
Rebonsoir,
Je crois qu'il te manque l'affichage du résultat à la fin de l'instruction. Les tests en Question 1 sont aussi passés sans pour moi, mais comme il apparaît dans le XML présenté en question 2, je suppose que l'affichage est nécessaire pour la suite.
Je crois qu'il te manque l'affichage du résultat à la fin de l'instruction. Les tests en Question 1 sont aussi passés sans pour moi, mais comme il apparaît dans le XML présenté en question 2, je suppose que l'affichage est nécessaire pour la suite.
Re: TP9 Question 1 class AST_Mult2
L'affichage n'est pas testé il me semble, car je ne l'ai pas mis à la fin des programmes et ça a passé les tests JNEWS. Je sens que M. Douin va les modifier bientôt :)
-
- Messages : 8
- Inscription : 08 oct. 2017 23:08
Re: TP9 Question 1 class AST_Mult2
Merci à tous, j'ai modifié l'opération, mais ça n'est pas passé. L'erreur doit être ailleurs...
C'était mon dernier essai :(
Mr Douin pourra peut-être m'éclairer.
C'était mon dernier essai :(
Mr Douin pourra peut-être m'éclairer.