Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice: Les tableaux

une solution pour le dernier

    10 juillet 2006 à 15:10:41

    Voilà je suis tout fier de vous présenter ma fonction permettant de mettre en orde les valeurs d'un tableau donné :-° . Dernier exercice du tutorial c/c++ sur les tableaux. Voici le code :

    void ordonnerTableau(long tableau[], long tailleTableau)
    {


    printf("\n\nClassement du tableau :\n\n");
    int  j=0,i=0,petit =0,grand=0,ordre =1;

    do {

    ordre = 1;

    for (i = 0;  i< tailleTableau-1 ; i++)
    {

    printf("Operation actuelle, ordre = %ld //",ordre ); // affichage de l'ordre
                                                        // après chaque contrôle
    for (j = 0;  j< tailleTableau ; j++)
    {
       printf(" %ld ",tableau[j] );

        }
    printf("\n");

    if (tableau[i]> tableau[i+1])  // il suffit d'inverser le > par < et l'ordre
                                    // de classement est inversé

    {
                                    // si la case suivant est plus grande
                                  // les chiffres ne sont pas en ordre
    ordre = 0;                      // on les inverse donc
    petit = tableau[i+1];
    grand = tableau[i];
    tableau[i]= petit;
    tableau[i+1] = grand;

    }

    }


    } while (ordre != 1);   // ont recontrôle et inverse les chiffre en boucle
                            // jusqu'à ce que l'ordre soit rétabli :-)
    printf("\nTableau en ordre\n\n ");

    }


    J'aimerais savoir si il existe une manière plus simple de le faire? :p
    • Partager sur Facebook
    • Partager sur Twitter
      10 juillet 2006 à 15:51:16

      Tu peux initialiser ordre à 0 et un while suffit à la place du do while.

      Sinon je trouve la méthode tout à fait judicieuse, je n'y aurais pas pensé ; j'aurais créé un tableau temporaire que j'aurais rempli au fur et à mesure dans l'ordre pour ensuite le recopier dans le tableau initial...
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2006 à 16:08:25

        C'est ordre, que je n'ai pas compris, à quoi elle sert?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 juillet 2006 à 16:23:11

          Voici ma solution par recursivite :
          void ordonnerTableau1(long tableau[], int tailleTableau)
          {
              int i,tmp;
              for(i=0;i<tailleTableau;i++)
              {
                  if(tableau[i]>tableau[i+1])
                  {
                  tmp=tableau[i];
                  tableau[i]=tableau[i+1];
                  tableau[i+1]=tmp;
                  }   
              }
              tailleTableau--;
              if(tailleTableau!=0)
               ordonnerTableau1(tableau,tailleTableau);
          }
          • Partager sur Facebook
          • Partager sur Twitter
            11 juillet 2006 à 6:48:32

            Citation : oussama1305

            C'est ordre, que je n'ai pas compris, à quoi elle sert?




            Le programme traite un chiffre après l'autre de gauche à droite, mais quand il arrive à droite l'ordre n'est pas forcement bon, car il ne bouge les nombre que d'une place à la fois. Et chaque fois qu'il à du bouger un nombre c'est que le chiffre n'est pas en ordre, donc on refait une boucle complete de cotrôle, voir de modification des chiffres.Il y aura toujours une boucle pour rien, pour avoir "ordre" a 1 durant laquel le programme ne fera que recontrôler tous les chifrres.
            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2006 à 12:49:11

              Davidbrcz, au lieu de faire ça:
              tailleTableau--;
              if(tailleTableau!=0)
                  ordonnerTableau1(tableau,tailleTableau);

              Fait une seconde boucle...
              void ordreDecroissant(long tableau[], long tailleTableau)
              {
                  long i = 0, j = 0, tmp = 0;

                  for (i = 0 ; i < tailleTableau ; i++)
                  {
                      for (j = 0 ; j < (tailleTableau-1) ; j++)
                      {
                          if (tableau[j] < tableau[j+1])
                          {
                              tmp = tableau[j];
                              tableau[j] = tableau[j+1];
                              tableau[j+1] = tmp;
                          }
                      }
                  }
              }
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                11 juillet 2006 à 20:05:33

                Ouais , mais j'aime bien la recursivite.
                Ca evite de se casser la tete avce plein de boucle...
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2006 à 10:26:52

                  J'ai repris la solution de davidbrcz sauf que j'ai changé la fin. Au résultat, ma fonction donne :
                  void ordonnerTableau(long tableau[], long tailleTableau)
                  {
                       long i, temp;
                       for (i = 0; i < tailleTableau; i++)
                       {
                           if (tableau[i] > tableau[i+1])
                           {
                               temp = tableau[i];
                               tableau[i] = tableau[i+1];
                               tableau[i+1] = temp;
                           }
                           printf ("%ld\n", tableau[i]);
                       }         
                  }

                  Ma méthode est-elle bonne?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 juillet 2006 à 17:11:31

                    hmmm ton code est pas mal, il faut juste que tu verifies si ton tableau[i + 1] existe ;)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    exercice: Les tableaux

                    × 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