Permuter 2 cases

stan4950 Messages postés 10 Date d'inscription vendredi 15 novembre 2013 Statut Membre Dernière intervention 26 novembre 2013 - 25 nov. 2013 à 22:03
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 26 nov. 2013 à 12:39
Bonsoir a tous !!



J'ai besoin de votre précieuse aide ! J'ai un tableau aléatoire de 4 lignes par 4 colonnes générant des chiffres. Le problème est que je dois (dans le cadre de mon projet info qui est de créer un jeu) demander a l'utilisateur d'échanger 2 cases du tableau qu'il choisira pour aligner 3 chiffres ou plus. J"ai donc mon tableau avec les titres (de 0 à 8 en abscisse et en ordonnées pour que l'utilisateur se repère).



J'ai pensé a la fonction swap mais je ne sais pas comment la construire. J'ai cependant fais un petit récap des taches que je dois faire :

- Demander à l'utilisateur d'entrer une ligne et une colonne

- Puis une deuxième fois

- De faire entre temps un scanf pour assimiler les coordonnées à la valeur sur le tableau

-d'échanger les valeurs

-d'actualiser la grille(tableau) avec les deux valeurs échangées



2 1 2 2

2 1 1 2

1 2 2 1

1 1 2 2



Par exemple je dois demander à l'utilisateur quelle ligne et colonne,il me dira :

0 1 (ligne 0 colonne 1)

Puis je lui demanderait une deuxième fois

0 0 (ligne 0 colonne 0)

Du coup il aura trois fois la meme case alignée sur la première ligne.



Pouvez vous m'aider ? (au fait je suis débutant et je suis habitué a travailler avec printf, et pas cout...)



Merci !!

4 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
26 nov. 2013 à 08:34
salut ,
Pour commencer, cout est bien plus simple à utiliser que printf : il n'y a pas de type à renseigner et dans 90% des cas tu n'a aucuns cast à faire. C'est à dire que pour afficher en entier, avec printf =>
printf("%d",&entier);
alors qu'avec cout :
 cout << entier;
.


Bref.

Sinon je ne comprend pas le problème qui se pose à toi, je pense que tu dois savoir comment échanger 2 valeurs d'un tableau? Enfin je ne vois pas ou tu bloque quoi ^^

naga
0
stan4950 Messages postés 10 Date d'inscription vendredi 15 novembre 2013 Statut Membre Dernière intervention 26 novembre 2013
26 nov. 2013 à 10:01
En fait je n arrive pas a retranscrire que les coordonnes que l utilisateur va taper represente une valeur du tableau. Il va ecrire une ligne et une colonne mais sa ne represente qu une valeur dans mon tableau(il faut que je fasse l analogie entre coordonnees et valeur)
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
26 nov. 2013 à 11:30
bah en fait, du fait que tu ais un tableau en 2 dimensions, coordonnées représente la case du tableau. C'est à dire que si l'utilisateur indique 2 comme colonne et 0 comme ligne, la valeur à lire sera de coordonnées 2,0 soit :
 tableau[2][0]; 
donc il n'y a pas de "piège"

si l'utilisateur veut permuter 2 valeurs, on pourra avoir :

 

public int ** permute(int ** itTableau , int X_1 , int Y_1, int X_2, int Y_2)
{
int iCpy = itTableau [X_1][Y_1];
itTableau [X_1][Y_1] = itTableau [X_2][Y_2];
itTableau [X_2][Y_2] = iCpy;

return itTableau;
}

0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 26/11/2013 à 12:39
Bonjour.

Ce sujet est lié à:
http://codes-sources.commentcamarche.net/forum/affich-10013172-allocation-dynamique
et
http://codes-sources.commentcamarche.net/forum/affich-10012139-generer-une-grille-pour-un-jeu-de-type-candy-crush

Le fait que tu ais crée plusieurs sujets au lieu de rester sur celui d'origine, casse le contexte. Les réponses sont donc techniquement justes, mais contextuellement inadaptées.

Comme déjà dit, la meilleure solution est de modifier la classe Array2D qui facilite et masque les opérations que tu ferais sur un tableau. De plus, seul un tableau à une seule dimension est nécessaire pour représenter une grille (via la formule x + y * width).

Enfin, un échange propre en C++, se fait via std::swap.
  Array2D tab(4, 9);
  std::swap(tab(2, 4), tab(3, 4)); // échange les deux positions.
0
Rejoignez-nous