Tri d'un tableau de structure

Signaler
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
bonjour pour tout le monde







j'ai un petit problème de trie par age d'un tableau des employées voila mon code:




#include<stdio.h>

#include<conio.h>

#define max 10

typedef struct CITOYEN

{

        char nom[10] ;

        char prenom[20];

        int cin[8];

        int jour[2];

        int mois[2];

        int annee[4];

        int  numrue[5] ;

        char cite[15] ;

        char ville[20];

        int  codp[10] ;

}cit;

int main()

{

    int i,nbr1,nbr2;

cit t[max]  ;

puts("remplissage du tableau");

for(i=0;i<max;i++);

{

printf("donnez le nom :\n");

scanf("%s",&amp;t[i].nom);

printf("donnez le prenom :\n");

scanf("%s",&amp;t[i].prenom);

printf("donnez le num CIN :\n");

scanf("%d",&amp;t[i].cin);

printf("donnez le jour de naissance :\n");

scanf("%d",&amp;t[i].jour);

printf("donnez le mois de naissance :\n");

scanf("%d",&amp;t[i].mois);

printf("donnez l'année :\n");

scanf("%d",&amp;t[i].annee);

printf("donnez le numero de l'employé :\n");

scanf("%d",&amp;t[i].numrue);

printf("donnez le city :\n");

scanf("%s",&amp;t[i].cite);

printf("donnez la ville :\n");

scanf("%s",&amp;t[i].ville);

printf("donnez le code postal :\n");

scanf("%d",&amp;t[i].codp);

}

int p = 0;              // position de l'employé le plus âgé

for(i=0;i<max;i++)

{

nbr1= t[i].jour + 100 * (t[i].mois) + 10000 * (t[i].annee);

nbr2 = t[i+1].jour + 100 * t[i+1].mois + 10000 * t[i+1].annee;

if (nbr1 < nbr2) 

{

p= i+1;

}

else

{p=i;

}}

getch();

return(0);

}





merci d'avance

1 réponse

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
L'année tient sur 2 octets, mois et jour sur 1 seul.
Ces 3 champs en unsigned.
Je vais faire comparaisons en date packée sur 4 octets:
0xYYYYMMDD


DWORD mini, curr;


p = 0;
if(max > 1) {
  mini = t[0].annee << 16;
  mini |= ((t[0].mois << 8) & 0xFF00);
  mini |= (t[0].jour & 0xFF);
  for(i = 1; i < max; i++) {
    curr = t[i].annee << 16;
    curr |= ((t[i].mois << 8) & 0xFF00);
    curr |= (t[i].jour & 0xFF);    if(curr > mini) {mini curr; p i;}
  }
}

ciao...
BruNews, MVP VC++