Bonjour,
J'aimerais savoir comment trier un champ d'une structure en langage c?
Merci
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?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
voici la structure:
Je désire trier le champ duree de la structure tache.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 C : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
bonjour
j'ai une question a propos la qsort() .Est ce que cette fonction Peut trié selon trois champ ? par exemple :le problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 t[i].annee == t[i+1].annee
sinon en passe a la troisième condition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 t[i].mois== t[i+1].mois
sinon quelle et la solution ? quel fo l'utiliser ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
"La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
merci bcp voila se que je veux maintenant au
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager