Bonjour,
J'aimerais savoir comment trier un champ d'une structure en langage c?
Merci
Version imprimable
Bonjour,
J'aimerais savoir comment trier un champ d'une structure en langage c?
Merci
Développe.
S'agit-il d'un tableau de structures d'un certain type, que tu veux trier selon un certain champ?
voici la structure:
Je désire trier le champ duree de la structure tache.Code:
1
2
3
4
5
6
7
8
9 typedef struct { int date_debut; int duree; }tache; int main() tache job [3]={{5,3},{1,2},{3,4}};
Des idées?
Non, tu désires trier ton tableau de structures tache nommé job selon le champ duree de la structure tache.
Le plus simple, c'est utiliser la fonction qsort().
Tout ce qu'elle demande, c'est quelques informations sur le tableau et une fonction qui compare:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 typedef struct { int date_debut; int duree; } tache; int CompareTacheParDuree(const void *pcvA, const void *pcvB) { const tache *pcA = pcvA; const tache *pcB = pcvB; int res; /*Compare simplement le champ durée, sans considération pour le reste.*/ res = pcA->duree - pcB->duree; return res; } int main(void) { tache job [3]={{5,3},{1,2},{3,4}}; qsort(job, 3, sizeof(tache), CompareTacheParDuree); }
Merci c'est gentil de votre part!
bonjour
j'ai une question a propos la qsort() .Est ce que cette fonction Peut trié selon trois champ ? par exemple :le problèmeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 typedef struct CITOYEN { char nom[10] ; char prenom[20]; int cin; int jour; int mois; int annee; int numrue ; char cite[15] ; char ville[20]; int codp; }cit; cit t[i];
alors n passe a la dexième condition :Code:
1
2 t[i].annee == t[i+1].annee
sinon en passe a la troisième condition :Code:
1
2 t[i].mois== t[i+1].mois
sinon quelle et la solution ? quel fo l'utiliser ?Code:
1
2 t[i].jour== t[i+1].jour
merci bien d'anance
La fonction qsort effectue le tri à partir de la fonction de comparaison (de deux éléments) que tu lui fournis.
Reprends le code envoyé par Medinoc et adapte (et renomme ?) la fonction qu'il appelait CompareTacheParDuree à ton cas (comparaison sur les 3 champs, année puis mois puis jour)
merci pour la réponse
je vais voir comment l'adopter :( le tri selon deux condition de deux champs d'une structure est relativement simple mais tri sur trois conditions pffff sur tout ce problème (àge) il est un peux difficile
Eh bien typiquement, on obtient un truc de ce genre:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 int CompareCitoyenParDate(const void *pcvA, const void *pcvB) { const cit *pcA = pcvA; const cit *pcB = pcvB; int res; res = pcA->annee - pcB->annee; if(res != 0) return res; res = pcA->mois - pcB->mois; if(res != 0) return res; res = pcA->jour - pcB->jour; if(res != 0) return res; return 0; }
merci bcp :yaisse2::yaisse1: voila se que je veux :bravo: maintenant au :pc: