× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 symétrie d'un tableau 2D
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
qsdwxc
  Posté le 25/11/2011 @ 19:14 
Aller en bas de la page 
Petit astucien

Bonjour,

J'essaie depuis des heures d'obtenir une symétrie d'un tableau.

-J'ai un tableau tabR (de type 2D) qui contient des valeurs données.

-Je souhaite obtenir le tableau tabRsymétrie (de type 2D) à partir de tabR.

Voilà en image ce que je souhaite obtenir à partir de tabR

image_a symétrie ---> image_b.

J'ai essayé de faire une boucle qui lit le tableau tabR à l'envers et qui place les valeurs dans tabRsymetrie mais ça ne marche pas :

int jj=0,ii=0;
for(int i=tailleTableau-1; i>-1; i--)
{
for(int j=tailleTableau-1; j>-1; j--)
{

tabRsymetrie[ii][jj] = tabR[i][j];
jj++;

}
ii++;

}

quelqu'un peut-il m'aider.

Merci

Publicité
breizhbugs
 Posté le 25/11/2011 à 22:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir,

Message original par qsdwxc int jj=0,ii=0;

for(int i=tailleTableau-1; i>-1; i--) // si ligne on parcours tout
for(int j=tailleTableau-1; j>-1; j--) // si colonne on considère plutot taille / 2 on ne parcourt que la moitié gauche que l'on échange avec sa moitié droite
{

tabRsymetrie[ii][jj] = tabR[i][j]; // pour échanger 2 valeur on passe par une valeur intermédiaire sinon on en écrase une. c'est 2 tableau different pas de souci
jj++; // non

}
ii++; // non plus

}

donc ca ressemble plutot à cela:

for (ligne = 0; ligne < taille; ligne++) // on parcourt bien toute les lignes

{

for (colonne=0; colonne < taille/ 2; colonne++) // on parcourt la première moitié

{

tabRsymetrie[i][taille-j]= tabR[i][j]; // on copie dans la partie droite du tableau resultat la partie gauche du tableau d'origine

tabRsymetrie[i][j]= tabR[i][taille-j]; // l'inverse

}// fin colonne

} // fin ligne

(J'ai pas testé par contre, mais l'idée est là...)



Modifié par breizhbugs le 25/11/2011 23:02
breizhbugs
 Posté le 25/11/2011 à 23:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

