Langage C: tri d'un tab à 2 dim
leProgmer
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- 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,
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,