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

Algorithmes et structures de données Discussion :

algo pour afficher des combinaisons de chiffres


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut algo pour afficher des combinaisons de chiffres
    Bonsoir,

    je viens faire appel à vous parce que je reprends des "vieux" exo (qui datent d'il y a 3semaines) et je suis bloqué sur un exo (que je n'avais déjà pas réussit à faire).

    L'énoncé est celui la:
    Écrire une fonction qui affiche toutes les différentes combinaisons
    de n chiffre(s), dans l'ordre croissant. Si n=2 on a :
    "01, 02, 03, ..., 09, 12, ..., 79, 89"

    Elle devra être prototypée de la façon suivante :

    int my_aff_combn(int n);
    j'avais le "même" exercice à faire avec 3 chiffres ("012, 013, 014, 015, 016, 017, 018, 019, 023, ..., 789") et je le faisais avec ce code:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    int     my_aff_comb_secondary(char i, char j, char k)
    {
      if (i == 55 && j == 56 && k == 57)
        {
          my_putchar(i);
          my_putchar(j);
          my_putchar(k);
        }
      else
        {
          my_putchar(i);
          my_putchar(j);
          my_putchar(k);
          my_putchar(',');
          my_putchar(' ');
        }
    }
     
    int     my_aff_comb()
    {
      char  i;
      char  j;
      char  k;
     
      i = 48;
      while (i <= 55)
        {
          j = 49;
          while (j <= 56)
            {
              k = 50;
              while (k <= 57)
                {
                  if (i != j && j != k && k != i && i < j && j < k)
                    {
                      my_aff_comb_secondary(i, j, k);
                    }
                  k++;
                }
                }
              j++;
            }
          i++;
        }
    }
    Je ne vois pas du tout quel algorithme utiliser ou comment adapter mon exercice précédent pour y arriver.
    Je ne demande pas un code mais un indice de réflexion

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Une idée, bête et méchante : avoir un algo qui va générer toutes les permutations puis, dans une deuxième étape enlever toutes celles qui ne sont pas dans un ordre croissant. (ça peut se combiner)

    Pour ce qui est de la génération des permutations, ça n'est pas une chose nouvelle, une petite recherche sur le forum pourra t'aider.

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par PRomu@ld Voir le message
    Pour ce qui est de la génération des permutations, ça n'est pas une chose nouvelle, une petite recherche sur le forum pourra t'aider.
    J'ai posté un code dans "contribuez" qui fait ce que tu veux, meme si ce n'est pas son objectif premier... sauras-tu le retrouver ?

    Elle devra être prototypée de la façon suivante :
    int my_aff_combn(int n);
    c'est quoi la spec pour la valeur de retour ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    c'est quoi la spec pour la valeur de retour ?
    si j'ai bien comprit ta question, la fonction renvoie un entier
    si non qu'entends tu par la spec?

    http://www.developpez.net/forums/sho...d.php?t=429282

    je suppose que tu parlais de ce post


    Citation Envoyé par PRomu@ld Voir le message
    Une idée, bête et méchante : avoir un algo qui va générer toutes les permutations puis, dans une deuxième étape enlever toutes celles qui ne sont pas dans un ordre croissant. (ça peut se combiner)

    Pour ce qui est de la génération des permutations, ça n'est pas une chose nouvelle, une petite recherche sur le forum pourra t'aider.
    qu'entends tu par permutation?
    parce que ce qui me fait bloquer c'est la gestion des n chiffres.
    Pour 2, 3, 4 chiffres je saurais le faire en déclarant 2, 3 ou 4 variables que j'incrémenterais l'une après l'autre

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Deux pistes:
    * utiliser la récursivité pour imbriquer N boucles
    * faire une fonction auxilliaire: combinaison_suivante et l'appeler tant qu'il y a des combinaisons suivantes.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    si j'ai bien comprit ta question, la fonction renvoie un entier
    si non qu'entends tu par la spec?
    je voulais savoir quelle etait la valeur de cet entier que la fonction doit renvoyer.

    je suppose que tu parlais de ce post
    yes.

    parce que ce qui me fait bloquer c'est la gestion des n chiffres.
    Pour 2, 3, 4 chiffres je saurais le faire en déclarant 2, 3 ou 4 variables que j'incrémenterais l'une après l'autre
    Et oui... c'est pas possible de changer dynamiquement le nombre de boucles imbriquées. Comme le dit Jean-Marc.Bourguet, dans des cas comme ca tu as le choix entre la recursion ou l'iterateur. Dans les deux cas tu auras besoin de créer une fonction auxiliaire pour faire le travail.

    NB: Le code dans mon post utilise la recursion, ce qui est sans doute le plus simple dans le cas présent (profondeur de recursion=nombre de chiffres)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    je voulais savoir quelle etait la valeur de cet entier que la fonction doit renvoyer.
    dans les deux autres exercises, on devait afficher une série de 3 chiffres (012) et une série de 4 chiffre (00 01). Je ne vois pas ce que tu entends par la valeur de cette entier
    excuses moi je débute en langage C et j'ai pas mal de lacune encore :$

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    dans les deux autres exercises, on devait afficher une série de 3 chiffres (012) et une série de 4 chiffre (00 01). Je ne vois pas ce que tu entends par la valeur de cette entier
    excuses moi je débute en langage C et j'ai pas mal de lacune encore :$
    Vue que la fonction est censée renvoyer un "int" je voulais savoir quel etait ce "int". Ca pourrait etre le nombre de combinaison, ou autre chose...

    C'est mon coté "integriste" de la programmation par contrat. Quand on definit une signature c'est parcequ'on en a besoin. Mais c'est pas grave. Oublie ma question.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Autre possibilité, tu prends un tableau Comb de dimension n (n étant le nombre d'éléments des combinaisons, que tu initialises avec 0, 1 .. n-1, puis tu utilises un index ind de la façon suivante (on suppose que les indices du tableau varie entre 1 et n
    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
    ind = n
     
    tant que ind > 0 faire
       editer la combinaison
       Comb(ind) <- Comb(ind) + 1
     
       % on teste si la valeur du tableau pointée par l'index est 10
       tant que si Comb(ind) > 9 alors
          ind <- ind - 1
     
          % on décrémente l'index tant que les valeurs du tableau sont consécutives
          tant que ind > 0 et Comb(ind) = Comb(ind + 1) - 1
             ind = ind - 1
          fin tant que
     
          % si on n'a pas terminé (index à 0) on incrémente
          % les valeurs du tableau en remontant l'index
          si ind > 0 alors
             Com(ind) <- Comb(ind) + 1
             faire
                Comb(ind+1) <- Comb(ind) + 1
                ind <- ind + 1
             tant que ind < n et Comb(ind) < 10
          fin si
        fin tant que
    fin
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. [delphi 7] composant pour afficher des pdf ?
    Par PhD13 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/03/2006, 17h40
  2. Réponses: 2
    Dernier message: 19/12/2005, 20h11
  3. Pb pour afficher des composants dans la palette
    Par Captain_JS dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/07/2005, 18h35
  4. Commande pour afficher des chiffres apres la virgule
    Par manar dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/09/2004, 18h28
  5. [débutant] filtrer un fichier pour afficher des infos
    Par Valichou dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 21/04/2004, 11h44

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