Tri d'un tableau de struct

Résolu
sdiri_med Messages postés 18 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 31 octobre 2010 - 20 mars 2009 à 05:16
sdiri_med Messages postés 18 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 31 octobre 2010 - 20 mars 2009 à 17:41
Salut à tous

j'ai un petit problème de tri d'un tableau de structurede but
d'extraire l'employer le plus âgé Pouvez-vous m'aider s.v.p a résoudre
se problème par la méthode de tri si possible par une deuxième méthode
? voila mon code il explique un peux l'idée "deuxième méthode" que j'ai
penser

merci bien d''avance



#include<stdio.h>


#include<conio.h>


#define max 10

 
typedefstruct 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;
 
cit t[max] ;
for(i=0;i<max;i++);
{
printf("donnez le nom :\n");
scanf("%s",&t[i].nom);
printf("donnez le prenom :\n");
scanf("%s",&t[i].prenom);
printf("donnez le num CIN :\n");
scanf("%d",&t[i].cin);
printf("donnez le jour de naissance :\n");
scanf("%d",&t[i].jour);
printf("donnez le mois de naissance :\n");
scanf("%d",&t[i].mois);
printf("donnez l'année :\n");
scanf("%d",&t[i].annee);
printf("donnez le numero de l'employé :\n");
scanf("%d",&t[i].numrue);
printf("donnez le city :\n");
scanf("%s",&t[i].cite);
printf("donnez la ville :\n");
scanf("%s",&t[i].ville);
printf("donnez le code postal :\n");
scanf("%d",&t[i].codp);
}
for(i=0;i<max;i++)
{
 
if(&t[i].annee == &t[i+1].annee)
{
if(&t[i].mois == &t[i+1].mois)
{
if(&t[i].jour == &t[i+1].jour)
{
// j'ai pas trouver une bonne idee ... mais l'idee consiste a
// je veux associer une variable j pour
//personne i et i+1 -> faire comparaison avec i+2..
}
}
}}
getch();
return(0);
}

5 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
20 mars 2009 à 08:51
d'apres ce que tu as deja fait; je dirais :

int index_leplusage = 0;
for(i=0;i<max;i++)
{
 // je convertirais mes données pour faire 1 comparaison
int nb_de_i = t[i].jour + 100 * t[i].mois + 10000 * t[i].annee;
int nb_de_i_plus_1 = t[i+1].jour + 100 * t[i+1].mois + 10000 * t[i+1].annee;

if (nb_de_i_plus_1 < nb_de_i)
index_leplusage = i+1;

}
3
sdiri_med Messages postés 18 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 31 octobre 2010
20 mars 2009 à 13:45
salut tout le monde
merci bien [auteur/FREGOLO52/656668.aspx fregolo52]une très très bonne idée de ta part
j'ai testé cette solution mais le compilateur m'indique quelque erreurs

int nb_de_i = t[i].jour + 100 * t[i].mois + 10000 * t[i].annee;
int i_plus_1 = t[i+1].jour + 100 * t[i+1].mois + 10000 * t[i+1].annee;

for (i=0;i<10;i++)
{
if (i_plus_1 < nb_de_i)
{
p= i+1;
}
else
{
p=i;
}}}
3
sdiri_med Messages postés 18 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 31 octobre 2010
20 mars 2009 à 17:41
salut pour tout le monde


 j'ai résolu ce problème moi même  j'ai déclaré les champs jour, mois et année comme étant des tableaux d'entiers plutôt que des entiers.


voila une declaration correcte :




typedef struct CITOYEN
{
        char nom[10] ;
        char prenom[20];
        int cin;
        int jour;
        int mois;
        int annee;
        int  numrue ;
        char cite ;
        char ville[20];
        int  codp ;

}cit;





mais pourriez vous m'aider a trié ce tableau par date de naissance ?
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
20 mars 2009 à 08:52
oups j'ai validé un peu vite, tu auras compris que j'ai tout faux dans mon 'if' c'est l'inverse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sdiri_med Messages postés 18 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 31 octobre 2010
20 mars 2009 à 13:46
voila les erreurs indiquée par les le compilo
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c||In function `int main()':|
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c|48|error: invalid operands of types `int' and `int[2]' to binary `operator*'|
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c|48|error: invalid operands of types `int' and `int[4]' to binary `operator*'|
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c|49|error: invalid operands of types `int' and `int[2]' to binary `operator*'|
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c|49|error: invalid operands of types `int' and `int[4]' to binary `operator*'|
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c|57|error: `p' was not declared in this scope|
C:\Documents and Settings\Administrateur\Bureau\med 3\Untit1.c|61|error: `p' was not declared in this scope|||Build finished: 6 errors, 0 warnings|
0
Rejoignez-nous