IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

tri d'un tableau de struct


Sujet :

C

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut tri d'un tableau de struct
    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
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #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;
     
    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);
    }

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    personne ne me répond ?
    je pense que je suis dans le bon emplacement .. j'ai parcouru le forum j'ai pas trouver un sujet similaire que "tri DANS un tableau pas tri d'un tableau"

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    voila se que j'ai trouvé comme idée
    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
     
    int p = 0;
     
    for(i=0;i<max;i++)
    {
    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;
     
    if (i_plus_1 < nb_de_i) 
    {
    p= i+1;
    }
    else
    {
    p=i;
    }
    le compilateur code blocks m'indique les erreur : 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 ===|

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour des raisons qui m'échappent, tu as déclaré les champs jour, mois et année comme étant des tableaux d'entiers plutôt que des entiers.

    Cherchais-tu à en définir le nombre de chiffres (en décimal) ? Désolé, ça ne marche pas comme ça.
    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.

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    euh j'ai pas fait attention
    merci merci beaucoup Médinoc problème résolu avec cette méthode mais pourriez vous m'aider a trie ce tableau de structure par date de naissance ?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le plus simple pour trier, c'est d'écrire une fonction qui compare selon la date de naissance, et d'appeler la fonction standard qsort().
    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.

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Echap Voir le message
    j'ai un petit problème de tri d'un tableau de structure dans le but d'extraire l'employer le plus âgé
    Pour mieux le virer ?

    http://emmanuel-delahaye.developpez....Page8#LXXXVIII
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    [...] le but est de bien maitriser les structures et savoir faire le tri de ce type struct en C.
    pour la fonction qsort j'ai jeté un coup d'œil même avant votre réponse ça me parait c'est un peu difficile pour mon niveau alors je préfère une boucle d'itération simple.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Echap Voir le message
    [...] le but et de bien maitriser les structures et savoir faire le tri de ce type struct en C.
    pour la fonction qsort j'ai jeté un coup d'œil même avant votre réponse ça me parait c'est un peu difficile pour mon niveau alors je préfère une boucle d'itération simple.
    qsort() est certainement la solution la plus simple. L'algo est déjà écrit (oui, c'est plus compliqué qu'une 'boucle d'itération simple') et il fonctionne. Tout ce qu'on a à faire, c'est d'écrire une fonction de comparaison conforme et correcte.

    struct tm, mktime() et difftime() peuvent aider... (Windows : après le 01/01/1970, ce qui peut ne pas convenir avec des dates de naissances antérieures...)
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    OK je vais essayer d'adapter a mon code malgré je suis faible dans la partie des procédure&fonction
    je vais faire le max
    merci a vous tous

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Echap Voir le message
    OK je vais essayer d'adapter a mon code malgré je suis faible dans la partie des procédure&fonction
    je vais faire le max
    C'est l'occasion de progresser. Lit bien mon article, fait de ton mieux et poste ton code.
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    salut tout le monde
    j'ai décomposé mon programme en trois fonctions lecture,tri (essayé avec la méthode tri a bulle mais pas d'exécution !!) et affichage.
    0 Erreur 0 warning et l'un de deux processeur calcule a fond ! forte proba que c'est une boule infinie ! mais j'ai pas arrivé a trouver le problème
    voila mon code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #include<stdio.h>
    #include<conio.h>
    #define TRUE 1
    #define FALSE 0
    #define max 2
    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[max];
    cit v[1];
    void lecture(cit*  t)
    {
    int i;
    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 la 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); 
    }}
     
     
    void tri(cit *t) 
    {
     	int j   = 0; /* Variable de boucle */
     	cit tmp ; /* Variable de stockage temporaire */
     
    	/* Booléen marquant l'arrêt du tri si le tableau est ordonné */
    	int en_desordre = TRUE; 
    	/* Boucle de répétition du tri et le test qui
    	 arrête le tri dès que le tableau est ordonné(en_desordre=FALSE */
    	while(en_desordre)
    	{
    		/* Supposons le tableau ordonné */
    		en_desordre = FALSE;
    		/* Vérification des éléments des places j et j+1 */
    		for(j = 0 ; j <= max ; j++)
    		{
    			/* Si les  éléments sont mal triés */
    			if(t[j].annee < t[j+1].annee)
    			{
    				/* Inversion des 2 éléments */
     				tmp.annee = t[j+1].annee;
     				t[j+1].annee = t[j].annee;
     				t[j].annee = tmp.annee;
    			    tmp.mois = t[j+1].mois;
     				t[j+1].mois = t[j].mois;
     				t[j].mois = tmp.mois;
     				tmp.jour = t[j+1].jour;
     				t[j+1].jour = t[j].jour;
     				t[j].jour = tmp.jour;
     				/* Le tableau n'est toujours pas trié */
     
     			}
     			else
     			{
                    if(t[j].mois < t[j+1].mois)
    			{
    				/* Inversion des 2 éléments */
    			    tmp.annee = t[j+1].annee;
     				t[j+1].annee = t[j].annee;
     				t[j].annee = tmp.annee;
    			    tmp.mois = t[j+1].mois;
     				t[j+1].mois = t[j].mois;
     				t[j].mois = tmp.mois;
     				tmp.jour = t[j+1].jour;
     				t[j+1].jour = t[j].jour;
     				t[j].jour = tmp.jour;
                }
     
                else
     			{
                    if(t[j].jour < t[j+1].jour)
    			{
    				/* Inversion des 2 éléments */
    		    	tmp.annee = t[j+1].annee;
     				t[j+1].annee = t[j].annee;
     				t[j].annee = tmp.annee;
    			    tmp.mois = t[j+1].mois;
     				t[j+1].mois = t[j].mois;
     				t[j].mois = tmp.mois;
     				tmp.jour = t[j+1].jour;
     				t[j+1].jour = t[j].jour;
     				t[j].jour = tmp.jour;
                }//else 2
                }//else 1
                en_desordre = TRUE;
                }//if
     
    		}//for
     
    	}//while
    }//void
    void affichage(cit *t)
    {
         int i;
         for(i=0;i<=max;i++)
         {
         printf("nom :%s\n",&t[i].nom );
    printf("prenom :%s\n" ,&t[i].prenom);
    printf("num CIN :%s\n",&t[i].cin );
    printf("date de naissance jj/mm/aaaa :%d%d%d\n",&t[i].jour,&t[i].mois,&t[i].annee);
    printf("numero de l'employé :%d\n",&t[i].numrue );
    printf("la city :%s\n",&t[i].cite );
    printf("donnez la ville :%s\n",&t[i].ville );
    printf("donnez le code postal :%d\n",&t[i].codp );
    }
    }
     
    int main ()
    {
    int pos;
    lecture(t);
    tri(t);
    affichage(t);
    getch();
    return 0;
    }

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Avant d'essayer ton propre algo, as-tu essayé avec qsort() ?
    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.

  14. #14
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Tu avais déjà participé récemment à une discussion sur le même sujet mais, apparemment, tu ne te sens pas prêt à utiliser qsort. Aussi, quelques conseils :

    1 - Je ne sais pas si c'est le copier/coller de ton code qui met la grouille ou pas mais, au final, l'indentation qu'on récupère ici est épouvantable.
    Si ton code original est comme ça, tu gagnerais beaucoup à mieux le mettre en forme pour y voir quelque chose.

    2 - <conio.h> n'est pas standard (windows et/ou borland et/ou ... ?) et, en tous cas, complètement inutile ici et non portable.

    3 - Tu dis que tu n'as aucun warning mais ton compilo doit être en mode "taiseux". Avec gcc, sans option sous Ubuntu ou avec l'option "Wall" (Warining all) sous MacOSX, tu as un tas de warnings pour la plupart de tes printf et scanf + d'autres choses :
    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
    ~ $ gcc -Wall -c echap.c 
    echap.c: In function ‘lecture’:
    echap.c:27: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[9u]’
    echap.c:29: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c:40: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[14u]’
    echap.c:42: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c: In function ‘affichage’:
    echap.c:124: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[9u]’
    echap.c:125: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c:126: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int *’
    echap.c:127: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    echap.c:127: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’
    echap.c:127: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘int *’
    echap.c:128: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    echap.c:129: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[14u]’
    echap.c:130: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c:131: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    echap.c: In function ‘main’:
    echap.c:141: warning: implicit declaration of function ‘getch’
    echap.c:137: warning: unused variable ‘pos’
    As-tu bien saisi l'emploi, ou non, du '&' pour passer l'adresse d'une variable ? et le cas particulier où tu passes un tableau/une chaine et que ce '&' est inutile ?

    4 - quand un tableau est déclaré comme, par exemple, "int tab[NB]", une boucle sur l'ensemble des éléments se fera via "for (i=0;i<NB;i++)" : ne mets pas de "<=" car sinon tu vas trop loin (de 1) dans les indices

    5 - tu as choisi, dans un premier temps, de ne pas utiliser qsort pour faire ton tri, Ok.
    Dans ton code, là où tu fais le tri, l'algo de tri et la comparaison de deux structures s'entremêlent joyeusement et tu n'y gagnes pas en lisibilité.
    Dans ton tri, tu as besoin (comme qsort ...) de savoir dire, entre 2 éléments, quel est celui qui est "avant" pour les inverser, ou non. Décompose un peu plus ton code et crée une fonction "compare" qui peut avoir le prototype suivant :

    int compare(const cit *s1, const cit *s2)

    qui te renvoie -1 (ou une valeur négative) si s1 est "plus petit" que s2, +1 (ou une valeur positive) si s1 est "plus grand" et 0 s'ils sont égaux.
    L'écriture de ton algo de tri, qui appellera cette fonction (plutôt que de dérouler la suite de tests) n'en sera que plus lisible.
    Ca te permettra aussi, si besoin, de tester ta fonction de comparaison, ce qui n'est pas possible ici (imbriquée dans l'algo de tri).
    Dernier avantage : tu seras à 2 doigts d'avoir ta fonction de comparaison pour utiliser qsort.

    6 - pour faire tes tests, je te conseille de mettre de côté, pour le moment, la saisie manuelle de tes éléments et de remplir ton tableau "en dur". Ca te permettra de faire des tests sur plus que 2 éléments (c'est un peu juste comme validation ...) car tu n'auras pas à te taper la saisie à chaque fois ...

    7 - évite d'utiliser max comme nom de constante, ou même de variable (fonction ou macro, je ne sais plus, de même nom). Ca non plus ça n'améliore pas la lisiblité.
    "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 !

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Echap Voir le message
    0 Erreur 0 warning
    Règle mieux ton compilateur
    http://emmanuel-delahaye.developpez....-codage-c/#LVI

    et corrige ça

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `lecture':
    C:\dev\hello\main.c:27: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:29: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:40: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:42: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c: In function `affichage':
    C:\dev\hello\main.c:124: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:125: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:126: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:127: warning: int format, pointer arg (arg 2)
    C:\dev\hello\main.c:127: warning: int format, pointer arg (arg 3)
    C:\dev\hello\main.c:127: warning: int format, pointer arg (arg 4)
    C:\dev\hello\main.c:128: warning: int format, pointer arg (arg 2)
    C:\dev\hello\main.c:129: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:130: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:131: warning: int format, pointer arg (arg 2)
    C:\dev\hello\main.c: At top level:
    C:\dev\hello\main.c:136: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:137: warning: unused variable `pos'
    Output size is 22.28 KB
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 16 warnings
    Tu devrais partir sur des bases plus saines comme ceci :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    #include<stdio.h>
     
    #define TRUE 1
    #define FALSE 0
     
    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;
     
    void lecture (cit * t, int max)
    {
       int i;
       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 la 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);
       }
    }
     
    void tri (cit * t, int max)
    {
       int j = 0;                   /* Variable de boucle */
       cit tmp;                     /* Variable de stockage temporaire */
     
       /* Booléen marquant l'arrêt du tri si le tableau est ordonné */
       int en_desordre = TRUE;
       /* Boucle de répétition du tri et le test qui
          arrête le tri dès que le tableau est ordonné(en_desordre=FALSE */
       while (en_desordre)
       {
          /* Supposons le tableau ordonné */
          en_desordre = FALSE;
          /* Vérification des éléments des places j et j+1 */
          for (j = 0; j < max; j++)
          {
             /* Si les  éléments sont mal triés */
             if (t[j].annee < t[j + 1].annee)
             {
                /* Inversion des 2 éléments */
                tmp.annee = t[j + 1].annee;
                t[j + 1].annee = t[j].annee;
                t[j].annee = tmp.annee;
                tmp.mois = t[j + 1].mois;
                t[j + 1].mois = t[j].mois;
                t[j].mois = tmp.mois;
                tmp.jour = t[j + 1].jour;
                t[j + 1].jour = t[j].jour;
                t[j].jour = tmp.jour;
                /* Le tableau n'est toujours pas trié */
     
             }
             else
             {
                if (t[j].mois < t[j + 1].mois)
                {
                   /* Inversion des 2 éléments */
                   tmp.annee = t[j + 1].annee;
                   t[j + 1].annee = t[j].annee;
                   t[j].annee = tmp.annee;
                   tmp.mois = t[j + 1].mois;
                   t[j + 1].mois = t[j].mois;
                   t[j].mois = tmp.mois;
                   tmp.jour = t[j + 1].jour;
                   t[j + 1].jour = t[j].jour;
                   t[j].jour = tmp.jour;
                }
     
                else
                {
                   if (t[j].jour < t[j + 1].jour)
                   {
                      /* Inversion des 2 éléments */
                      tmp.annee = t[j + 1].annee;
                      t[j + 1].annee = t[j].annee;
                      t[j].annee = tmp.annee;
                      tmp.mois = t[j + 1].mois;
                      t[j + 1].mois = t[j].mois;
                      t[j].mois = tmp.mois;
                      tmp.jour = t[j + 1].jour;
                      t[j + 1].jour = t[j].jour;
                      t[j].jour = tmp.jour;
                   }                /* else 2 */
                }                   /* else 1 */
                en_desordre = TRUE;
             }                      /* if */
     
          }                         /* for */
     
       }                            /* while */
    }                               /* void */
     
    void affichage (cit * t, int max)
    {
       int i;
       for (i = 0; i < max; i++)
       {
          printf ("nom :%s\n", t[i].nom);
          printf ("prenom :%s\n", t[i].prenom);
          printf ("num CIN :%d\n", t[i].cin);
          printf ("date de naissance jj/mm/aaaa :%d%d%d\n", t[i].jour,
                  t[i].mois, t[i].annee);
          printf ("numero de l'employé :%d\n", t[i].numrue);
          printf ("la city :%s\n", t[i].cite);
          printf ("ville :%s\n", t[i].ville);
          printf ("code postal :%d\n", t[i].codp);
       }
    }
     
    int main (void)
    {
    #define MAX 2
     
       cit t[MAX];
     
       lecture (t, MAX);
       tri (t, MAX);
       affichage (t, MAX);
     
       return 0;
    }
    Mais tu devrais apprendre à résoudre un problème à la fois.

    Ici, il y a principalement un problème de tri. Apprend à utiliser correctement qsort(). Tu as déjà eu toutes les aides nécessaires. Poste le code qui ne fonctionne pas avec qsort().

    D'autre part, la conception de la structure de donnée est incorrecte. On utilise les champs numériques uniquement pour des données représentant une valeur numérique. Un code postal n'est pas une valeur numérique.

    Enfin, pour faire un test, inutile de s'encombrer avec une saisie manuelle...
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    merci pour vos réponse tous
    Citation Envoyé par Médinoc Voir le message
    Avant d'essayer ton propre algo, as-tu essayé avec qsort() ?
    pas encore

  17. #17
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Tu avais déjà participé récemment à une discussion sur le même sujet mais, apparemment, tu ne te sens pas prêt à utiliser qsort.
    oui exactement je ne sais pas, dès que je vois la qsort je m'enfuis mais apparemment c'est elle qui me
    Citation Envoyé par plxpy Voir le message
    le mettre en forme pour y voir quelque chose.
    comment ?

    Citation Envoyé par plxpy Voir le message
    2 - <conio.h> n'est pas standard (windows et/ou borland et/ou ... ?) et, en tous cas, complètement inutile ici et non portable.
    OS:je suis sous windows vista sp1
    compilateur: devc++
    Citation Envoyé par plxpy Voir le message
    3 - Tu dis que tu n'as aucun warning mais ton compilo doit être en mode "taiseux". Avec gcc, sans option sous Ubuntu ou avec l'option "Wall" (Warining all) sous MacOSX, tu as un tas de warnings pour la plupart de tes printf et scanf + d'autres choses :
    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
    ~ $ gcc -Wall -c echap.c 
    echap.c: In function ‘lecture’:
    echap.c:27: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[9u]’
    echap.c:29: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c:40: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[14u]’
    echap.c:42: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c: In function ‘affichage’:
    echap.c:124: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[9u]’
    echap.c:125: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c:126: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int *’
    echap.c:127: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    echap.c:127: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’
    echap.c:127: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘int *’
    echap.c:128: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    echap.c:129: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[14u]’
    echap.c:130: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[19u]’
    echap.c:131: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    echap.c: In function ‘main’:
    echap.c:141: warning: implicit declaration of function ‘getch’
    echap.c:137: warning: unused variable ‘pos’
    As-tu bien saisi l'emploi, ou non, du '&' pour passer l'adresse d'une variable ? et le cas particulier où tu passes un tableau/une chaine et que ce '&' est inutile ?

    4 - quand un tableau est déclaré comme, par exemple, "int tab[NB]", une boucle sur l'ensemble des éléments se fera via "for (i=0;i<NB;i++)" : ne mets pas de "<=" car sinon tu vas trop loin (de 1) dans les indices

    5 - tu as choisi, dans un premier temps, de ne pas utiliser qsort pour faire ton tri, Ok.
    Dans ton code, là où tu fais le tri, l'algo de tri et la comparaison de deux structures s'entremêlent joyeusement et tu n'y gagnes pas en lisibilité.
    Dans ton tri, tu as besoin (comme qsort ...) de savoir dire, entre 2 éléments, quel est celui qui est "avant" pour les inverser, ou non. Décompose un peu plus ton code et crée une fonction "compare" qui peut avoir le prototype suivant :

    int compare(const cit *s1, const cit *s2)

    qui te renvoie -1 (ou une valeur négative) si s1 est "plus petit" que s2, +1 (ou une valeur positive) si s1 est "plus grand" et 0 s'ils sont égaux.
    L'écriture de ton algo de tri, qui appellera cette fonction (plutôt que de dérouler la suite de tests) n'en sera que plus lisible.
    Ca te permettra aussi, si besoin, de tester ta fonction de comparaison, ce qui n'est pas possible ici (imbriquée dans l'algo de tri).
    Dernier avantage : tu seras à 2 doigts d'avoir ta fonction de comparaison pour utiliser qsort.

    6 - pour faire tes tests, je te conseille de mettre de côté, pour le moment, la saisie manuelle de tes éléments et de remplir ton tableau "en dur". Ca te permettra de faire des tests sur plus que 2 éléments (c'est un peu juste comme validation ...) car tu n'auras pas à te taper la saisie à chaque fois ...

    7 - évite d'utiliser max comme nom de constante, ou même de variable (fonction ou macro, je ne sais plus, de même nom). Ca non plus ça n'améliore pas la lisiblité.
    oui la la la la le gcc me choque !!!
    je vais unistall le devc++
    6-,7- :merci beaucoup pour les détail "c'est très important"
    int compare(....) :mais c'est pas possible en c on ne peut pas imbriquer deux fonctions ,le tri nécessite une fonction et compare est une autre fonction qui revoie une valeur sur la quel en va basé le changement de l'emplacement des données !
    je crois qu'il faut passer a la qsort même je l'aime pas

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Echap Voir le message
    int compare(....) :mais c'est pas possible en c en ne peux pas imbriqué deux fonction ,le tri nécessite une fonction et compare est une autre fonction qui revoie une valeur sur la quel en va basé le changement de l'emplacement des données !
    Et alors? Tu n'es pas obligé de les imbriquer!

    Regarde le code que j'ai posté au début du thread que tu as squatté...
    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.

  19. #19
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Règle mieux ton compilateur

    http://emmanuel-delahaye.developpez....-codage-c/#LVI

    et corrige ça
    merci bien Delahaye votres pages sont très riche je vais unistall le devc++
    Citation Envoyé par Emmanuel Delahaye Voir le message
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `lecture':
    C:\dev\hello\main.c:27: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:29: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:40: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:42: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c: In function `affichage':
    C:\dev\hello\main.c:124: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:125: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:126: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:127: warning: int format, pointer arg (arg 2)
    C:\dev\hello\main.c:127: warning: int format, pointer arg (arg 3)
    C:\dev\hello\main.c:127: warning: int format, pointer arg (arg 4)
    C:\dev\hello\main.c:128: warning: int format, pointer arg (arg 2)
    C:\dev\hello\main.c:129: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:130: warning: char format, different type arg (arg 2)
    C:\dev\hello\main.c:131: warning: int format, pointer arg (arg 2)
    C:\dev\hello\main.c: At top level:
    C:\dev\hello\main.c:136: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:137: warning: unused variable `pos'
    Output size is 22.28 KB
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 16 warnings
    Tu devrais partir sur des bases plus saines comme ceci :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    #include<stdio.h>
     
    #define TRUE 1
    #define FALSE 0
     
    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;
     
    void lecture (cit * t, int max)
    {
       int i;
       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 la 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);
       }
    }
     
    void tri (cit * t, int max)
    {
       int j = 0;                   /* Variable de boucle */
       cit tmp;                     /* Variable de stockage temporaire */
     
       /* Booléen marquant l'arrêt du tri si le tableau est ordonné */
       int en_desordre = TRUE;
       /* Boucle de répétition du tri et le test qui
          arrête le tri dès que le tableau est ordonné(en_desordre=FALSE */
       while (en_desordre)
       {
          /* Supposons le tableau ordonné */
          en_desordre = FALSE;
          /* Vérification des éléments des places j et j+1 */
          for (j = 0; j < max; j++)
          {
             /* Si les  éléments sont mal triés */
             if (t[j].annee < t[j + 1].annee)
             {
                /* Inversion des 2 éléments */
                tmp.annee = t[j + 1].annee;
                t[j + 1].annee = t[j].annee;
                t[j].annee = tmp.annee;
                tmp.mois = t[j + 1].mois;
                t[j + 1].mois = t[j].mois;
                t[j].mois = tmp.mois;
                tmp.jour = t[j + 1].jour;
                t[j + 1].jour = t[j].jour;
                t[j].jour = tmp.jour;
                /* Le tableau n'est toujours pas trié */
     
             }
             else
             {
                if (t[j].mois < t[j + 1].mois)
                {
                   /* Inversion des 2 éléments */
                   tmp.annee = t[j + 1].annee;
                   t[j + 1].annee = t[j].annee;
                   t[j].annee = tmp.annee;
                   tmp.mois = t[j + 1].mois;
                   t[j + 1].mois = t[j].mois;
                   t[j].mois = tmp.mois;
                   tmp.jour = t[j + 1].jour;
                   t[j + 1].jour = t[j].jour;
                   t[j].jour = tmp.jour;
                }
     
                else
                {
                   if (t[j].jour < t[j + 1].jour)
                   {
                      /* Inversion des 2 éléments */
                      tmp.annee = t[j + 1].annee;
                      t[j + 1].annee = t[j].annee;
                      t[j].annee = tmp.annee;
                      tmp.mois = t[j + 1].mois;
                      t[j + 1].mois = t[j].mois;
                      t[j].mois = tmp.mois;
                      tmp.jour = t[j + 1].jour;
                      t[j + 1].jour = t[j].jour;
                      t[j].jour = tmp.jour;
                   }                /* else 2 */
                }                   /* else 1 */
                en_desordre = TRUE;
             }                      /* if */
     
          }                         /* for */
     
       }                            /* while */
    }                               /* void */
     
    void affichage (cit * t, int max)
    {
       int i;
       for (i = 0; i < max; i++)
       {
          printf ("nom :%s\n", t[i].nom);
          printf ("prenom :%s\n", t[i].prenom);
          printf ("num CIN :%d\n", t[i].cin);
          printf ("date de naissance jj/mm/aaaa :%d%d%d\n", t[i].jour,
                  t[i].mois, t[i].annee);
          printf ("numero de l'employé :%d\n", t[i].numrue);
          printf ("la city :%s\n", t[i].cite);
          printf ("ville :%s\n", t[i].ville);
          printf ("code postal :%d\n", t[i].codp);
       }
    }
     
    int main (void)
    {
    #define MAX 2
     
       cit t[MAX];
     
       lecture (t, MAX);
       tri (t, MAX);
       affichage (t, MAX);
     
       return 0;
    }
    Mais tu devrais apprendre à résoudre un problème à la fois.

    Ici, il y a principalement un problème de tri. Apprend à utiliser correctement qsort(). Tu as déjà eu toutes les aides nécessaires. Poste le code qui ne fonctionne pas avec qsort().
    ok y a pas une autre méthode plus efficace donc je vais le trié avec qsort()
    Citation Envoyé par Emmanuel Delahaye Voir le message
    D'autre part, la conception de la structure de donnée est incorrecte.
    comment la conception est incorrecte moi j'ai étudier comme ça !! s'il vous plaît pourriez vous me corrigé
    merci pour vous tous

  20. #20
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Et alors? Tu n'es pas obligé de les imbriquer!
    oui tout simplement comme ça !!
    je pense avec les instruction de branchement (break goto ..) ça marche nn ?
    Citation Envoyé par Médinoc Voir le message
    Regarde le code que j'ai posté au début du thread que tu as squatté...
    merci je vais lire la participation

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Tri d'un tableau en 2D
    Par sniperseb dans le forum C
    Réponses: 4
    Dernier message: 05/01/2006, 16h33
  2. Réponses: 6
    Dernier message: 16/09/2005, 10h30
  3. tri d'un tableau à 2 dimensions
    Par dede92 dans le forum C
    Réponses: 4
    Dernier message: 19/02/2005, 18h29
  4. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo