Page 1 sur 1

TP9 Question 1 class AST_Mult2

Publié : 07 janv. 2018 20:08
par ideligniere
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

Re: TP9 Question 1 class AST_Mult2

Publié : 07 janv. 2018 20:39
par cr2017
Bonsoir,

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))))))));
	}
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

Re: TP9 Question 1 class AST_Mult2

Publié : 07 janv. 2018 20:57
par slash
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.

Re: TP9 Question 1 class AST_Mult2

Publié : 07 janv. 2018 21:00
par cr2017
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 :)

Re: TP9 Question 1 class AST_Mult2

Publié : 07 janv. 2018 22:44
par ideligniere
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.