Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exo tableaux] Le 5è, mon code foire...

Sujet résolu
    15 juin 2006 à 21:35:12

    Salut salut,

    J'ai voulu reprendre les exos que j'avais fait il y a un certains temps, et à ma grande surprise, en C, le code, qui repond à cet exercice...

    Citation : M@téo21

    Exercice 5 (plus difficile) : créer 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} !

    Prototype :

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


    ...ne fonctionne pas !
    void ordonnerTableau(long tableau[], long tailleTableau)
    {
        long i = 0;
        long j = 0;

        for(j = 0 ; j < tailleTableau ; j++)
        {
            // Exemple  avec j = 0
            i = 0;
            do // Tant que la valeur de i est inferieur à tailleTableau, on boucle
            {
                if(tableau[j] > tableau[i]) /* Si la valeur de tableau[0] est superieur à tableau[i] (qui varie avec l'incrementation) on... */
                {
                    tableau[j] = tableau[i]; // ...donne la valeur de tableau[i] à tableau[0]
                }
            }while(i < tailleTableau); // On arrete la boucle qd l'incrementation de i ne sert plus à rien
        }
    }


    Elle devrait marcher, non?
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2006 à 22:07:45

      Personellement, je n'ai pas envie de répondre car il y a déjà 3 ou 4 sujets à ce propos. Cherche un peu, tu devrais trouver ton bonheur
      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2006 à 22:08:57

        Ouep je me doute que je soit pas le premier, mais (et ca poourra vs parraitre con), j'ai pas trouvé la fonction recherce xD

        Et le truc, c'est que je prefere utiliser mon code, trouvé par moi-même, car je vbois pas l'utilité d'utilisé un code tt fait sans l'avoir écrit soit meme...
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2006 à 22:30:14

          j'ai résolu ce problème il n'y as pas longtemps,
          première chose qui ne va pas dans ton code c'est qua la boucle while est infini: puisque tu n'incrémente pas i la condition est toujours vrai ^^
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2006 à 22:32:27

            Oui lol dsl j'ai pas peis tout mon code :

            void ordonnerTableau(long tableau[], long tailleTableau)
            {
                long i = 0;
                long j = 0;

                for(j = 0 ; j < tailleTableau ; j++)
                {
                    for(i = 0 ; i < tailleTableau ; i++)
                    {
                        if(tableau[i] < tableau[j])
                        {
                            tableau[j] = tableau[i];
                        }
                    }
                }
            }


            Ca c'est ma derniere version du code... ca devrait marcher, mais y a un truc qui coince...

            Edit : lol je suis con, si je fais ca, chacune des valeurs de tableau[j] seront egales... faut que à chaque fois, j'exclu la valeur précédente de j xD
            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2006 à 22:41:25

              Les tri de tableaux n'ont rien d'anodin ! C'est même une part de l'algo. ou il y a (eu ?) le plus de recherche.

              Attention ; ce qui suit n'est pas en language C... Mais peut très aisément être réutilisé.
              Un très bon cours d'algo !!! Université Bordeaux 1 Licence Semestre 2 Initiation à l'algorithmique
              Et sa section sur le tri, itératif : Tris non récursifs(I) et récurcif : Tris récursifs(II) !

              Avec ça, il y a clairement de quoi faire ! :)

              HS : Pour ceux qui veulent aller plus loin, regardez aussi les listes chainées ! ;)
              • Partager sur Facebook
              • Partager sur Twitter
                15 juin 2006 à 22:45:05

                T'y etais presque mais t'as oublié un detail. :) Désolé je te donne le code direct mais si tu comprends pas n'hesite à demander sur ce topic des explications. ;)


                void ordonnerTableau(long tableau[], long tailleTableau)
                {
                      long n = 0, i = 0, mem = 0;

                      for(n = 0;n < tailleTableau; n++)
                      {
                           for(i = 0;i < tailleTableau;i++)
                           {
                                  if(tableau[n] < tableau[i])
                                  {
                                        mem = tableau [i];
                                        tableau[i] = tableau[n];
                                        tableau[n] = mem;
                                  }
                           }
                       }
                }

                Voili voila ^^ J'attends de tes nouvelles.
                • Partager sur Facebook
                • Partager sur Twitter
                  15 juin 2006 à 22:54:17

                  Oue c'est ca, mais je comprends pas le :

                                          mem = tableau [i];
                                          tableau[n] = mem;


                  Edit : Merci au fait ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juin 2006 à 23:22:41

                    bah enffet si tu enlève sa tu aura :

                    tab[j] = tab[i] mais tab[i] = tab[i] or se que tu veut c'est inverser et donc avoir
                    tab[j] = tab[i] et tab[i] = tab[j] et pour sa tu passe par une valeur intermédiaire.

                    par exemple a = 10 b = 5 temp = 0.

                    temp = a;(a = 10 b = 5 temp = 10)
                    a = b;(a = 5 b = 5 temp = 10)
                    b = temp;( a = 5 b = 10) et c'est le résultat attendu :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juin 2006 à 23:33:19

                      mem en fait c'est le nom de variable pourri que j'ai trouvé pour memoire :lol: .
                      Non plus serieusement cette variable permet d'enregistrer la valeur de ton tableau[i] et c'est important car normalement (si tu as compris mon code) tu veux que ton tableau[i] soit egal a ton tableau[n] et que ton tableau[n] soit egal à ton tableau[i].
                      Or si tu l'ecris directement comme ceci :

                      tableau[i] = tableau[n];
                      tableau[n] = tableau[i];

                      Tu t'aperceverras vite que ca coince en effet imaginons que tableau[i] = 54 et que tableau[n] = 20 ca verifie la condition donc l'ordi fera dans l'ordre tableau[i] = 20 et tableau[n] = 20 o_O .
                      Ben oui ton ordi est pas fou :lol: tu as ecrit tableau[n] = tableau[i] or à ce moment tableau[i] n'est plus egal a 54 mais a 20 . C'est pour cela qu'il faut conserver la valeur du tableau[i] dans une variable.
                      Ainsi tu as :

                      if(tableau[n] < tableau[i])
                      {
                      mem = tableau [i];
                      tableau[i] = tableau[n];
                      tableau[n] = mem;
                      }

                      Ton tableau[n] prend bien à la fin la valeur de tableau[i] donc 54 !
                      Ouf !! :D J'espere que tu as compris sinon n'hesites pas à reposer des questions ;) .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 juin 2006 à 18:49:10

                        Mdr, oui je dois zêrtre très con ^^

                        Bon berf, j'ai compris mon erreur et je recommencerai plus, m'sieur!

                        Et encore merci à tous ceux qui m'ont aidé! ;)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Exo tableaux] Le 5è, mon code foire...

                        × 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