Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour tri par permutation

Sujet résolu
    15 septembre 2007 à 16:50:11

    voila ce code fonctionne parfaitement copiez collez le dans votre editeur pour essayer:
    1. //on veut trier un tableau dans l'ordre croissant
    2. #include <iostream>
    3. #include <ctime>
    4. #include <cstdlib>
    5. using namespace std;
    6. void alea(int min, int max, int *tableau)
    7. {
    8.   bool ok;                          // Drapeau qui définit si le nombre n'est
    9.                                     // pas déjà dans le tableau
    10.   int  i, j;                        // Compteurs de boucle for()
    11.   /*------------------------------------------------//
    12.   //  Génération du tableau d'indice aléatoirement  //
    13.   //------------------------------------------------//
    14.   // On verifie que la borne supérieure (max) et    //
    15.   // bien supérieure à la borne inférieure. Dans le //
    16.   // cas inverse, on inverse max et min. On choisit //
    17.   // ensuite un nombre aléatoirement entre min et   //
    18.   // max. Et on le mets dans le tableau.            //
    19.   // Si ce nombre n'est pas déjà dans le tableau,   //
    20.   // on continu jusqu'à ce que tous les indices     //
    21.   // soit entrés dans le tableau                    //
    22.   //------------------------------------------------*/
    23.   if (max >= min){
    24.     i = 0;
    25.     while(i <= (max - min)){
    26.       tableau[i] = (int) (min + ((float) rand() / RAND_MAX * (max - min + 1)));
    27.       ok = true;
    28.       if (i > 0){
    29.         for (j = 0; j < i; j++){
    30.           if (tableau[i] == tableau[j]){
    31.             ok = false;
    32.             break;
    33.           }
    34.         }
    35.       }
    36.       if(ok){
    37.         i++;
    38.       }
    39.     }
    40.   }else{
    41.     alea(max, min, tableau);
    42.   }
    43. }
    44.  //******FIN******************************************************************
    45. void trie(int tab[6])
    46. {
    47.  int taille=6;
    48.      bool permute;
    49. int temp=0;
    50. int min=0;
    51.   do
    52.      {
    53.       permute=false;
    54.        //tant qu'il y a des permutations a faire
    55.          for(long tour=0;tour<taille;tour++)
    56.                     {
    57.         //cette première boucle nous permettra de récupérer le contenu d'une première case
    58.                             //on teste avec le numéro de la case suivante      
    59.                                //ainsi ici on devrait avoir ceci 12 > 6 donc permutation
    60.                                 //12 > 10 permutation...
    61.                              if(tab[tour]>tab[tour+1])
    62.                              {
    63.                              //si besoin permutation
    64.                                 temp=tab[tour+1];
    65.                                  tab[tour+1]=tab[tour];
    66.                                  tab[tour]=temp;
    67.                                  permute=true;
    68.                              }
    69.                      }
    70.      }   while(permute==true);
    71. }
    72. int main(int argc, char *argv[])
    73. {
    74.  srand(time(NULL));
    75.  int size=6;
    76.  int fin=size-1;
    77.    int min = 1;
    78.   int max = 10;
    79.     int tabou[size];
    80.     alea(min, max, tabou);
    81.     cout<<"avant le trie"<<endl;
    82.         for(long a=0;a<size;a++)
    83.     {
    84.              if(a<fin)
    85.              {
    86.             // tabou[a]=aleatoire();        
    87.              cout<<tabou[a]<<"<";
    88.              }
    89.                    if(a==fin)
    90.              {
    91.          //tabou[a]=aleatoire();    
    92.              cout<<tabou[a];
    93.              }
    94.      }
    95.         cout<<endl;
    96.     trie(tabou);
    97.  cout<<"apres le trie"<<endl;
    98.     for(long a=0;a<size;a++)
    99.     {
    100.              if(a<fin)
    101.              {
    102.              cout<<tabou[a]<<"<";
    103.              }
    104.                    if(a==fin)
    105.              {
    106.              cout<<tabou[a];
    107.              }
    108.      }
    109.   cout<<endl;
    110.     system("PAUSE");
    111.     return EXIT_SUCCESS;
    112. }
    • Partager sur Facebook
    • Partager sur Twitter
      15 septembre 2007 à 21:49:17

      chez moi ca marche. Je vois pas ou est le problème. Il te fais quoi comme probleme ?
      • Partager sur Facebook
      • Partager sur Twitter
        15 septembre 2007 à 22:37:58

        Pour ta deuxième boucle for commence à 2 ???
        En toute logique elle devrait plutôt commencer à "tour+1".
        • Partager sur Facebook
        • Partager sur Twitter
          16 septembre 2007 à 8:58:07

          ben en fait mon probleme est que le tri ne se fait pas correctement. En fait j'obtient 9 >6>10>12 et moi je voudrais 6>9>10>12 et lorsque je met tour=1 au lieu de tour=2 ca ne m'affiche carrement plus rien.
          Pourrriez vous me montrer un exemple de code qui marche svp.
          • Partager sur Facebook
          • Partager sur Twitter

          Problème pour tri par permutation

          × 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