Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableaux - Exercice 5

Sujet résolu
    4 février 2017 à 20:34:20

    Bonjour,

    Je débute dans le langage C, et j'en suis au chapitre sur les tableaux. Il se trouve que je suis bloqué au dernier exercice, l'exercice 5, où il faut classer les données d'un tableau dans l'ordre. Voici l'énoncé :

    Créez une fonction ordonnerTableau qui classe les valeurs d'un tableau dans l'ordre croissant. Ainsi, un tableau qui vaut {15, 81, 22, 13} doit à la fin de la fonction valoir {13, 15, 22, 81}.

    J'ai donc rédigé un code qui est QUASIMENT fonctionnel. Le voici :

    #include <stdio.h>
    #include <stdlib.h>
    
    void ordonnerTableau(int tableau[] , int tailleTableau);
    
    int main()
    {
        int tableau[5] = {3 , 2 , 4 , 0 , 1};
        int tailleTableau = 5;
    
        ordonnerTableau(tableau , tailleTableau);
    }
    
    void ordonnerTableau(int tableau[] , int tailleTableau)
    {
        int tableauCopie[5];
        int a;
        int b;
        int z;
    
        printf("Tableau avant la modif :\n");
    
        //Boucle pour copier les donnees du tableau dans la copie (+ quelques messages en plus) :
    
        for (z = 0 ; z < tailleTableau ; z++)
        {
            tableauCopie[z] = tableau[z];
            printf("%d\n",tableau[z]);
        }
    
        //Premiere boucle sur la copie du tableau :
    
        for (a = 0 ; a < tailleTableau ; a++)
        {
            //Deuxieme boucle sur le tableau en lui meme :
    
            for (b = 0 ; b < tailleTableau ; b++)
            {
                if(tableau[b] < tableauCopie[a] && a != 0 && tableau[b] > tableauCopie[a-1])
                {
                    tableauCopie[a] = tableau[b];
                }
    
                else if(a == 0 && tableau[b] < tableauCopie[a])
                {
                    tableauCopie[a] = tableau[b];
                }
            }
        }
    
        printf("\nTableau apres la modif :\n");
    
        for (z = 0 ; z < tailleTableau ; z++)
        {
            tableau[z] = tableauCopie[z];
            printf("%d\n",tableau[z]);
        }
    }

    Le problème est que le résultat donné est 0 1 2 0 1 au lieu de 0 1 2 3 4 et je n'arrive pas à comprendre pourquoi ;-;... J'espère que ce n'est pas trop tordu.

    Merci d'avance pour vos réponses et à ceux qui comprendront ce que j'ai fait ^^.

    -
    Edité par Kiki San 26 novembre 2017 à 15:35:51

    • Partager sur Facebook
    • Partager sur Twitter
    ~(‾▿‾~)
      6 février 2017 à 0:10:59

      Bonjour

      Ton code n'est malheureusement pas fonctionnel, car le tableauCopie a une taille fixée à 5.
      Il existe de nombreux algorithmes de tri de tableau, et il n'est pas utile d'avoir un tableau de copie.

      Je remarque également qu'aucun affichage du résultat n'est fait après l'appel de la fonction de tri, c'est bizarre.
      En revanche il reste du code d'affichage dans la fonction elle-même, ce qui était sans doute utile pour débuguer, mais n'a rien à faire dans un exercice fini.

      -
      Edité par Marc Mongenet 6 février 2017 à 0:11:19

      • Partager sur Facebook
      • Partager sur Twitter
        7 février 2017 à 17:32:53

        Je suis dans le même cas que l'auteur. Bloqué à l'exo 5 depuis cet aprem et à un moment j'ai aussi pensé à la copie ahah.

        Bref, bon courage à toi!

        • Partager sur Facebook
        • Partager sur Twitter
          19 février 2017 à 19:41:03

          Merci pour vos réponse et bon courage à toi aussi ^^
          • Partager sur Facebook
          • Partager sur Twitter
          ~(‾▿‾~)
            21 février 2017 à 23:18:41

            Ca fonctionne pour moi comme cela:

            void ordonnerTableau(int tableau[], int tailleTableau)
            {
                int i=0, temp=0, j=1;
                for (i=0;i<tailleTableau-1;i++)
                {
                    for (j=i+1;j<tailleTableau;j++)
                    {
                        if (tableau[j]<tableau[i])
                        {
                            temp=tableau[i];
                            tableau[i]=tableau[j];
                            tableau[j]=temp;
                        }
                    }
                }
            }

            -
            Edité par herbettec 21 février 2017 à 23:24:14

            • Partager sur Facebook
            • Partager sur Twitter

            Tableaux - Exercice 5

            × 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