Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage d'un tableau trié suite au tri fusion

Sujet résolu
    17 janvier 2018 à 20:31:29

    Bonjour,

    Je suis en Terminale S, option ISN et nous avons comme projet à rendre d'afficher un tableau trié suite au tri par fusion, en langage C.

    Nous avons trouvé divers code pour les fonctions, mais aucun avec une fonction main dans lequel il y a un affichage du tableau.

    Les fonctions : 

        void tri_fusion (int *liste, int taille)
        {
            if (taille < 2) return;
            int milieu = taille / 2;
            tri_fusion(liste, milieu);
            tri_fusion(liste, taille - milieu);
            fusion(liste, taille, milieu);
        }
        void fusion (int *a, int n, int m)
        {
            int i, j, k;
            int *x = malloc(n * sizeof (int));
            for (i = 0, j = m, k = 0; k < n; k++)
            {
                x[k] = j == n      ? a[i++]
                     : i == m      ? a[j++]
                     : a[j] < a[i] ? a[j++]
                     :               a[i++];
            }
            for (i = 0; i < n; i++)
            {
                a[i] = x[i];
            }
            free(x);
        }

    (Je reprécise que je les ai trouvé sur le net)

    J'ai alors essayé de bidouiller différentes choses pour return les valeurs du tableau a[i], mais sans succès.

    J'avais donc tenté cela:

        int main(void)
        {
            int taille=49;
            printf("Quelle est la taille du tableau? ");
            scanf("%d", &taille);
            int i;
            int tab[49];
            printf("Rentrez les valeurs : \n");
            for(i=0; i<=taille; i++)
            {
                scanf("%d", &tab[i]);
            }
            printf("Le tableau trié : \n %d", tri_fusion(tab, taille));
            return 0;
        }



    Avec un 

            for(i=0; i<=n; i++)
            {
            return a[i];
            }

    dans la fonction fusion.

    Je me dirige donc vers vous pour essayer de m'aiguiller sur la manière dont je pourrais procéder pour qu'il m'affiche les valeurs.

    Merci :)



    -
    Edité par LucAntoni 17 janvier 2018 à 20:31:58

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2018 à 20:44:51

      Salut !

      J'allais dire "t'as fait le plus dur ", non tu as pompé le plus dur ! :lol:

      Pour afficher ton tableau, fait un for, et pas de return dedans mais un printf tab[i] avec i=0;i<n dans le for.

      Mais a mon avis, ton prof attend que vous fassiez les fonctions non ? Pas que vous les pompiez si ?

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        17 janvier 2018 à 20:51:37

        Je n'ai peut-être pas bien compris, mais tu arrive pas à afficher un tableau ?

        Tu as du louper des étapes alors si tu en es déjà au tri de tableaux !

        Pour afficher un tableau, en général on utilise une boucle for, avec la variable incrémentée de la boucle comme indice d'accès au tableau.

        La ligne 13 de ta fonction main, n'a pas de sens !

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2018 à 21:29:46

          Hello,

          Autre erreur, ligne 9 du main() et ligne 1 dernier code: pas <=, mais <

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            17 janvier 2018 à 22:03:55

            Ohla, déjà autant de monde pour répondre, merci beaucoup ^^

            Pour le pompage, je lui ai montré les différents sites sur lesquels j'ai pu trouver les codes donc il n'avait pas l'air d'y voir d'inconvénient. Je pense que par rapport au programme (scolaire) sur ce chapitre, le but n'est pas de faire créer aux élèves ces fonctions là, cette technique de tri, mais plutôt de comprendre leur fonctionnement et enjeux (récursivité, complexité du programme, temps d’exécution, tout ça). Effectivement, on à côté du programme à coder, à rendre un genre de "dossier d'études" et on aura un passage l'oral avec diapo, etc... pour expliquer aux autres élèves le fonctionnement du tri.

            Sinon, si si je sais bien comment afficher un tableau, la chose que je ne comprenais pas été comment utiliser les valeurs du tableau final qui ont été trier dans la fonction pour les afficher.

            J'ai essayé de mettre la boucle for dans la fonction fusion (à la fin bien sûr) mais à l'affichage il y a plus de valeurs que prévu, et elles ne sont pas triées. Je reprendrai le programme demain à tête reposée pour essayer de voir cela.

            Et pour le <= je l'avais déjà modifié c'est juste que je travaille avec plusieurs programme pour essayer différentes solutions et sur celui-ci que j'ai copié j'ai oublié de le faire ^^.

            En tout cas merci de vos réponses!

            • Partager sur Facebook
            • Partager sur Twitter
              17 janvier 2018 à 22:54:29

              Salut,

              Tu ne dois pas afficher ton tableau dans ta fonction de tri. Tu tries ton tableau, et ensuite, une fois qu’il est trié, tu peux l’afficher.

              int main(void)
              {
                  ...
                  tri_fusion(tab, taille);
                  /* Maintenant, tab est trié, on peut l’afficher. */
                  afficher_tableau(tab, taille);
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
              Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                19 janvier 2018 à 17:40:21

                Salut.

                J'ai fait exactement cela et bizarrement les valeurs ne sont pas triées mais sont dans un ordre totalement random (mais jamais l'ordre de base)..  Ce que je n'arrive pas à comprendre.

                Je vais encore voir ça.

                • Partager sur Facebook
                • Partager sur Twitter
                  19 janvier 2018 à 18:46:04

                  Ton code de tri ne fonctionne pas !

                  LucAntoni a écrit:

                  (Je reprécise que je les ai trouvé sur le net)

                  Trouve en un autre, ou si le but est de le faire, va voir ici : https://fr.wikipedia.org/wiki/Tri_fusion 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 janvier 2018 à 14:13:45

                    Bonjour tout le monde!

                    Tout est réglé désormais, je vous remercie pour votre aide!

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Affichage d'un tableau trié suite au tri fusion

                    × 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