Comparer deux tableau en C (master mind)
Résolu
mari_94
Messages postés
8
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour, j'aurai besoin d'aide pour un projet en informatique !
Dans ce projet il est question de créer un jeu : le master mind.
Mais voila je me retrouve coincée pour comparer la combinaison de couleur générée au hasard par l'ordi (tableau p )et la combinaison que le joueur entre (tableau t ).
Les couleurs sont représentées par des chiffres.
Le but étant de compter combien il y a de pions bien ou mal placés, l eplus dur étant de ne pas comparer les valeurs deux fois.
Voici ce que j'ai fait concernant la fonction "comparer", mais elle ne m'affiche malheureusement pas le bon résultat...
Pouvez-vous m'expliquer ce qui ne va pas s'il vous plait ?
Merci pour votre aide!!
Dans ce projet il est question de créer un jeu : le master mind.
Mais voila je me retrouve coincée pour comparer la combinaison de couleur générée au hasard par l'ordi (tableau p )et la combinaison que le joueur entre (tableau t ).
Les couleurs sont représentées par des chiffres.
Le but étant de compter combien il y a de pions bien ou mal placés, l eplus dur étant de ne pas comparer les valeurs deux fois.
Voici ce que j'ai fait concernant la fonction "comparer", mais elle ne m'affiche malheureusement pas le bon résultat...
Pouvez-vous m'expliquer ce qui ne va pas s'il vous plait ?
Merci pour votre aide!!
#include<stdio.h>
int comparer (int n, int t[], int p[]) {
int i;
int j;
int bp; /* bien placé */
int mp; /* mal placé */
bp=0;
mp=0;
for (i=0;i<n-1;i++) {
if (t[i]==p[i]) { bp=bp+1; }
for (j=0;j<n;j++) { if (t[i]==p[j]&&(j!=i)) {mp++;}
} }
printf("il y a %d pions bien place\n",bp);
printf("il y a %d de pions mal place ",mp);
}
A voir également:
- Comparer deux tableaux en c
- Fusionner deux tableaux excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Nombre de jours entre deux dates excel - Guide
- Mise en forme tableau word - Guide
1 réponse
Salut mari_94,
Une façon de faire est, lorsque tu as traité une position, d'utiliser un "drapeau", c'est à dire une annotation ou un marquage, de façon à ne pas la traiter de nouveau.
Par exemple, si tes couleurs sont représentées par des entiers naturels, tu pourrais mettre -1 à l'emplacement traité, ou changer ce nombre en nombre négatif, ce qui te permettra de reconnaître et sauter les emplacements ainsi marqués lors de tes vérifications suivantes.
Note aussi que si un pion est bien placé, cela ne sert à rien de reparcourir les pions du début pour les vérifier par rapport à celui-là, qui est, par définition, traité. La 2ème boucle
Dal
Une façon de faire est, lorsque tu as traité une position, d'utiliser un "drapeau", c'est à dire une annotation ou un marquage, de façon à ne pas la traiter de nouveau.
Par exemple, si tes couleurs sont représentées par des entiers naturels, tu pourrais mettre -1 à l'emplacement traité, ou changer ce nombre en nombre négatif, ce qui te permettra de reconnaître et sauter les emplacements ainsi marqués lors de tes vérifications suivantes.
Note aussi que si un pion est bien placé, cela ne sert à rien de reparcourir les pions du début pour les vérifier par rapport à celui-là, qui est, par définition, traité. La 2ème boucle
forimbriquée ne devrait s'exécuter que si le test "bien placé ?" échoue (donc avec un
elseaprès ce
if). Si le pion est bien placé, tu le notes en incrémentant ta variable et tu places ton drapeau sur cet emplacement, et tu passes au pion suivant, c'est tout.
Dal
donc si j'ai bien compris :
for (i=0;i<n-1;i++) { if (t[i]==p[i]) { bp++; <underline>t[i]=-1</underline>; } <underline>else</underline> { for (j=0;j<n;j++) { if (t[i]==p[j]&&(j!=i)) {mp++;} }}}"1 pions bien placé" ( donc ok)
mais "2 pions mal placés" alors qu'il y en a 3...
je ne comprend pas pourquoi
Cependant tu devrais marquer les emplacements traités dans p, plutôt que t (ou dans les deux, mais cela complexifie sans que cela soit vraiment nécessaire). Dans le else, tu ne testes pas si l'emplacement que tu examines a déjà été traité. Tu ne te sers donc pas du marqueur. Tu dois aussi marquer dans cette partie la position traitée dans les deux tableaux.
je pense aussi qu'il faudrait probablement faire deux passes... ou tester que les pions en avant de i ne sont pas des pions bien placés sur leurs positions avant d'en déduire que la position en question peut être comptée pour ton décompte "mal placés".
- tu traites d'abord les pions bien placés : une seule boucle suffit, en marquant les pions traités dans p et t
- ensuite, tu traites les pions mal placés, c'est à dire que : pour chaque couleur restante dans t, tu dénombres les couleurs existantes non traitées dans p, en marquant là aussi les pions traités dans p et t
Sur cette partie, il te faudra deux boucles imbriquées. Comme tu y compares des couleurs restantes, il ne faudra pas oublier d'exclure les positions déjà marquées comme traitées, histoire que les -1 ne soient pas comparés à tort.