Langage C: tri d'un tab à 2 dim
leProgmer
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
je souhaite trier seulement la dernière colonne d'un tableau à 2 dimensions. Mon programme compile, mais ne me donne pas le résultat attendu: seule la première ligne du tableau est répétée. Pouvez vous me dire comment corriger l'erreur s'il vous plaît? Merci.
je souhaite trier seulement la dernière colonne d'un tableau à 2 dimensions. Mon programme compile, mais ne me donne pas le résultat attendu: seule la première ligne du tableau est répétée. Pouvez vous me dire comment corriger l'erreur s'il vous plaît? Merci.
#include<stdio.h>
#include<math.h>
#define DIMLIG 6
#define DIMCOL 2
void sort(int tab[DIMLIG][DIMCOL]) //fonction de tri
{
int i,j,n;
for(i=0; i<DIMLIG; i++)
{
for(j=0; j<DIMCOL; j++)
{
n=j;
while(n>0 && tab[0][n]<tab[0][n-1])
{
j = tab[0][n-1];
tab[0][n-1] = tab[0][n];
tab[0][n]=j;
--n;
}
}
}
}
void affich(int tab[DIMLIG][DIMCOL]) //Affichage du contenu du tableau
{
int i,j;
for(i=0; i<DIMLIG; i++)
{
for(j=0; j<DIMCOL; j++)
{
printf("%5.0d", tab[0][j]);
}
printf("\n");
}
}
main()
{
int tab[DIMLIG][DIMCOL]={{1,84}, {2, 82}, {3, 87}, {4, 85}, {5, 81}, {6, 86}};
sort(tab);
affich(tab);
getchar();
/*
Voici le tableau que je veux obtenir à la fin
5 81
2 82
1 84
4 85
6 86
3 87
*/
}
A voir également:
- Langage C: tri d'un tab à 2 dim
- Langage ascii - Guide
- Langage binaire - Guide
- Langage visual basic - Télécharger - Langages
- Pascal langage - Télécharger - Édition & Programmation
- Langage basic gratuit - Télécharger - Édition & Programmation
1 réponse
Bonjour,
J'ai pas tout regardé.
Mais, ta fonction affichage est fausse. Tu affiches tab[0][j] au lieu de tab[i][j]. C'est pour ça que ta première ligne est répétée.
Ensuite pour ta fonction sort, tu tries tab[0][n] c'est à dire la première ligne.
Toi ce que tu veux faire, c'est trier le tableau par couple suivant la seconde colonne.
Il faut donc que tu tries suivant tab[i][1] et que tu n'oublies pas de traiter les couples.
Par exemple dans les :
Cdlt,
J'ai pas tout regardé.
Mais, ta fonction affichage est fausse. Tu affiches tab[0][j] au lieu de tab[i][j]. C'est pour ça que ta première ligne est répétée.
Ensuite pour ta fonction sort, tu tries tab[0][n] c'est à dire la première ligne.
Toi ce que tu veux faire, c'est trier le tableau par couple suivant la seconde colonne.
Il faut donc que tu tries suivant tab[i][1] et que tu n'oublies pas de traiter les couples.
Par exemple dans les :
if (tab[i][1]>tab[i+1][1]) {
echanger(tab[i][1],tab[i+1][1]);
echanger(tab[i][0],tab[i+1][0]);
}
Cdlt,
#include<stdio.h> #include<math.h> #define DIMLIG 6 #define DIMCOL 2 void sort(int tab[DIMLIG][DIMCOL]) //Sorting function { int i,j,n; for(i=0; i<DIMLIG; i++) { for(j=0; j<DIMCOL-i; j++) { if(tab[i+1][1]<tab[i][1]) { j = tab[i][1]; tab[i][1] = tab[i+1][1]; tab[i+1][1] = j; } } } } void affich(int tab[DIMLIG][DIMCOL]) //Display table content { int i,j; for(i=0; i<DIMLIG; i++) { for(j=0; j<DIMCOL; j++) { printf("%5.0d", tab[i][j]); // } printf("\n"); } } main() { int tab[DIMLIG][DIMCOL]={{1,84}, {2, 82}, {3, 87}, {4, 85}, {5, 81}, {6, 86}}; sort(tab); affich(tab); getchar(); }echanger(tab[i][1],tab[i+1][1]); /*tu l'as fait dans ton code*/
echanger(tab[i][0],tab[i+1][0]); /*tu ne l'as pas fait*/
Ensuite, l'algorithme de ta fonction sort() est à revoir.
Tu peux t'inspirer du tri à bulle par exemple : http://fr.wikipedia.org/wiki/Tri_à_bulles
Tu verras que ton algorithme est erroné.
Cdlt,