Partage
  • Partager sur Facebook
  • Partager sur Twitter

trie d'un tableau

Sujet résolu
    23 avril 2006 à 15:42:11

    voila une fonction qui devrai prendre un tableau de 10 cases (appelé nontrier1)et rendre un tableau avec les chiffres trier(jeudecartes1). le probleme c'est que tout les chiffres de la fin , dans jeudecartes1 sont tous égale à 99.
    Secret (cliquez pour afficher)
    help me please!




    for (boucle = 0; boucle < 10; boucle++) {       /*ici, nontrier1 est un tableau qui contient des chiffres dans le désordre.
            jeudecartes1 est le tableau qui doit recevoir les chiffres dans le bonne ordre */

            min = 99;
            for (roule = 0; roule < 10; roule++) {
                    if (nontrier1[roule] < min && nontrier1[roule] != 0) {
                            min = nontrier1[roule];
                    }
            }
            jeudecartes1[boucle] = min;
            for (roule = 0; roule < 10; roule++) {
                    if (nontrier1[roule] == jeudecartes1[boucle]) {
                            nontrier1[roule] = 0;
                    }
            }
    }
    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2006 à 16:37:59

      Ce que tu veux, c'est ranger ton tableau du plus petit au plus grand si j'ai bien compris ?

      J'arrive pas bien à comprendre ton code, j'ai pas l'habitude de cette indentation ... mais je peux te donner une fonction qui fait ça et te l'expliquer :

      Edit


      Citation : moi

      Au fait, quand j'ai fais cet exercice du cours de m@téo, au début je m'y suis pris un peu comme toi. Je voulais prendr la plus petite valeur, la mettre dans la 1ere case d'un autre tableau, prendre la 2eme plus petite, la mettre dans la 2eme case ... et ainsi de suite.

      C'est ce qu'un homme aurait fait, mais c'est assez difficile à faire (voir impossible) en C sans utiliser l'allocation dynamique.

      Alors, j'ai cherché 30 secondes et j'ai pensé comme un pc, "bêtement", alors je me suis dis:

      Je compare les 2 premieres cases, et je les échange si elle sont pas bien rangées. Je compare la 2eme et la 3eme, je fais pareil.

      Et je parcours la chaîne autant de fois que nécessaire jusqu'à ce que ce soit rangé.

      Avec la rapidité de l'ordinateur, on n'a même pas le temps de calculer qqch que c'est déjà fini. Et ça s'est avéré plus faicle à coder :)



      /* Range tableau[] de taille place du plus petit au plus grand */
      void ordonner( long tableau[], long taille )
      {

          long i, temp, fini = 0;
          /* i pour faire ma boucle for
           * temp pour stocker un nombre temporairement
           * fini pour vérifier si le classement est terminé, et sortir de la boucle */


          while( !fini )// Tant qu'on a pas fini de ranger
          {

              fini = 1;//Je dis qu'on a fini de ranger

              /* On parcours le tableau ... remarque que j'ai mis tant que i < taille -1, c'est normal car je compare les cases 2 par 2, je m'arrete donc à l'avant derniere */
              for( i = 0; i < taille-1; i++ )
              {

                  if( tableau[i] > tableau[i+1] )//Si la case actuelle est plus grande que la suivante
                  {

                      //On échange leurs valeures, et on dis qu'on a pas fini
                      temp = tableau[i];
                      tableau[i] = tableau[i+1];
                      tableau[i+1] = temp;
                      fini = 0;

                  }

              }

          }

      }


      Voilà j'espers que ça va t'aider !

      Comme ça, si il change plus de nombre, fini reste à 1, et la boucle se termine !
      • Partager sur Facebook
      • Partager sur Twitter
        23 avril 2006 à 16:40:36

        Faites attention à la politèsse : Bonjour, Merci, Au revoir, ... et à l'orthographe.
        • Partager sur Facebook
        • Partager sur Twitter
          23 avril 2006 à 17:07:48

          oui merci beaucoup, a la fois pour la solution, a la fois pour l'idee de penser comme un ordinateur.
          • Partager sur Facebook
          • Partager sur Twitter
            23 avril 2006 à 17:58:47

            c'est bien mais en fait c'est une methode tres longue pour les grands tableaux (imagine que t'es dans un tableau de 100,000 cases).
            plus rapide serait de créer un tableau cible, ou tu mets la plus petite valeure, puis celle au-dessus, etc ...
            comme la premiere personne koi ...
            Bonne chance
            • Partager sur Facebook
            • Partager sur Twitter
              23 avril 2006 à 18:52:29

              Niak > Je suis entièrement d'accord avec toi, mais avec cette solution, on a 2 choix :

              --> Soit on créé un tableau de X cases, pour s'en servir comme tableau temporaire, mais alors là le programme serait limité à des tableaux de X cases.

              --> Soit on alloue manuellement la mémoire (et c'est la meilleure chose), mais comme j'avai fais l'exercice sans connaître les allocations dynamiques (car elles sont vues après dans le cours de M@téo), alors je l'ai pas fait ;)

              Enfin, dans son cas, c'est un tableau de 20 10 cases, alors c'est très rapide, et le principal c'est qu'il ait compris la façon de faire !

              Bonne chance à toi en tout cas grigreg !
              • Partager sur Facebook
              • Partager sur Twitter
                23 avril 2006 à 21:25:30

                je suis totalement d'accord avec moi-même et avec toi ! Mais tu verras que l'allocation dynamique n'est VRAIMENT pas compliquée !!!
                De plus on peut tres bien faire un tableau de 1000 cases et n'en utiliser que la moitiée, voire une seule, en créant une variable "longueure".
                Mais c'est vrai que ça prendrais UN PEU plus de temps pour la création du tableau !

                Quand t'auras appris à faire l'allocatio,n dynamique, tu pourras toujours essayer de faire une bonne méthode de création de tableau avec allocation et tout et tout.
                En fait tout ceci est strictement inutile, étant donné que l'on utilise pas de tableaux de 100,000 cases... Mais c'est toujours sympa devoire commenty faire !
                Bonne chance pour la suite du cours !

                NIAK
                </span>
                • Partager sur Facebook
                • Partager sur Twitter
                  23 avril 2006 à 23:48:01

                  Ouais, ca fait quelques temps que j'avai fais cet exercice, je sais utiliser l'allocation dynamique maintenant, et ça fait plaisir ;) Mais je parlai dans le contexte dans lequel j'avai fait cet exercies, enfin il a eu sé réponse, c'est ce qui compte !

                  Ciao !
                  • Partager sur Facebook
                  • Partager sur Twitter

                  trie d'un tableau

                  × 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