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 :

condition sur toutes les valeurs d'un tableau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut condition sur toutes les valeurs d'un tableau
    Bonjour a tous,

    Voila mon souci je dispose d'un tableau dynamique et je voudrais vérifier une condition simultanément sur toutes les cases de ce tableau.

    Voila le probleme simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::vector<int> tableau;
        tableau.push_back(6);
        tableau.push_back(5);
        .....
     
    while (tableau>4)
    {
        instructions;
    }
    la condition dans le while doit vérifier toutes les cases d'un coup. Mais je ne sais pas comment faire. Une idée?

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Une solution est d'utiliser l'algo find_if.

    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
    bool isInfOrEqual4(int v) { return v <= 4; }
     
    void MonTest()
    {
    	std::vector<int> tableau;
    		tableau.push_back(6);
    		tableau.push_back(5);
    		.....
     
    	while (std::find_if<std::vector<int>::iterator>(tableau.begin(),tableau.end(),isInfOrEqual4)
    				   == tableau.end())
    	{
    		//instructions;
    	}
    }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    il suffit de poser le problème proprement.
    Tester tout d'un coup non c'est strictement impossible.
    Par contre tester l'un après l'autre c'est certainement ce qui te faut.
    Dans ta boucle il suffit de parcourir chaque élément du tableau.
    itérateur ou index à toi de choisir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (tableau::const_iterator it = tableau.begin(); it != tableau.end() && *it < 4; ++it)
    {
      instructions;
    }
    for (unsigned int i = 0, t = tableau.size(); i < t && tableau[i] < 4; ++i)
    {
      instructions;
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    @BlueMonkey

    Y a-t-il une bibliothèque a charger (#include) pour le find_if?

    Et je vois ce que tu veux dire mais pourquoi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::find_if ......  !=tableau.end()
    Je ne suis pas sur de comprendre l'intérêt de cette ligne : la condition est que la somme des booléens "isInfOrEqual4" soit différente de "tableau.end()" ? Ça ne devrait pas être égal?

    @Bousk


    Si je comprends bien cette ligne elle ne correspond pas a ce que je cherche. Ta première solution consiste a faire une boucle sur l'itérateur "it" du début du tableau à la fin du tableau ET tant que le contenu de la case du tableau pointée par "it" ne dépasse pas 4. Mais cela signifie que si tableau[1]=2 alors les instructions seront exécutées même si tableau[2]=10. Et je cherche à n'effectuer ces opérations que si TOUTES les valeurs du tableau sont <4.

    Et ces deux lignes sont équivalentes non?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re.

    Y a-t-il une bibliothèque a charger (#include) pour le find_if?
    Yep #include <algorithm>.

    pourquoi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::find_if ......  !=tableau.end()
    ,
    Ça ne devrait pas être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::find_if ......  ==tableau.end()
    ?
    Si effectivement

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Si tous les éléments d'un tableau doivent etre soumis à une condition particulière, ne serait il pas beaucoup plus simple de n'ajouter un élément au tableau que si... cette condition est respectée

    Voir, s'il y a quelque chose à faire si tous les éléments du tableau respectent la condition et quelque chose d'autre à faire si ce n'est pas le cas, gérer une (ou plusieurs) variable(s) qui permettent de savoir si la condition est respectée ou non.

    En effet, si tu dois passer tous les éléments de ton tableau en revue à chaque fois que tu dois décider (ou non) de faire quelque chose (je me demande d'ailleurs quel algorithme pourrait le justifier ), et que tu dois faire cette vérification de manière régulière, tu va avoir des performances catastrophiques, car tu vas finir par "passer ton temps" à faire cette vérification.

    Dans ce ca, je verrais, par exemple, bien le fait de manipuler un compteur qui s'occuperait de garder en mémoire le nombre d'éléments du tableau qui ne respectent pas la condition.

    Il serait initialisé à 0 au tout début (lorsque le tableau est encore vide), incrémenté à chaque fois qu'un élément qui ne respecte pas la condition est ajouté et décrémenté à chaque fois que l'on retire un élément qui ne respecte pas la condition.

    Lorsque tu devra vérifier si tes éléments respectent la condition (ou non), il te suffira de vérifier la valeur de ce compteur: si elle est à 0, tous les éléments la respectent, sinon, c'est qu'il y a le nombre d'éléments indiqué par le compteur qui ne la respectent pas
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    @BlueMonkey

    Alors effectivement ça marche merci beaucoup de ton aide. Mais le point de Koala01 est valide tout de même.

    @Koala01
    Oui effectivement je n'avais pas vu les choses comme ça. Et l'idée du compteur est aussi plus simple a faire. J'achète!!!

    Puisque tu le demande, le but de ce programme est une simulation routière. Et la condition est que si le débit de voiture sur les avenues principale dépasse toutes une certaine valeur on utilise un système de régulation différent

    Merci à tous pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. IN avec AND sur toutes les valeurs
    Par dighan dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/10/2009, 15h35
  2. Condition sur toutes les valeurs d'un vecteur
    Par Newenda dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/06/2009, 15h50
  3. [MySQL] Requête pour récupérer toutes les valeurs d'un tableau
    Par djoumusic dans le forum PHP & Base de données
    Réponses: 40
    Dernier message: 24/08/2008, 22h11
  4. Réponses: 7
    Dernier message: 04/08/2008, 23h31
  5. initialiser toutes les valeurs d'un tableau
    Par Biosox dans le forum C++
    Réponses: 1
    Dernier message: 09/11/2007, 10h41

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