Partage
  • Partager sur Facebook
  • Partager sur Twitter

classement en ordre croissant

fonctionne mais pas si il y a des zeros..

Sujet résolu
    18 février 2006 à 19:50:28

    Bon..apres avoir réfléchit quelques instants sur le problemes poser dans le tuto de mateo sur les tableau ou il nous demandais de crée une fonction permetant de classer celle-ci en ordre croissant j'ai penser à ce code :
    void classage(long tableau[], long x)
    {
            long i;
            long z;
            for(i = 0 ; i < x ; i++)
            {
                    if(tableau[i] < tableau [i - 1])
                    {
                            z = tableau[i - 1];
                            tableau[i - 1] = tableau [i];
                            tableau[i] = z;
                    }

            }
    }


    tout fonctionne bien...sauf si il y a des zéros..en fait je crois qu'ils ne sonts décaler que d'une seule case dans le tableau..je comprend pourquoi il réagit de cette facon mais j,arrive pas a mettre au point un code pour régler ce probleme...peut-être appliquer une boucle sur la boucle de remise à zero?i oui avec quel conditions?...je suis perdu!! :euh:
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2006 à 20:07:48

      Alors !
      Déjà, tu dois avoir une erreur de segmentation avec çà : tableau [i - 1] car tu sors du tableau.

      Ton tris s'appelle le tri à bulle !
      Et il faut faire plusieurs boucle pour être sur du resultat !

      Voici ce que je te propose :
      void classage(long tableau[], long x)
      {
              long i;
              long z;
              bool change;
              do{
                change = false
                for(i = 0 ; i < x-1 ; i++)
                {
                      if(tableau[i] > tableau [i + 1])
                      {
                              z = tableau[i];
                              tableau[i] = tableau [i + 1];
                              tableau[i + 1] = z;
                              change = true;
                      }

                }
               while(change);
      }


      Et là, plus de problème !
      Car tant que le tableau n'est pas classé (Il y a encore des changements)
      On effectue le trie !
      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2006 à 23:36:29

        Simplement pour la connaissance des Zér0s : dans la bibliothèque algorithm de la STL il exist la fonction sort()


        #include<algorithm>
        #include<iostream>

        int main()
        {
            const int iTAILLE = 10;
            int iTab[ iTAILLE ] = { 2, 9, 3, 1, 6, 4, 5, 8, 7 };
            std::sort( iTab, iTab + iTAILLE );
            for( int i = 0; i < iTAILLE; i++ )
            {
                std::cout << iTab[ i ] << std::endl;
            }
            return 0;
        }


        À noter que sort() utilise des itérateurs (Notion avancée) mais tout ce qu'il faut savoir c'est qu'il faut donner à sort() le pointeur du début du tableau (ou de n'importe quel conteneur ; ici c'est iTab) et la fin (ici iTab + iTAILLE )
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2006 à 23:53:37

          C'est du C++ tout ça. Moi aussi je pourrais l'expliquer en php, mais ça n'aiderais pas.
          • Partager sur Facebook
          • Partager sur Twitter
            19 février 2006 à 0:58:21

            Dragh'nalith > Oui, mais le C et C++ sont moins différent que le C et PHP

            Tu aurais pu le faire de manière à faire moins peur ;)


            #include<algorithm>
            //#include <iostream>
            #include <stdio.h>

            using namespace std;

            int main()
            {
                const int iTAILLE = 10;
                int iTab[ iTAILLE ] = { 2, 9, 3, 1, 6, 4, 5, 8, 7 };

                sort( iTab, iTab + iTAILLE );

                for( int i = 0; i < iTAILLE; i++ )
                {
                   //cout << iTab[ i ] << endl;
                   printf("%d\n", iTab[i]);
                }
                return 0;
            }
            • Partager sur Facebook
            • Partager sur Twitter
              19 février 2006 à 1:01:51

              je n'ai pas l'habitude d'utiliser printf() ;) désolé...
              • Partager sur Facebook
              • Partager sur Twitter
                19 février 2006 à 1:03:16

                Moi non plus, mais pour nos amis zer0, il faut faire des efforts ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  19 février 2006 à 2:06:38

                  Sinon,
                  Voila un script pour trier les tableaux sans utiliser algorythm.

                  #include <stdlib.h>
                  #include <stdio.h>


                  //taille du tableau à trier
                  #define TAILLE 10


                  int main()

                  {
                       

                        //voici le tableau qui doit être trié

                        int tableau[TAILLE] = {1, 5, 7, 3, 6, -9, 1, 3, 9, 4};

                        //variable temporaire

                        int nombreTemp = 0;



                        //Affichage du tableau non trié

                        printf("Tableau non trie : \n");

                        int x=0;

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

                        printf("%ld ",tableau[x]);



                        //tri du tableau en 2 boucles

                        int y=0 , z=0;
                          for ( y=0; z<TAILLE-1; ++y)

                           for ( z=0; z<TAILLE-1; ++z)

                              if (tableau[z+1] < tableau[z])

                              {

                                 nombreTemp = tableau[z+1];

                                 tableau[z+1] = tableau[z];

                                 tableau[z] = nombreTemp;

                              }



                        //affichage du tableau trié

                        printf("\nTableau trie : \n");


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

                        printf("%ld ",tableau[x]);



                        system("PAUSE");
                        return 0;

                  }


                  J'ai pas testé le code parce que je ne suis pas chez moi donc je m'excuse s'il comporte des erreurs. Je les corrigerai des que je pourrai.

                  Remarque: Certaines variables ne sont pas forcement necessaires car on aurait pu en reutiliser des anciennes ( celles utilisées pour les boucles ) afin de gagner de la memoire mais ca ne change rien au programme et la memoire gagnée est infime.

                  +!NiCo!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 février 2006 à 3:39:19

                    merci à tous! avec tout ca j,ai mis le doight sur le bobo :p
                    • Partager sur Facebook
                    • Partager sur Twitter

                    classement en ordre croissant

                    × 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