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

Langage C++ Discussion :

programme realisant les combinaisons(math)


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Points : 24
    Points
    24
    Par défaut programme realisant les combinaisons(math)
    salut a tous j’ai un grave problème et il concerne les mathématicien:

    récemment je me suis lancée dans un projet j’ai décider de créer une application qui fait des combinaison ( l’utilisateur entre un nombre de boule et entre ensuite les combinaison de combien de boule il aimerait faire avec ces boules et le programme lui donne le nombre exacte de possibilité et les affiche

    par exemple: si l’utilisateur entre qu'il a 3 boules et qu'il aimerait faire des combinaisons de 2 les programme lui affiche qu'il existe 3 possibilité et les affiche
    (ces possibilite sont (1et2; 1et3;2et3))

    jai deja fais la fonction qui permet de donner le nombre de combinaison exacte(en math on vous a appris que le nombre de possibilité dune combinaison de adans b est egale a (a!/(b*(a-b)!))vois cette fonction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    unsigned long combi(int unsigned b,int unsigned a)
    {
        long result=a-b+1;
        long cal=1;
        for(int i=a-b+1; i<=a; i++)
            cal*=i;
        return cal/b;
    }
    je suis bloquer au moment de sortir les combinaisons possible et de les afficher

    je sais pas trop facile mais j’ai vraiment besoin d’aide merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Le résultat est une liste de combinaisons donc une liste cela peut être une collection STL std::vector, std::deque, std::list, ...
    Ou 1 tableau ou autre, mais sûrement moins pratique que les classes STL

    Par contre 1 combinaison, c'est également 1 liste. Mais utiliser 1 tableau pour 1 combinaison de 2, 3 ... X éléments (X, un petit nombre), c'est 1 peu excessif
    Parce que si 1 combinaison ce n'est que 2 éléments (parce que tu ne précises pas si tu en auras plus ), tu fais 1 classe one_combinaison avec 2 nombres (qui pourront être remplacés par 1 tableau).

    Je pense qu'il faudrait utiliser les templates et les spécialisations (1 spécialisation sur le nombre d'éléments qui sera 1 paramètre template) pour créer X classes one_combinaison (2 ... X, X un petit nombre) avec 2 ... X nombres, et ensuite au delà avoir 1 tableau (et gérer les cas 0 et 1).

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Bonjour,

    Le nombre de combinaisons n'est pas (a!/(b*(a-b)!) , c'est plutôt a!/(b!*(a-b)!).
    Et donc ta fonction ne retourne pas le nombre de combinaisons.
    Pour avoir toutes les combinaisons possibles, il existe une fonction dans le standard C++, c'est std::next_permutation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <algorithm>
    #include <string>
     
    	std::string v = std::string( nbB, 'a' ) + std::string( nbA-nbB, 'b' );
    	do {
    		std::cout << v << '\n';                            // afficher
    	} while ( !std::next_permutation( v.begin(), v.end() ) );  // permutation suivante tant que possible

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par foetus Voir le message
    Le résultat est une liste de combinaisons donc une liste cela peut être une collection STL std::vector, std::deque, std::list, ...
    Ou 1 tableau ou autre, mais sûrement moins pratique que les classes STL

    Par contre 1 combinaison, c'est également 1 liste. Mais utiliser 1 tableau pour 1 combinaison de 2, 3 ... X éléments (X, un petit nombre), c'est 1 peu excessif
    Parce que si 1 combinaison ce n'est que 2 éléments (parce que tu ne précises pas si tu en auras plus ), tu fais 1 classe one_combinaison avec 2 nombres (qui pourront être remplacés par 1 tableau).

    Je pense qu'il faudrait utiliser les templates et les spécialisations (1 spécialisation sur le nombre d'éléments qui sera 1 paramètre templates) pour créer X classes one_combinaison (2 ... X, X un petit nombre) avec 2 ... X nombres, et ensuite au delà avoir 1 tableau (et gérer les cas 0 et 1).
    c’est l’utilisateur qui entre le nombre de boule et combinaison (il faut probablement utiliser des vector)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Bonjour,

    Le nombre de combinaisons n'est pas (a!/(b*(a-b)!) , c'est plutôt a!/(b!*(a-b)!).
    Et donc ta fonction ne retourne pas le nombre de combinaisons.
    Pour avoir toutes les combinaisons possibles, il existe une fonction dans le standard C++, c'est std::next_permutation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <algorithm>
    #include <string>
     
    	std::string v = std::string( nbB, 'a' ) + std::string( nbA-nbB, 'b' );
    	do {
    		std::cout << v << '\n';                            // afficher
    	} while ( !std::next_permutation( v.begin(), v.end() ) );  // permutation suivante tant que possible
    MERCI je vais essayer ca

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/04/2015, 14h00
  2. Programme détectant les erreurs de mémoire
    Par gids01 dans le forum MFC
    Réponses: 2
    Dernier message: 07/12/2005, 11h57
  3. [Thread]Lancer mon programme toutes les 60 secondes?
    Par danje dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 24/11/2005, 22h55
  4. Lister toutes les combinaisons...
    Par monstroplante dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/11/2005, 22h10
  5. Réponses: 2
    Dernier message: 29/07/2005, 11h14

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