(C++) rotation tableau 2D - Programmation
TomsGuide.com : 700 000 inscrits répondent à toutes vos questions high-tech et informatique.
Pour obtenir de l'aide, inscrivez-vous gratuitement !

Sujet auquel vous répondez
Sujet : (C++) rotation tableau 2D
mini_lulu Bonjour tout le monde,

Je suis un peu "novice" en C++, en fait je cherche à faire une rotation d'un tableau à deux dimensions.

Je teste, je teste mais je n'y arrive point, donc je fais appel à vous ^^

Mon problème un peu simplifié :

Code :
  1. #include <myconio.h>
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;
  5. #define NbColonnes 6
  6. #define NbLignes 4
  7. int main()
  8. { int l=0, c=0, mem=0;
  9.   char Tab[NbLignes][NbColonnes]={ {'V','B','R','T','U','I'}, {'P','P','V','O','U','M'}, {'C','F','R','V','H','R'}, {'Q','A','Z','X','Q','T'} };
  10.   // -------------- tableau original
  11.   for(l=0;l<NbLignes;l++)
  12.   { for(c=0;c<NbColonnes;c++)
  13.     { cout << Tab[l][c] << ' ' ;
  14.     }
  15.     cout << endl;
  16.   }
  17.   cout << endl;
  18.   //--------------- tableau que je veux obtenir
  19.   char TabObtenu[NbColonnes][NbLignes]={ {'Q','C','P','U'}, {'A','F','P','B'}, {'Z','R','V','R'}, {'X','V','O','T'}, {'Q','H','U','U'}, {'T','R','M','I'} };
  20.   for(c=0;c<NbColonnes;c++)
  21.   { for(l=0;l<NbLignes;l++)
  22.     { cout << TabObtenu[c][l] << ' ' ;
  23.     }
  24.     cout << endl;
  25.   }
  26.   cout << endl;
  27.   // -------------- tableau après 'rotation a droite'
  28.   for(l=0;l<NbColonnes;l++)
  29.   { for(c=0;c<NbLignes;c++)
  30.     { Tab[NbLignes-(l+1)][c]=Tab[c][l];
  31.       cout << Tab[NbLignes-(l+1)][c] << ' ' ;
  32.     }
  33.     cout << endl;
  34.   }
  35.   getch();
  36.   return 0;
  37. }



En fait c'est la partie " tableau après 'rotation a droite' " le problème. Je veux remplacer le tableau initial en fait. Peu importe si je créer un tableau intermédiaire, mais je veux traiter le tableau "Tab". Je crois que c'est possible enfin, juste par le biais d'un échange de valeurs ?!

Auriez vous un petit coup de pouce ou une piste ?

Merci beaucoup d'avance :)


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b] [i] [u] [strike] [spoiler] [fixed] [cpp] [url] [email] [img] [flash] Insérer un code de video fourni [*]  
 
   [quote]
 


Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
CRicky La seule chose que tu peux faire c'est de voir le tableau à l'envers, c'est-à-dire en disant que l'indice de ligne est en fait l'indice de colonne, et inversement.
Du coup, il suffirait d'inverser les lignes.
mini_lulu Merci de ta réponse, je n'ai pas trouvé de solution, je vais essayer de contourner la chose et si je trouve quelque chose je vous en ferais part ^^

merci encore :)
CRicky Tu ne peux pas remplacer les valeurs de la matrice initiale puisque la largeur devient la longueur et inversement. La taille de ton tableau change, même si au total, elle est la même. Ce n'est possible que sur des matrices carrée, sur une rotation Pi/2 en passant par une seule valeur intermédiaire.
mini_lulu Bonjour tout le monde,

Je suis un peu "novice" en C++, en fait je cherche à faire une rotation d'un tableau à deux dimensions.

Je teste, je teste mais je n'y arrive point, donc je fais appel à vous ^^

Mon problème un peu simplifié :

Code :
  1. #include <myconio.h>
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;
  5. #define NbColonnes 6
  6. #define NbLignes 4
  7. int main()
  8. { int l=0, c=0, mem=0;
  9.   char Tab[NbLignes][NbColonnes]={ {'V','B','R','T','U','I'}, {'P','P','V','O','U','M'}, {'C','F','R','V','H','R'}, {'Q','A','Z','X','Q','T'} };
  10.   // -------------- tableau original
  11.   for(l=0;l<NbLignes;l++)
  12.   { for(c=0;c<NbColonnes;c++)
  13.     { cout << Tab[l][c] << ' ' ;
  14.     }
  15.     cout << endl;
  16.   }
  17.   cout << endl;
  18.   //--------------- tableau que je veux obtenir
  19.   char TabObtenu[NbColonnes][NbLignes]={ {'Q','C','P','U'}, {'A','F','P','B'}, {'Z','R','V','R'}, {'X','V','O','T'}, {'Q','H','U','U'}, {'T','R','M','I'} };
  20.   for(c=0;c<NbColonnes;c++)
  21.   { for(l=0;l<NbLignes;l++)
  22.     { cout << TabObtenu[c][l] << ' ' ;
  23.     }
  24.     cout << endl;
  25.   }
  26.   cout << endl;
  27.   // -------------- tableau après 'rotation a droite'
  28.   for(l=0;l<NbColonnes;l++)
  29.   { for(c=0;c<NbLignes;c++)
  30.     { Tab[NbLignes-(l+1)][c]=Tab[c][l];
  31.       cout << Tab[NbLignes-(l+1)][c] << ' ' ;
  32.     }
  33.     cout << endl;
  34.   }
  35.   getch();
  36.   return 0;
  37. }



En fait c'est la partie " tableau après 'rotation a droite' " le problème. Je veux remplacer le tableau initial en fait. Peu importe si je créer un tableau intermédiaire, mais je veux traiter le tableau "Tab". Je crois que c'est possible enfin, juste par le biais d'un échange de valeurs ?!

Auriez vous un petit coup de pouce ou une piste ?

Merci beaucoup d'avance :)

Liens