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 :

Enumeration possibilité ascii


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 99
    Par défaut Enumeration possibilité ascii
    Bonjour,

    Je rencontre un pb en programmation :

    mon but est de remplir un tableau avec les codes ascii des lettres a,b,c ... et mon but est de connaitre toutes les possibilités qui peuvent en ressortir :

    aaa
    aab
    aac
    aba
    abb
    abc
    aca
    acb
    acc
    baa
    bab
    bac
    bba
    bbb
    bbc
    bca
    bcb
    bcc
    caa
    cab
    cac
    cba
    cbb
    cbc
    cca
    ccb
    ccc

    voilà le résultat que je dois obtenir ... mon pb est que je dois faire ça de a -> z sur 8 caractères ...

    merci beaucoup de votre aide

    Ju

  2. #2
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    - un tableau de 8 caractère
    - en ASCII
    - tout lettre minuscule

    1° solution 8 boucle imbriquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char tab[8];
    char letr1, letr2, letr3, letr4, letr5, letr6, letr7, letr8;
    for(letr1='a'; letr1<='z'; letr1++)
    {
         tab[0]=tetr1;
         for(letr2='a'; letr2<='z'; letr2++)
         {
              tab[1]=letr2;
                   //ETC jusqu'a la lettre final
         }
    }
    Et tu affiche apres la ligne
    tab[7]=letr8;

    A chaque affichage aura une autre possibilité.

    Ca te fait tout de même pas mal de possibilité :
    26^8 + 26^7 + 26^6 + 26^5 + 26^4 + 26^3 + 26^2 + 26

    Ca fait beaucoup :s

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 99
    Par défaut
    il n'y a vraiment pas d'autre solution ??? un peu moins fastideuse

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Probablement c'est pour cela que j'ai écrit :
    1° solution 8 boucle imbriquées :
    Tu peux aussi passer par des fonctions récursives :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //premier appel tu as
    //fonction(tableau,0,8,"abcdefghijklmnopqrstuvwxyz");
    void fonction (char *tab, int initpos, int nb_case, const char * charSet)
    {
         int cCpt;
         for(cCpt=0;cCpt<strlen(charSet);cCpt++)
         {
              tab[initpos]=charSet[cCpt];
              if(nb_case<0)   fonction(tab,initpos+1,nb_case-1,charSet);
              if(nb_case==0) printf("%s\n",tab);
         }
    }

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par juliensmarties Voir le message
    voilà le résultat que je dois obtenir ... mon pb est que je dois faire ça de a -> z sur 8 caractères ...
    Tu es certain qu'on te demande ça ? As-tu calculé la taille requise pour stocker les données ou au moins et le temps de traitement, ne serait-ce que pour les afficher ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 99
    Par défaut
    Merci ça fonctionne :p

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par juliensmarties Voir le message
    Merci ça fonctionne :p
    Hum...

    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
     
    #include <stdio.h>
    #include <string.h>
     
    void fonction (char *tab, int initpos, int nb_case, const char *charSet)
    {
       int i;
       for (i = 0; charSet[i] != 0; i++)
       {
          tab[initpos] = charSet[i];
     
          if (nb_case > 0)
          {
             fonction (tab, initpos + 1, nb_case - 1, charSet);
          }
          else
          {
             tab[initpos] = 0;
             printf ("'%s'\n", tab);
          }
       }
    }
     
    int main (void)
    {
       char tableau[8 + 1];
     
       fonction (tableau, 0, 8, "abcdefghijklmnopqrstuvwxyz");
       return 0;
    }
    fonctionne, mais il faut le laisser tourner plusieurs heures avant de voir zzzzzzzz ...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 99
    Par défaut
    j'ai changé quelque petit truc mais sinon oui ça fonctionne

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void fonction (char *tab, int initpos, int nb_case, const char * charSet) ;
     
    int main()
    {
    	char tab[2];
     
        fonction(tab,0,7,"abcdefghijklmnopqrstuvwxyz") ;
     
        return 0;
    }
     
    void fonction (char *tab, int initpos, int nb_case, const char * charSet)
    {
         int cCpt;
         for(cCpt=0;cCpt<strlen(charSet);cCpt++)
         {
              tab[initpos]=charSet[cCpt];
              if(nb_case>0) fonction(tab,initpos+1,nb_case-1,charSet);
              if(nb_case==0) printf("%s\n",tab);
         }
    }

  9. #9
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par juliensmarties
    j'ai changé quelque petit truc mais sinon oui ça fonctionne
    Je ne pense pas que tes modifications améliorent quelque chose, pire elles rendent le code bugué

    • appeler strlen à chaque tour de boucle c'est moche
    • où est passé la ligne mettant le '\0' indispensable en fin de chaîne ?
    • si nb_case>0 inutile de tester ensuite si elle est ==0 il fallait laisser le if else


    Voici quelques modifications possibles :
    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
    void fonction (char *tab, int initpos, int nb_case, const char *charSet)
    {
       int i;
       for (i = 0; charSet[i] != 0; i++)
       {
          if (nb_case > 0)
          {
             tab[initpos] = charSet[i];
             fonction (tab, initpos + 1, nb_case - 1, charSet);
          }
          else
          {
             tab[initpos] = 0;
             printf ("'%s'\n", tab);
             return;
          }
       }
    }

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

Discussions similaires

  1. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 01h27
  2. Les possibilité que C++ offre par rapport à Pascal Objet
    Par Riko dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 01/02/2003, 21h38
  3. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12
  4. exporter la structure d'une base Sybase en ascii
    Par Jean-Cyp dans le forum Sybase
    Réponses: 5
    Dernier message: 05/11/2002, 16h15
  5. quels sont les possibilitées???
    Par lolo-d dans le forum OpenGL
    Réponses: 11
    Dernier message: 16/05/2002, 00h41

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