Partage
  • Partager sur Facebook
  • Partager sur Twitter

Effectuer un trie sur une structure

    14 février 2022 à 1:38:50

    Bonsoir,

    Je suis novice en C et j'ai un problème à résoudre.

    Je dois créer une structure qui doit contenir le nom de 4 joueurs et leurs scores respectifs. Ensuite je dois trié ça de façon à obtenir les joueurs en ordre croissant de leur score.

    Mais mon problème est que les noms des joueurs ne suivent pas les scores. Merci d'avance pour votre aide.

    Voici ce que j'ai fait:

    #include <stdio.h>

    #include <string.h>

    #define TAILLE 4

    int main()

    {

        struct scores{char nomj[32]; int score;}joueurs[TAILLE];

        int temp;

        int x;

        int externe;

        int interne;

        for(x=0; x<TAILLE; x++)

        {

            printf("Indiquer le joueur %d : ", x+1);

            scanf("%s", joueurs[x].nomj);

            printf("Indique son score : ");

            scanf("%d", &joueurs[x].score);

        }

        puts("Info de joueur");

        printf("#\tnom\tScore\n");

        for(x=0; x<TAILLE; x++)

        {

            printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomj, joueurs[x].score);

        }

        /*JOUEURS sort*/

        for(externe=0; externe<TAILLE; externe++)

        {

            for(interne=externe+1; interne<TAILLE; interne++)

            {

                if(joueurs[externe].score < joueurs[interne].score)

                {

                    temp = joueurs[externe].score;

                    joueurs[externe].score = joueurs[interne].score;

                    joueurs[interne].score = temp;

                }

            }

        }

       /*Affiche le tableau apres tri*/

        puts("Tableau apres tri : ");

        printf("#\tnom\tscore\n");

        for(x=0; x<4; x++)

             printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomj,joueurs[x].score);

        putchar('\n');

        return (0);

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2022 à 2:15:22

      Dans ton tri, tu échanges les scores, mais tu n'échanges pas les noms. Tu peux faire:
                      struct scores temp = joueurs[externe];
                      joueurs[externe] = joueurs[interne];
                      joueurs[interne] = temp;
      On peut déplacer des structures complètes (à éviter quand elles sont trop grosses).
      Pour ta boucle externe, tu peux faire:
          for(externe=0; externe<TAILLE - 1; externe++)
      Ça ne sert à rien de comparer un élément avec lui-même et de toute façon la dernière boucle interne ne s'exécutera pas.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        14 février 2022 à 2:23:30 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


          14 février 2022 à 4:45:09

          Bonjour,

          Merci de colorer votre code à l'aide du bouton Code

          Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

          Merci de modifier votre message d'origine en fonction. En image cela donne :

          Liens conseillés

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2022 à 4:51:14

            @AbcAbc6: ça peut devenir compliqué d'expliquer aux gens que je suis aveugle et que je n'ai pas accès au bouton </> code.

            @JanickGauthier: j'ai "vu" ton code avant modération ...

            Tu n'avais pas mis le test correctement dans le if, il fallait mettre > au lieu de <
            Voici mon code:
            -
            #include <stdio.h>
            #include <string.h>
            #define TAILLE 4
            int main() {
                struct scores{char nomj[32]; int score;}joueurs[TAILLE];
                for(int x=0; x<TAILLE; x++) {
                    printf("Indiquer le joueur %d : ", x+1);
                    scanf("%s", joueurs[x].nomj);
                    printf("Indique son score : ");
                    scanf("%d", &joueurs[x].score);
                }
                puts("Info de joueur");
                printf("#\tnom\tScore\n");
                for(int x=0; x<TAILLE; x++) {
                    printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomj, joueurs[x].score);
                }
                for(int externe=0; externe<TAILLE - 1; externe++) {
                    for(int interne=externe+1; interne<TAILLE; interne++){
                        if(joueurs[externe].score > joueurs[interne].score) {
                            struct scores temp = joueurs[externe];
                            joueurs[externe] = joueurs[interne];
                            joueurs[interne] = temp;
                        }
                    }
                }
                puts("Tableau apres tri : ");
                printf("#\tnom\tscore\n");
                for(int x=0; x<4; x++)
                    printf("%d\t%s\t%5d\n", x+1, joueurs[x].nomj,joueurs[x].score);
                putchar('\n');
                return (0);
            }
            -
            Indiquer le joueur 1 : albert                                                                                           
            Indique son score : 5                                                                                                   
            Indiquer le joueur 2 : bernard                                                                                          
            Indique son score : 2                                                                                                   
            Indiquer le joueur 3 : claude                                                                                           
            Indique son score : 8                                                                                                   
            Indiquer le joueur 4 : daniel                                                                                           
            Indique son score : 6                                                                                                   
            Info de joueur                                                                                                          
            #       nom     Score                                                                                                   
            1       albert      5                                                                                                   
            2       bernard     2                                                                                                   
            3       claude      8                                                                                                   
            4       daniel      6                                                                                                   
            Tableau apres tri :                                                                                                     
            #       nom     score                                                                                                   
            1       bernard     2                                                                                                   
            2       albert      5                                                                                                   
            3       daniel      6                                                                                                   
            4       claude      8

            -
            Edité par PierrotLeFou 14 février 2022 à 5:08:12

            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              14 février 2022 à 8:21:43

              Je ne sais pas pourquoi @pierrot fait une fixette sur (contre) les structures, mais quoi qu'il en soit Il n'y a pas de "à éviter quand les structures sont grosses" qui tienne.

              Soit on a besoin de copier la structure (tous ses champs), et l'affectation le fait très bien, de façon optimale. Soit il ne faut pas, et on ne le fait pas.

              -
              Edité par michelbillaud 14 février 2022 à 8:24:58

              • Partager sur Facebook
              • Partager sur Twitter
                14 février 2022 à 15:19:29

                J'avoue ne pas avoir précisé ma pensée.
                Quand les structures sont très grosses (je parle de centaines ou de milliers d'octets), il vaut mieux avoir un tableau de pointeurs vers ces structures.
                Dans ce cas, ce sont uniquement les pointeurs qui sont échangés.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  14 février 2022 à 15:37:08

                  PierrotLeFou a écrit:

                  @AbcAbc6: ça peut devenir compliqué d'expliquer aux gens que je suis aveugle et que je n'ai pas accès au bouton </> code.

                  En fait AbcAbc6 s'adressait à JanickGautier, qui n'avait pas utilisé l'éditeur de code. Mais je suppose que tu ne peux pas t'en rendre compte ? Du coup le malentendu est peut-être fréquent...

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 février 2022 à 18:11:28 - Message modéré pour le motif suivant : Message complètement hors sujet


                    Le Tout est souvent plus grand que la somme de ses parties.

                      14 février 2022 à 19:08:25 - Message modéré pour le motif suivant : Message complètement hors sujet


                      ...
                        15 février 2022 à 1:27:59 - Message modéré pour le motif suivant : Message complètement hors sujet


                        Le Tout est souvent plus grand que la somme de ses parties.

                          15 février 2022 à 1:36:01

                          Bonsoir,

                          @PierrotLeFou La remarque de modération s'adressait bien à @JanickGautier comme l'indique @robun.

                          @PierrotLeFou et @rouloude Pourriez-vous continuer à discuter en message privé car la c'est hors sujet. Merci

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Effectuer un trie sur une structure

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown