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 :

Problème avec mon tri


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Par défaut Problème avec mon tri
    Bonjour,j'ai fait un programme pour trié des âges mais ma fonction trie ne fonctionne pas.

    Le programme fonctionne.
    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
    //---------------
    #include <stdio.h>
    #pragma hdrstop
    #include"prototype.h"
    #include <tchar.h>
    //---------------------------------------------------------------------------
     
    #pragma argsused
     
    struct membre { char nom[50]; int age;};
    struct membre *equipe;
    struct membre *index[10];
    int nbmembre = 0, i;
    char lettre;
     
     
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
     
    equipe = malloc(sizeof(struct membre) * 10);
     
    do
    {
    printf("tapez a pour ajouter\n\n");
    printf("tapez b pour afficher le tableau original\n\n");
    printf("tapez c pour afficher le tableau des index\n\n");
    printf("tapez d pour trier par par nom\n\n");
    printf("tapez e pour sortir\n\n");
    scanf("%s",&lettre);
    printf("\n\n");
     
        if (lettre == 'a')
            {
            ajouter();
            }
     
        if (lettre == 'b')
            {
            afficher_ori();
            }
        if (lettre == 'c')
            {
            afficher_index();
            }
        if (lettre == 'd')
            {
            trier_ite();
            }
     
     
    }while ( (nbmembre < 9) && (lettre != 'e') ) ;
    free(equipe);
    system("pause");
    return 0;
    }
    void ajouter()
     
    {
            printf("entrez le nom du joueur\n\n");
            scanf("%s",&equipe[nbmembre].nom);
            printf("\n\n");
            printf("entrez l'age du joueur\n\n");
            scanf("%d",&equipe[nbmembre].age);
            printf("\n\n");
            index[nbmembre]=&equipe[nbmembre];
            nbmembre++;
    }
     
    void afficher_ori()
    {
    for (i = 0; i < nbmembre; i++)
         {
         printf("le nom du joueur n° %d est %s et son ages est de %d\n\n",i,equipe[i].nom,equipe[i].age);
         }
    }
     
    void afficher_index()
    {
     
     
            for (i = 0; i < nbmembre; i++)
                    {
                    printf("le joueur numero %d s'appelle %s et est age de %d\n\n",i,index[i]->nom,index[i]->age);
                    printf("\n\n");
     
                    }
    }
    void trier_ite()
    {
    int n;
    int inter, flag;
     
    flag =0;
     
    n = nbmembre;
     
    while ( (n>=2) && (flag) )
     
    for (i = 0; i < n; i++)
    {
    if ( (index[i]->age) > (index[i+1]->age) )
            {
            inter = index[i];
            index[i] = index[i+1];
            index[i+1] = inter;
            flag = 1;
            }
     
     
     
    }
    n--;
    }
    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Quelques remarques :

    1- Supprimer les variables globales equipe, index, nbmembre, i, lettre. C'est une très mauvaise habitude que de les utiliser.

    2- Pourquoi faire de l'allocation dynamique pour equipe alors que la quantité est incrite en dur dans index ? Ou on en fait aussi pour index, ou on n'en fait pas du tout.

    3- Il serait logique de regrouper tous ce qui concerne la caractérisation d'une équipe. Par exemple, en faisant de l'allocation dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Equipe
    {
      struct membre *membres;
      struct membre **index;
      int nbmembre ;
    }
    4- Il faut toujours tester la réussite des allocations dynamiques

    5- Ceci est faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char lettre;
    ...
    scanf("%s",&lettre);
    lettre devrait, avec ce format, être un tableau d'au moins 2 caractères (1 pour la lettre, 1 pour le 0 terminal en croisant les doigts pour que l'utilisateur n'en tape pas plus).
    Il vaut mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char lettre;
    ...
    scanf("%c%*[^\n]%*c",lettre);
    Ce format lit le premier caractère de la ligne entrée dans lettre (%c) et vide le buffer du reste de la ligne tapée pour permettre l'entrée de la commande suivante (%*[^\n]%*c).

    5- un switch() serait plus "esthétique" et approprié que cette série de if

    6- scanf("%s",&equipe[nbmembre].nom);le champ nom est un tableau. on devrait avoir scanf("%s",equipe[nbmembre].nom);.

    7- while ( (n>=2) && (flag) )la boucle n'est jamais exécutée puisque flag est initialisé à 0

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2006, 19h48
  2. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 00h26
  3. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02
  4. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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