IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Multiset: afficher un caractere entre chaque element


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut Multiset: afficher un caractere entre chaque element
    avec la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    void Product::Multiply_Number(double n){
         multiset <double>::iterator vit;
         numerator.insert(n);
    }
     
    void Product::Print(){
        multiset <double>::iterator vit;
        double n;
        n = numerator.size();
     
          for (vit = numerator.begin(); vit != numerator.end(); vit++){
             if ( n == 1){
                cout << *vit << " / 1\n";
             }
             if ( n > 1 ) {       //1
                 cout << *vit;  //2
                 cout << " * "; //3
             }
          }
    }
    les lignes 1,2 et 3 impriment par example

    6 * 12 * 34 *
    alors que je voudrais savoir si il y a un moyen de n'imprimer que :

    6 * 12 * 34
    sans le dernier asterisk ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 142
    Par défaut
    Salut,

    Un truc dans le genre, je vois pas mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          for (vit = numerator.begin(); vit != numerator.end(); vit++){
             if (vit != numerator.begin()){
                ecrire_asterisque();
             }
             ecrire_nombre();
          }

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut
    merci ca marche.

    j'aimerais comprendre que font ces lignes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vit = numerator.begin(); // ?
    vit != numerator.end(); // ?
    vit != numerator.begin(); // ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 142
    Par défaut
    begin() renvoie un itérateur (type qui se manipule comme un pointeur) vers le premier élément du conteneur (ici un multiset). end() en renvoie un vers le dernier élément + 1.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vit = numerator.begin(); // on initialise notre itérateur
    vit++ // on le fait avancer à la case suivante
    vit != numerator.end(); // si vit == numerator.end(), ça signifie qu'on est juste hors du conteneur (d'où le +1), donc on sort de la boucle
    vit != numerator.begin(); // cette condition est fausse si notre itérateur pointe vers le premier élément du tableau, du coup on ne met pas d'astérisque dans ce cas
    Puisque tu sembles être un débutant, j'ajouterais que si tu utilises un multiset en espérant trouver un tableau à redimensionnement dynamique, un vector serait plus approprié (c'est le conteneur à utiliser par défaut si on ne sait pas quoi choisir).

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    FAQ: Choix de conteneurs.
    Merci à Laurent Gomila.

  6. #6
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut
    Merci ca a plus sens.

    Autre question, si je possède deux boucles, une pour chaque multiset; et que je veux comparer les elements a chaque fois qu'un element s'ajoute a une des multisets.

    Faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if ( *vit == *rit ){cout<<"les valeurs sont les memes";}
    me semble logique, mais reste l'emplacement. Car les boucles sont separees comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void Product::Print(){
        multiset <double>::iterator vit;
        multiset <double>::iterator rit;
        double n, m;
        n = numerator.size();
        m = denominator.size();
        if ( n == 0 ){
           cout << "1";
           }
        /* Premiere boucle */
        for (vit = numerator.begin(); vit != numerator.end(); vit++)
        {
           if (  n == 1 ) cout << *vit;
           if (  n > 1  )
           {
              if ( vit != numerator.begin()) cout << " * ";
              cout << *vit;
           }
        } cout << " / ";
     
        if (m == 0) cout << "1";
     
        /* Deuxieme boucle */
        for (rit = denominator.begin(); rit != denominator.end(); rit++)
        {
            if ( m == 1) cout << *rit;
            if ( m > 1 )
            {
                if (rit != denominator.begin()) cout << " / ";
                cout << *rit;
            }
     
        } cout <<"\n";
    }
    Mon code est en fait une sorte de calculatrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > PRINT // les deux sets sont vides
      1 / 1
    > MULTIPLY 2
    > PRINT
       2 /  1
    > DIVIDE 2
       2 / 2   (resultat que je veux rendre 1 / 1)

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    perso, je serait partie sur un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void Product::Print()
    {
     
        if (numerator.size() > 1)
        {    
           /*affiche les N-1 éléments*/
            std::copy
                  (
                  numerator.begin(), 
                  numerator.end()-1,
                  std::ostream_iterator<int>(std::cout, " * ")
                  );
           /*affiche le dernier éléments*/
           std::cout<<*numerator.rbegin()<<std::endl 
       }
       else if(numerator.size() ==1)
       {
            std::cout<<numerator.begin()<<" /1" <<std::endl 
       }
     
    }
    http://r0d.developpez.com/articles/algos-stl/#LII-B-1

Discussions similaires

  1. Mettre un espace tout les 2 caractères
    Par debutantasp dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 24/07/2019, 08h43
  2. [String] Renvoyer caractères entre 2 espaces
    Par babylone7 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/07/2005, 14h03
  3. Réponses: 9
    Dernier message: 31/05/2005, 14h34
  4. [Relations] afficher les relations entre 2 tables
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 14/01/2004, 17h07
  5. Afficher le caractere '%' dans Flash
    Par jeffbobo dans le forum Flash
    Réponses: 6
    Dernier message: 11/12/2003, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo