FOD Erreur dans corrigé exercice 2.2.1 question 3

Modérateurs : F. Barthélemy, eric.soutil

Verrouillé
fabrice
Messages : 2
Inscription : 01 nov. 2016 19:29

FOD Erreur dans corrigé exercice 2.2.1 question 3

Message par fabrice » 01 nov. 2016 20:13

Bonjour,

Je suis en FOD et dans la correction fournie sur les classes "exercice 2.2.1 question 3", il est demandé
de faire un virement de 20 euros de chaque compte vers chacun des comptes qui le suivent dans le tableau
(par exemple, du compte d’indice 5, il faut faire des virements vers les comptes d’indice 6, 7, 8 et 9).

Le code de la correction ne semble pas correcte:

Code : Tout sélectionner

for (int i=0; i<table.length; i++)
{
	for (int j=0; j<i; j++)
	{
		table[i].virerVers(20,table[j]);
	}
}
Voici celui que j'ai testé et qui semble fonctionner:

Code : Tout sélectionner

for (int i=0; i<table.length; i++)
{
	for (int j=i; j<table.length -1; j++)
	{
		table[i].virerVers(20,table[j+1]);
	}
}
Au cas ou quelqu'un essaierai de refaire les exos.
Cdl

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: FOD Erreur dans corrigé exercice 2.2.1 question 3

Message par V.B.fod31 » 02 nov. 2016 13:20

Bonjour Fabrice,
Je suppose que tu veux parler de l'exercice 2.1.1 utilisation d’une classe ;)

Si on fait la trace du corrigé, on s’aperçoit que le code est juste :)
Je détaille le début de la trace ci dessous. il faut la faire jusqu'au bout pour bien vérifier que c'est juste ;) Bon je t'avoue que je ne suis pas super douée en trace mais ici je crois que c'est bon :)

for (int i=0; i<table.length; i++)
{
for (int j=0; j<i; j++)
{
table.virerVers(20,table[j]);
}
}

i = O
i< 10 true //la taille du tableau
j = 0
j< 0 false
i++
i=1
i< 10 true
j=0
j< 1 true
tab[1].virerVers(20,table[0]);
//on appel la fonction virerVers()

void virerVers(int montant, Compte destination){
destination.retirer(montant);
this.deposer(montant);
}

/*Cette fonction appelle retirer(montant) sur l'objet destination qui est table[0]
cette fonction retire 20€ du compte table[0]
puis appelle la fonction deposer() sur l'objet en cours qui est tab[1]
Cette fonction ajoute 20€ au compte tab[1]*/

j++
j=1
j<1 false
i++
i=2
i< 10 true
j=O
j=0
j< 2 true
tab[2].virerVers(20,table[0]);

/*Cette fonction appelle retirer(montant) sur l'objet destination qui est table[0]
cette fonction retire 20€ du compte table[0]
puis appelle la fonction deposer() sur l'objet en cours qui est tab[2]
Cette fonction ajoute 20€ au compte tab[2]*/

j++
j=1
j<2 true
tab[2].virerVers(20,table[1]);

/*Cette fonction appelle retirer(montant) sur l'objet destination qui est table[1]
cette fonction retire 20€ du compte table[1]
puis appelle la fonction deposer() sur l'objet en cours qui est tab[2]
Cette fonction ajoute 20€ au compte tab[2]*/

j++
j=2
j<2 false
i++
...

fabrice
Messages : 2
Inscription : 01 nov. 2016 19:29

Re: FOD Erreur dans corrigé exercice 2.2.1 question 3

Message par fabrice » 06 nov. 2016 15:51

Bonjour,

J'ai trouvé ou se situe le problème, en fait le code du corrigé est bon, mais ne répond pas à l'exercice
qui est demandé, c'est à dire de faire un virement de 20 euros de chaque compte vers chacun des comptes qui le suivent dans le tableau
(par exemple, du compte d’indice 5, il faut faire des virements de 20 € vers les comptes d’indice 6, 7, 8 et 9).

En fait, le code du corrigé ne fait pas un "virement" vers les comptes qui le "suivent", mais il retire 20 €
a tous les comptes qui le "précède".

la méthode "virement" quand on regarde le code ne VIRE pas 20 € de son compte vers le compte de destinantion,
mais elle RETIRE cette somme au compte "autre" pour les mettre sur son propre compte.

Cela n'est pas vraiment un virement, si je dis que je vire 20 € à un compte,
je ne lui retire pas les 20 € pour les mettre sur le mien ! :)

Voici le code du corrigé:

Code : Tout sélectionner

void virement(int montant, Compte autre){
	autre.retrait(montant);
	this.depot(montant);
}

for (int i=0; i<table.length; i++){
	for (int j=0; j<i; j++){
		table[i].virement(20,table[j]);
	}
}
Voici mon code de la methode virement:

Code : Tout sélectionner

void virement(int montant, Compte destination)
{
	this.retirer(montant);
	destination.depot(montant);

}

for (int i = 0; i < table.length; i++)		
{
	for (int j = i; j < table.length -1; j++)
	{
		table[i].virement(20, table[j+1]);  // chaque compte verse 20€ a chaqun de ses suivants
	}
}
Efectivement dans les deux cas on retrouve:

Compte numero 0, solde: 20
Compte numero 1, solde: 160
Compte numero 2, solde: 300
Compte numero 3, solde: 440
Compte numero 4, solde: 580
Compte numero 5, solde: 720
Compte numero 6, solde: 860
Compte numero 7, solde: 1000
Compte numero 8, solde: 1140
Compte numero 9, solde: 1280

:)

Amicalement,

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: FOD Erreur dans corrigé exercice 2.2.1 question 3

Message par V.B.fod31 » 06 nov. 2016 17:23

Exact :)
Il y a deux fonctions qui portent le même nom mais elles ne font pas la même chose, d'où la confusion ;)

Dans l'exercice 2.1.1 utilisation d’une classe nous avons :

void virerVers(int montant, Compte destination){
this.retirer(montant);
destination.deposer(montant);
}

Dans l'exercice 2.2.1 comptes (suite) la fonction virerVers() ne fait plus pareil :

void virerVers(int montant, Compte destination){
destination.retirer(montant);
this.deposer(montant);
}

Comme quoi, on a intérêt à bien faire la trace de la méthode et ne pas se fier au nom ;)

eric.soutil
Messages : 16
Inscription : 21 oct. 2016 17:47

Re: FOD Erreur dans corrigé exercice 2.2.1 question 3

Message par eric.soutil » 14 nov. 2016 18:38

Bonjour,
le corrigé a été modifié, il répondait effectivement à une ancienne version de l'énoncé.
Cordialement,

Verrouillé

Qui est en ligne ?

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité