Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau

exercice du cours

Sujet résolu
    15 janvier 2007 à 19:41:29

    Salut,
    Je suis à la fin du cours sur les tableau de M@teo(eh ouè, j'avance ;) ), à l'exercice 5 pour être préci(pour être encore plus précis, j'ai terminier les exos 1-2-3-4 avec succès)...

    Petit rappel de l'énnoncé:

    Citation : Cours sur les tableau

    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} !
    Cet exercice est un peu plus difficile que les autres, mais est tout à fait réalisable. Ca va vous occuper un petit moment :p

    Prototype :

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





    Voila, je suis là, mé je ne vois pas comment faire...
    Je ne vous demande pas le code, juste que vous me dites quoi utiliser...


    ...parceque j'ai beau me triturer les méninges dans tout les sens depuis hier après midi, là, devant cet énoncé, je plante, je vois pas quoi utiliser.


    Je rappel que je ne veut pas de code source!!!
    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2007 à 20:00:10

      Salut !

      Alors pour résoudre cet exo, il faut que tu prennes le premier nombre et tu le compare au suivant. Si ce premier nombre est plus grand, il faut les inverser. Sinon, tu laisses comme c'est et tu passes au suivant.
      Tu effectues celà sur tout ton tableau un certain nombre de fois que tu devra derterminer (un peu de logique ;) ).
      Voilà, je t'ai donné l'idée pricipale. Tu devrais pouvoir terminer cet exo maintenant !
      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2007 à 20:07:05

        Merci, je vais voir ce que je peu en faire...
        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2007 à 20:14:34

          Trois possibilités :

          Tri par sélection
          Crées un second vecteur résultat, détéermine l'élément maximal du tableau de départ et ranges le en derniere position du vecteur d'arrivée
          Puis effectue un calcul répétitif ( n-1 fois) qui se décompose en
          1) trouve le plus ptetit élément du tableau initial
          2) le ranger
          3) remplacer l'élément min cherché avec le maximum dans le tableau initial

          Assez chiant...

          Tri par selection et permutation
          Pareil sauf qu'on crée pas de deuxieme tableau. Je peux t'envoyer l'algorithme apres mes partiels.

          Tri à bulle (celui là j'aime :p )

          Tu fais des passes successives sur le tableau en regardant par paire (tab[i] et tab[i+1]) et tu les echanges si tab[i]>tab[i+1]



          Apres tu te débrouilles pour trouver des conditions de sortie etc...
          J'ai les algos des deux premiers mais cette semaine j'ai pas le temps de les taper


          Voila
          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2007 à 20:33:20

            J'avais déjà commencer le "trie à bulles" quand j'ai lu ton post, car je suis venu en me posant une question: Je suis censé savoir comment permuter 2 valeurs d'1 tableau?
            -si oui, ne me dites pas comment, mais juste où je suis censé l'avoir apris...
            -si non, est-ce que ça coule de source? Ou est-ce qu'il daut se creuser les méninges?(les miennes sont encore en condition...)

            En attendant, j'essaye une méthode que je vien de trouver:
            1. Une variable (ValeurDeTransition) prend la valeur de Tableau[i]
            2. Tableau[i]prend la valeur de Tableau[i + 1]
            3. Tableau[i + 1]prend la valeur de ValeurDeTransition.

            En gardant à l'espris que Tableau[i] > Tableau[i + 1]...



            C'est bon, j'ai réussi, voici mon code, si vous voyez des petits défauts, n'hésité pas...

            OperationsTableaux.c(je fait grâce du .h et du main.c)
            void OrdonnerTableau(double Tableau[], long TailleTableau)
            {
                long i = 0, Verification = 0;
                double ValeurDeTransition = 0;

                for(Verification  = 0; Verification < TailleTableau; Verification++)/*On recommence l'opération autant de fois qu'il y a de cases
                (pour que la dernière valeur est le tps de devenir la première...)*/

                {
                    for(i = 0; i < (TailleTableau - 1); i++)
                    {
                        if(Tableau[i] > Tableau[i + 1])
                        {
                            ValeurDeTransition = Tableau[i];
                            Tableau[i] = Tableau[i + 1];
                            Tableau[i + 1] = ValeurDeTransition;
                        }

                        else if(Tableau[i] < Tableau[i + 1])
                        {
                            //Ne rien changer
                        }

                        else
                        {
                            //Ne rien changer
                        }
                    }


                }

            }
            • Partager sur Facebook
            • Partager sur Twitter
              15 janvier 2007 à 23:06:46

              Bah ça me parais bien. Et pour échanger deux donné, c'est bien comme ça.

              Par contre, tu n'es pas obliger de mettre un else après un if. Tu peux donc les retirer.
              bien joué !
              • Partager sur Facebook
              • Partager sur Twitter
                22 janvier 2007 à 14:14:54

                Bonjour,

                Merci pour ce post, j'ai pu aussi vérifier ma réponse.
                Je post quand même mon code ^^ .
                Non pas pour faire le malin, mais juste par soucy d'apporter une réponse détaillée pour les autres zéro comme moi.

                void ordonnerTableau(long tableau[], long tailleTableau)
                  {
                   
                    /* Je crée 2 valeurs différentes pour la boucle 'for'
                    sinon la variable "i" de la seconde boucle "for" s'additionnera à la première. */

                    long y=0, i=0;
                   
                    //Les variables qui suivent sont crées pour éviter d'effacer les valeurs dans le tableau lors de la demande d'inversion (voir plus bas).
                    long valeur1=0, valeur2=0;


                       for (y=0 ; y < tailleTableau ; y++) // On dit de recommencer autant de fois qu'il y a de case.

                        {

                        for (i=0 ; i < tailleTableau ; i++) // C'est ici que la permutation entres les valeurs s'opère.
                           {

                            if ( tableau[i] > tableau[i+1] )
                             {

                              //On attribue les valeurs contenues dans le tableau, sinon on les écrasserait et donc on perd une d'elles.
                              valeur1 = tableau[i];
                              valeur2 = tableau[i+1];

                              //Ici tous s'explique, on peut facilement les "switcher",
                sans ça on écrase une des valeurs.
                              tableau[i] = valeur2;
                              tableau[i+1]= valeur1;

                             }

                            }
                        }
                  }


                Pour vraiment bien comprendre, il faut suivre cette logique :

                Vérifier les valeurs les unes à côté des autres pour les intervertir si elles sont pas dans un orde croissant.(seconde boucle 'for').
                J'ai un tableau de 4 cases => on fait l'operation générale 4X. (première boucle 'for').


                exemple, je vous invite à faire le test sur une feuille :
                4213
                2413
                2143
                2134
                -------
                2134 = 1X

                • Partager sur Facebook
                • Partager sur Twitter

                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