Partage
  • Partager sur Facebook
  • Partager sur Twitter

pb tab

    12 juillet 2007 à 15:47:17


    Bonjour à tous,

    Je cherche à assossier entre eux des éléments de deux tableaux différents.
    tab 1 est un tableau comportant n1 élément, tab 2 en comporte n2.

    tab1[i]=x
    tab2[j]=y
    Si on veut que x et y soit associés alors il faut que cette condition soit respectée:

    x<=y<=x+K K est une constante


    for (int i =0;i<n1;i++)
    {
      for (int j=0;j<n2;j++)
      {
        if (tab1[i]<=tab2[j]<=tab1[i]+k)
        {
        cout<<"paire: "<<tab1[i]<<"  "<<tab2[j]<<endl;
        }
      }
    }
     


    Existe t-il quelquechose de plus subtile ?
    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      12 juillet 2007 à 15:55:07

      Tout d'abord, la forme truc1<=truc2<=truc3 que tu mets dans ton if ne va pas te faire ce que tu attends, méfie toi de ça !
      Toujours par 2 les éléments (car en l'occurrence tu vas voir si le résultat de la premiere inégalité (un bool) est plus petit que l'autre.
      A l'avenir fait bien :

      truc1<=truc2 && truc2<=truc3

      bref :
      Etant dans le forum C++, prend donc une map : un conteneur plus adapté a ce que tu veux faire : c'est un conteneur associatif puissant.

      jette donc un oeil a cet exemple qui associe, a chaque mois, son nombre de jours, tu peux faire une map<int,int> bien sur.

      http://perso.numericable.fr/~fvirtman/info/tuto/D_08_map.cpp
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        12 juillet 2007 à 16:08:08

        Merci, mais comment je peux demander à map d'associer sous certaines conditions?
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2007 à 16:10:27

          la map est un dictionnaire : tu associes 2 éléments sans conditions.

          Si tu veux associer en fonction d'une condition ou une autre, c'est au moment ou tu la remplis que tu testes.

          Sinon, si ce n'est pas ça, donne moi un exemple concret de ce que tu veux faire.
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            12 juillet 2007 à 16:38:20

            D'après ce que j'ai compris, tu as 2 "listes" indépendantes d'éléments sous forme de tableau. ET tu cherches à afficher à l'écran les pairs qui correspondent à une certaine condition.

            Je ne crois pas que l'utilisation d'une map soit utile ici.

            On sait que pour un X donné, on cherche tous les Y compris entre X et X+K.

            Je ferais cela comme ça:

            1) J'utiliserais des std::vector<int> pour contenir tout ça.
            2) Je trierais mes 2 tableaux (par exemple avec le sort de <algorithm>)
            3) Je parcourrais le tableau des X.
            4) Pour chaque X, je chercherais le premier Y qui est <=X et le dernier qui est <=X+K (avec la fonction find)
            5) J'afficherais les paires comme étant l'ensemble des cases comprises entre les 2 "rangs" de mon tableau trouvé au 4)
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              12 juillet 2007 à 17:28:16

              Citation : Pas de titre

              1) J'utiliserais des std::vector<int> pour contenir tout ça.
              2) Je trierais mes 2 tableaux (par exemple avec le sort de <algorithm>)



              Je débute...
              Quel est l'interet de passer le tout dans un conteneur vector et qu'entends tu par trier mes tableaux?
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2007 à 18:11:57

                Je réponds au point 2 en premier:

                Parce que une fois que c'est trier, il n'y a plus besoin de tout tester pour chaque élément, il suffit de trouver le plus petit X qui satisfait ta condition et le plus grand. Ensuite tous les éléments entrent vérifieront ta proposition sans avoir besoin de les tester à chaque fois.

                Pour le point 1:

                Parce que il existe une fonction dans la bibliothèque <algorithm> qui permet de trier les std::vector (en particulier)

                Et quand je dis trier les tableaux, je pensais mettre les éléments qu'ils contiennent dans l'ordre croissant.

                Sinon, si tu veux pas implémenter une solution aussi complexe, je te propose la modification suivante:

                for (int i =0;i<n1;i++)
                {
                  for (int j=i;j<n2;j++)   //on commence au i-ème élément pour eviter que les paires soient affichees 2 fois
                  {
                    if (tab1[i]<=tab2[j] && tab[2]<=tab1[i]+k)
                    {
                    cout<<"paire: "<<tab1[i]<<"  "<<tab2[j]<<endl;
                    }
                  }
                }
                • Partager sur Facebook
                • Partager sur Twitter
                Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.

                pb tab

                × 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