TP9 Question 1 class AST_Mult2

Programmation Avancée

Modérateur : Douin

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

TP9 Question 1 class AST_Mult2

Message par ideligniere » 07 janv. 2018 20:08

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

cr2017
Messages : 28
Inscription : 10 oct. 2017 9:05

Re: TP9 Question 1 class AST_Mult2

Message par cr2017 » 07 janv. 2018 20:39

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
Dernière édition par cr2017 le 07 janv. 2018 20:57, édité 1 fois.

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

Re: TP9 Question 1 class AST_Mult2

Message par slash » 07 janv. 2018 20:57

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.

cr2017
Messages : 28
Inscription : 10 oct. 2017 9:05

Re: TP9 Question 1 class AST_Mult2

Message par cr2017 » 07 janv. 2018 21:00

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 :)

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

Re: TP9 Question 1 class AST_Mult2

Message par ideligniere » 07 janv. 2018 22:44

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.

Répondre

Qui est en ligne ?

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