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 :

[Algorithme] genre factorielle ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut [Algorithme] genre factorielle ?
    Bonjour,

    Je ne sais pas trop comment expliquer mon problème, commençons par le début : J'utilise Visual Studio Express 2008, je crois que la librairie pour utiliser la classe Exponential n'est pas disponible ?!
    Bref, je me suis fait la méthode qui à l'air de bien fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            private int exponentielle(int nombre)
            {
                int locale = 1;
     
                while (nombre > 1)
                {
                    locale *= nombre--;
                }
                return locale;
            }
    Bon, mais après, voila mon vrai problème. Je cherche un algorithme me permettant de calculer toute les combinaisons possible pour croisé des lettres, je m'explique :
    J'ai toujours 3 séries de lettres, les 3 série comportent toujours le même nombre de lettre (peuvent même être identique et donc y avoir des doublons) et j'aimerai par exemple à partir de :
    liste 1 : A B C
    liste 2 : D E F
    liste 3 : G H I

    Obtenir le tableau de résultat suivant :
    ABC
    ABF
    ABI
    AEC
    AEF
    AEI
    AHC
    AHF
    AHI
    DBC
    [...]
    GHC
    GHF
    GHI

    sachant que les lettres A D G seront toujours en position 1
    les lettres B E H seront toujours en position 2
    et C F I toujours en position 3

    Je me suis dit que pour un tel calcul j'aurai besoin de la fonction exponentielle, mais j'arrive pas à obtenir le bon resultat ?!

    Si je suis asser clair, est-ce qu'on peut m'aider sur la manière de procéder ?

    Merci

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    La méthode statique de la classe Math réalise cette fonction: Math.Exp

    Visual Studio ne limite pas l'utilisation des classes du framework. Le framework lui est gratuit et donc tu peux même utiliser les classes du framework sans avoir besoin de développer avec Visual Studio.

    Visual Studio est seulement l'environnement qui convient le mieux pour développer des applications mais il ne limite en aucun cas l'utilisation des classes du framework. La différence des versions tient aux fonctionnalités qu'il proposent.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Citation Envoyé par harz62 Voir le message
    La méthode statique de la classe Math réalise cette fonction: Math.Exp

    Visual Studio ne limite pas l'utilisation des classes du framework. Le framework lui est gratuit et donc tu peux même utiliser les classes du framework sans avoir besoin de développer avec Visual Studio.

    Visual Studio est seulement l'environnement qui convient le mieux pour développer des applications mais il ne limite en aucun cas l'utilisation des classes du framework. La différence des versions tient aux fonctionnalités qu'il proposent.
    En fait Math.exp n'est pas la fonction exponentielle ?!
    par exemple :
    3! = 6
    4! = 24
    5! = 120
    etc...
    Mais ce n'est pas du tout mon problème, j'ai fait la fonction exponentielle qui fonctionne très bien.

    Maintenant je ne sais même pas si je pars dans le bon sens, ce que j'ai c'est des lettres (dans des listes) et j'aimerai obtenir toute les combinaisons possible, voici un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                List<string> lstSyllabes1 = new List<string>();
                List<string> lstSyllabes2 = new List<string>();
                List<string> lstSyllabes3 = new List<string>();
    [...]
                combinaisons = getCombinaisons(lstSyllabes1, lstSyllabes2, lstSyllabes3);
    Ma fonction accepte 3 arguments qui sont des List<string>.
    typiquement, une List<string> peut resembler à ça :
    L
    ou
    L + R
    ou
    M + R + T
    ou
    CH + J + P + V
    ou
    etc...

    et j'aimerai qu'elle retourne une List<List<string>> où chaque List<string> serait une combinaison des 3 arguments (voir exemple précédant)

    Mon problème ce situe au niveau de l'algorithme permettant justement de trouver toutes ces combinaisons (le nombre de string dans la liste peut varié, mais les 3 listes en comporte le même nombre)

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est pas ça la fonction Exponentielle... ce dont tu parles ça s'appelle "factorielle", c'est le produit de tous les entiers de 1 à N. Je ne crois pas que la fonction existe nativement, mais le code que tu mets dans ton premier post me semble correct (à part le nom de la fonction...)

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Citation Envoyé par tomlev Voir le message
    C'est pas ça la fonction Exponentielle... ce dont tu parles ça s'appelle "factorielle", c'est le produit de tous les entiers de 1 à N. Je ne crois pas que la fonction existe nativement, mais le code que tu mets dans ton premier post me semble correct (à part le nom de la fonction...)
    Heu... oui, c'est factorielle... un gros lapsus !!!

    Je penses que j'aurai autant de résultat que x! où x est le nombre de string. Mais j'arrive toujours pas à créer correctement l'algo me permettant de mettre la main sur tous ces résulats.

    Pour rendre le code plus souple, j'ai changé la signature de ma methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            private List<List<string>> getCombinaisons(List<List<string>> lstSyllabes)

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 77
    Par défaut
    Bonjour,
    si j'ai bien compris, tu cherches l'algorithme permettant de construire toute les combinaisons possibles de tes 3 listes. Tu peux y parvenir simplement en faisant des boucles imbriquées :

    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
     
     
                int i, j, k, n, nbelem;
                List<string> liste1 = new List<string>();
                List<string> liste2 = new List<string>();
                List<string> liste3 = new List<string>();
                List<List<string>> res = new List<List<string>>();
     
                liste1.Add("A"); liste1.Add("B"); liste1.Add("C");
                liste2.Add("A"); liste2.Add("B"); liste2.Add("C");
                liste3.Add("A"); liste3.Add("B"); liste3.Add("C");
     
                nbelem = liste1.Count;
                n = 0;
     
                for (i = 0; i < nbelem; i++)
                    for (j = 0; j < nbelem; j++)
                        for (k = 0; k < nbelem; k++)
                        {
                            res.Add(new List<string>());
                            res[n].Add(liste1[i]);
                            res[n].Add(liste2[j]);
                            res[n].Add(liste3[k]);
                            n++;
                        }
     
                string s="";
                for (i = 0; i < res.Count; i++)
                    s += res[i][0] + res[i][1] + res[i][2] + "\n";
    La liste résultat est res, affichée dans la chaine s pour l'exemple.

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

Discussions similaires

  1. Algorithmes pour calculer la factorielle
    Par TrexXx dans le forum Mathématiques
    Réponses: 14
    Dernier message: 22/01/2009, 23h32
  2. Algorithme factorielle recursive
    Par racoboss dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 12/03/2008, 14h38
  3. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 14h25
  4. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 12h09
  5. Algorithme génétique
    Par Stephane.P_(dis Postef) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/03/2002, 17h14

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