begin process at 2008 07 05 07:26:31
1 205 055 membres
41 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : generateur de mot [ Linux / Autre ] (tezca_system)

generateur de mot le 05/03/2007 04:39:40

tezca_system
Bonjour,
Cela fait 3 jours que je travail sur un générateur de mot. C'est de niveau débutant.
Concretement je souhaiterai que le programme genere tous les mots qui contiennent 12 caracteres maximum contenant uniquement des caracteres alphanumeriques.
il commencerait donc à "a" et finirait à "999999999999".
J'ai crée un tableu de 36 caracteres qui contient tous les caracteres à utiliser pour generer le mot:
char ref[]="abcdefghijklmnopqrstuvwxyz0123456789";
char mot[12]; <-------- le mot generé et affiché sur l'ecran.
Concretement mon pb c qu'au dessus de 2 caracteres cela m'affiche n'importe koi.
Avez vous juste une idée de l'algorythme qu'il faut que j'utilise.
Il est pas evident de faire comprendre au programme que lorsque le caractere à la position n = "9", il faut passer à "a" et incrementer la valeur du caractere à la position n+1 en fonction de sa position sur le tableau ref (definit si dessus), et pire encore le caractere à la position n+1 = "9" aussi le passer à "a" et incrementer la valeur du caractere à la position n+2 en fonction de sa position sur le tableau ref.

Si vous avez des idées se serait vraiment gentil de votre part.
merci par avance.

P.S: voici dans l'odre chronologique quelques exemples de ce que le programme devrait m'afficher comme je l'ai imaginé:
a
b
...
9
aa
...
99
aaa
baa
caa
9aa
aba
.....
89a
99a
aab
etc etc juqu'a 999999999999

Re : generateur de mot le 05/03/2007 12:27:51

vinc1008881
const char *car= "\0a.....z0.....9";

Ajoute à ces caractères alphanumériques le caractère nul, il emputera naturellement ta chaine de caractères...le défaut de mon algorithme c'est qu'il prend plus de temps à générer des chaines de 12 caractères "tronquées" qui si on se préocuper de la taille de la chaine.

char *mot[13];            //12 +1 =13 oublie pas le caractère null final
mot [13]='\0';

int i0=0, i1=0, i2=0,................i11=0; //12 entiers (char au lieu de int optimiserait le temps ?)

et maintenant for () va s'averer tres utile

for (i11=0;i11 != 38;i11++) //37 c'est la "taille" de car (1 + 26 +10)
    for(i10=0;i10 != 38;i10++)
........................................................
........................................................

                         for (i0=0;i0 != 38;i0++)
                            {
                             mot[0]=char[i0];
                             ..........................  //c'est lourd mais pas de calc d'incrementation
                             mot [11] = char [i11];
                             puts (mot);
                            }

voilà ça devrait (peut-être) marcher, sinon fais des retouches ou insipre toi de l'idée car je fais des fautes qd je ponds des algo en live...

ne t'étonne pas si ton pc ramme à fond : 37^12 = 6,58295201 × 1018   à 2000 cycle CPU l'iteration par exemple...

vinc1008881


                           
                            





Re : generateur de mot le 05/03/2007 22:58:37

chris91
bonsoir,


void tabcpt()
{
  char tab[] = "aaaaaaaaaaaa\r\n";
  char *p, *ps, *pe;


  pe = tab + 11;
  ps = pe;


  while(1)
  {
    // affichage chaîne ps ici (ex: puts(ps); )
    p = pe;
    while(1)
    {
      if(*p == 'z')
      {
        *p = '0';
        break;
      }

      if(*p == '9')
      {
        if(p == tab) return;
        *p-- = 'a';
        if(p < ps) ps = p;
        continue;
      }
      (*p)++;
    }
  }
}


mais attention le temps... 36^12 solutions !!
avec une chaîne de 6 chars, ça fait déjà 2176782336 solutions (>2Mds).
donc code non testé ;)

Re : generateur de mot le 05/03/2007 23:09:13

chris91
avec un break; après (*p)++; ça fonctionne beaucoup mieux.


Classé sous : programme, mot, caractere, caracteres, position

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS