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 :

Affichage du tableau avec la fonction qsort


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Par défaut Affichage du tableau avec la fonction qsort
    Bonjour,

    Je me suis fait un petit exercice pour apprendre à programmer, mais j'aimerai pouvoir trier les scores, je précise que j'ai "péché" cette fonction sur le web.
    Mon problème est le suivant, ça ne trie pas selon le score obtenu :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
     
    struct fiche
    {
     
       int joueur;
    };
     
    /* affichage du tableau */
    static void aff (struct fiche const *a, size_t n)
    {
       size_t i;
       for (i = 0; i < n; i++)
       {
          /* pointeur intermediaire pour alleger l'ecriture */
          struct fiche const *p = a + i;
          printf ("%-10s %-10s \n", p->joueur);
       }
       printf ("\n");
    }
     
    /* fonction utilisateur de comparaison fournie a qsort() */
    static int compare_joueur_dec (void const *a, void const *b)
    {
       struct fiche const *pa = a;
       struct fiche const *pb = b;
     
       return pb->joueur - pa->joueur;
    }
     
    int main()
    {
     
    int chance = 0, logique = 0, mental = 0;
    int joueur[4];
    int i;
    for(i = 1 ; i < 4 ; i++)
    {
    printf("\n\n Joueur %d, entrez Chance, Logique et Niveau\n",i);
     scanf("%d", &chance);
     scanf("%d", &logique);
     scanf("%d", &niveau);
     joueur[i] = (chance * 2) + logique + niveau;
    }
     
    /* tableau a trier (tableau de pointeurs sur char const) */
       struct fiche tab[] = { "joueur", joueur };
     
       qsort (tab, sizeof tab / sizeof *tab, sizeof *tab, compare_joueur_dec);
     
    /* affichage du tableau apres le tri */
       aff (tab, sizeof tab / sizeof *tab);
     
        return 0;
    }
    J'ai essayé plusieurs choses dont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct fiche tab[] = {
          {"joueur", "1", joueur1},       {"joueur", "3", joueur3},
          {"joueur", "4", joueur4},
          {"joueur", "2", joueur2},
       };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct fiche tab[] = { "joueur", joueur[i] };
    Mais sans succès.


    Merci.

  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
    struct fiche ne contient qu'un int (joueur) et cela ne correspond pas du tout à ce genre d'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     struct fiche tab[] = {
          {"joueur", "1", joueur1},       {"joueur", "3", joueur3},
          {"joueur", "4", joueur4},
          {"joueur", "2", joueur2},
       };
    Ni non plus au format du printf() de aff()

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Par défaut
    Il n'y a donc pas de moyen afin de classer/trier ces scores ?

    Merci.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Si.

    C'est juste que, d'une part, tu as défini ta structure comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct fiche
    {
     
       int joueur;
    };
    Chaque fiche ne contient donc qu'un entier. Il faut ajouter tes deux pointeurs « const char * » dans ta déclaration si tu veux pouvoir initialiser ton tableau comme tu le fais.

    D'autre part, tu utilises « joueur1 », « joueur2 », « joueur3 » et « joueur4 », qui sont chacun des noms de variables distincts, variables qui n'existent pas (déclarées nulle part). En revanche, tu pourrais effectivement utiliser « joueur[0] », « joueur[1] », « joueur[2] » et « joueur[3] » mais ces valeurs ne sont connues qu'à l'exécution. Tu ne peux donc pas t'en servir pour demander au compilateur d'initialiser ton tableau avec.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Par défaut
    Je suis toujours bloqué à "struct fiche tab[] =", je pense qu'il est plus judicieux que je reprenne tout depuis le début et de mieux comprendre l’algorithme quicksort.


    Merci.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Cannot Voir le message
    Je suis toujours bloqué à "struct fiche tab[] =", je pense qu'il est plus judicieux que je reprenne tout depuis le début
    C'est parfois utile...

    Citation Envoyé par Cannot Voir le message
    et de mieux comprendre l’algorithme quicksort.
    Ben justement, avec la fonction qsort t'as pas besoin de connaitre l'algo. Tu l'appelles et c'est elle qui, ayant déjà l'algo programmé dans son code, se charge de te trier ton tableau...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/05/2012, 08h33
  2. Trouver un nombre dans un tableau avec une fonction
    Par neufrdb dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 27/03/2011, 16h33
  3. [MySQL] problème d'affichage dans tableau avec bdd Mysql
    Par sinifer dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/05/2009, 09h50
  4. Affichage de tableau avec recherche
    Par jpower dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 28/08/2007, 15h28
  5. [ImageMagick] Affichage d'image avec la fonction imagejpeg()
    Par yuri dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/12/2005, 13h40

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