Tri d'un tableau de struct [Résolu]

Signaler
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010
-
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010
-
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

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
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;

}
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010

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;
}}}
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010

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 ?
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
oups j'ai validé un peu vite, tu auras compris que j'ai tout faux dans mon 'if' c'est l'inverse.
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010

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|