{#} Anonyme,

Exact, c'est corrigé! merci.

qsdwxc
 Posté le 25/11/2011 à 23:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci pour ta réponse le problème c'est que que ton code ne fonctionne pas. J'ai compilé ce code avec en rouge ton code :

int main()
{
const int taille =4;
int tabR[taille][taille]={0,1,2,3}; // Initialisation du tableau de départ avec les valeurs 0, 1, 2, 3.
int tabRsymetrie[taille][taille]={0};

for (int i = 0; i < taille; i++) // on parcourt bien toute les lignes

{

for (int j=0; j < taille/ 2; j++) // on parcourt la première moitié

{

tabRsymetrie[i][taille-j]= tabR[i][j]; // on copie dans la partie droite du tabRleau resultat la partie gauche du tabRleau d'origine

tabRsymetrie[i][j]= tabR[i][taille-j]; // l'inverse

}// fin colonne

} // fin ligne


for(int i=0; i<2;i++){ //affiche le contenu du tableau tabRsymetrie
for(int j=0; j<2;j++){
cout <<" " <<tabRsymetrie[i][j] ;
}
}

Le tableau tabRsymetrie contient 0 3 0 0 au lieu de 3 2 1 0.

C'est un vrai casse tête. Je rame dessus depuis 2 jours.

Merci



Modifié par qsdwxc le 25/11/2011 23:46
breizhbugs
 Posté le 26/11/2011 à 00:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

[taille - 1 -j] alors pour les bornes, tu aurais pu corriger tout seul...

Sinon tu declare un tableau à 2 dimensions, mais tu l'initialises mal...

C'est un vrai casse tête. Je rame dessus depuis 2 jours.

Fait un simple schéma et tu verras que c'est simple...



Modifié par breizhbugs le 26/11/2011 00:18
qsdwxc
 Posté le 26/11/2011 à 12:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

@Anonyme et breizhbugs

Merci beaucoup vous m'avez bien avancé.

J'étais loin de la solution la plus propre en voulant parcourir le tableau tabR à l'envers et mettre les valeurs parcourues à l'envers dans le tableau tabRsymetrie...

Bref il faut que je révise ma manière de penser.

Merci

breizhbugs
 Posté le 26/11/2011 à 13:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Anonyme a écrit :

for (colonne=0; colonne < taille/ 2; colonne++) // on parcourt la première moitié

Non car, comme il n'y a pas de permutation des éléments dans un même tableau mais recopie

dans un second, il faut bien traiter toute une ligne !

non: on traite bien toute les lignes, c'est des colonnes dont on peut se disposer de boucler sur la totalité car la copie est symétrique, la deuxième moitié est faite par la deuxième affectation:

tabRsymetrie[i][taille-j]= tabR[i][j]; // on copie dans la partie droite du tabRleau resultat la partie gauche du tabRleau d'origine

tabRsymetrie[i][j]= tabR[i][taille-j]; // l'inverse

#include <stdio.h>


int main ( void )
{
const int taille = 4;
int tabR[taille][taille]={{255, 0, 0, 202}, {255, 255, 0, 191}, {0, 0, 0, 0}, {0, 1, 2, 3}};
int tabRsym[taille][taille];
int i, j;

printf("tableau symétrique:\n");
for (i = 0; i < taille; i++)
{
for (j=0; j < taille; j++)
printf("%4d ", tabR[i][j]);
printf("\n");
}

for (int i = 0; i < taille; i++) // on parcourt bien toute les lignes
{
for (int j=0; j < taille/ 2; j++) // on parcourt la première moitié
{
tabRsym[i][taille-1-j]= tabR[i][j]; // on copie dans la partie droite du tabRleau resultat la partie gauche du tabRleau d'origine
tabRsym[i][j]= tabR[i][taille-1-j]; // l'inverse
}// fin colonne
} // fin ligne

printf("tableau symétrique:\n");
for (i = 0; i < taille; i++)
{
for (j=0; j < taille; j++)
printf("%4d ", tabRsym[i][j]);
printf("\n");
}
}

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
723,36 €Ultrabook Acer Swift 3 14 pouces (Ryzen 5 4500U, 16Go de RAM, SSD 1 To, Vega 6) à 723,36 €
Valable jusqu'au 24 Septembre

Boulanger fait une promotion sur l'ordinateur portable ultrabook Acer Swift 3 SF314-42-R60R qui passe à 723,36 € alors qu'on le trouve ailleurs à partir de 999 €. Cet ordinateur portable est équipé d'un écran 14 pouces FullHD (1920x1080) IPS mat sans reflet, d'un processeur AMD Ryzen 5 4500U (6 coeurs), de 16 Go de RAM, d'un SSD de 1 To et d'une carte graphique Vega 6. Une webcam, le WiFi 6 et le Bluetooth 5 sont de la partie. Des ports USB 2.0, USB 3.1 et HDMI sont présents. Le tout tourne sous Windows 10. Il pèse 1,2 kg et offre un autonomie jusqu'à 11 h. 


> Voir l'offre
27,99 €Switch gigabit Netgear GS108, 8 ports à 27,99 €
Valable jusqu'au 26 Septembre

Amazon propose actuellement  le switch Gigabit Netgear GS108GE 8 ports (10/100/1000) à 27,99 € livré gratuitement. Le switch est garanti 5 ans.


> Voir l'offre
18,95 €Carte mémoire microSDXC UHS-I SanDisk A1 Ultra 128 Go à 18,95 €
Valable jusqu'au 26 Septembre

Le vendeur sérieux Base propose sur Amazon la carte mémoire microSDXC UHS-I SanDisk A1 Ultra 128 Go à 18,95 €. Cette carte mémoire offre des vitesses jusqu'à 100 Mo/s et est idéale pour les téléphones, caméras et appareils photo HD. La livraison est gratuite.


> Voir l'offre

Sujets relatifs
Rafraichir un tableau en java
extraction de valeurs sur un tableau a deux entrees
Tableau dans java
fonction pointeur et, tableau dynamique
Fonction qui renvoie un tableau
logiciel de dessin acceptant un tableau de données
MasterMind : tableau de combinaison
Créer un tableau de structure
aide tableau
tableau dynamique
Plus de sujets relatifs à symétrie d''un tableau 2D
 > Tous les forums > Forum Autres langages