Page 1 sur 1

Générer toues les chaines de caractères possibles

Publié : dim. 02/déc./2007 12:11
par lepiaf31
Salut à vous, je voudrais créer une boucle qui liste toutes les chaines de caractères possibles à partir de différents cractères donnés. Par exemple si j'ai les caractères a, b et c, je veux avoir comme liste:
a
b
c
ab
ac
bc

Mais je n'arive pas à faire la boucle, quelqu'un peut m'aider ?

Publié : dim. 02/déc./2007 13:39
par Anonyme

Code : Tout sélectionner

Procedure.s GetAllChar(key.s,size.l,Charset.s)
 Protected Partial.l, Pos.l
 
  If Len(Key) < Size
    Partial = #True
  ElseIf Len(Key) > Size Or Len(Charset) <= 1
    Key = #NULL$
  EndIf
  
  If Key And Not Partial
    rKey.s = Right(Key, 1)
    rSet.s = Right(Charset, 1)
    While rKey = rSet
      Key = Left(Key, Len(Key)-1)
      rKey.s = Right(Key, 1)
    Wend
  EndIf
 
  If Key And Not Partial
    Pos = FindString(Charset, Right(Key, 1), 1) + 1
    Key = Left(Key, Len(Key)-1) + Mid(Charset, Pos, 1)
  EndIf
 
  If Key Or Partial
    While Len(Key) < Size
      Key + Left(Charset, 1)
    Wend
  EndIf
 
  ProcedureReturn Key
EndProcedure


Charset.s = "ABCDEF"


For Size = 1 To 5

Repeat
  key.s = GetAllChar(key,size,Charset)
  Debug key
Until Not Key

Next 

Publié : lun. 03/déc./2007 0:11
par Ar-S
Vraiment cool ce petit code

Publié : lun. 03/déc./2007 0:16
par Backup
je prefere celui ci :D
mais il a un but legerement different !! :wink:

Code : Tout sélectionner

; algo de permutation .

Declare ALGO_PERMUTATION(mot$, deb$)
ALGO_PERMUTATION("123", "")



Procedure ALGO_PERMUTATION(mot$, deb$)
  For i=1 To Len(mot$)
    ch$=Left(mot$,1)
    rest$=Right(mot$,Len(mot$)-1)
    If rest$<>""
      deb$=deb$+ch$
      ALGO_PERMUTATION(rest$, deb$)
      deb$=Left(deb$,Len(deb$)-1)
    Else 
      Debug deb$+ch$ 
    EndIf
    mot$=rest$+ch$
  Next i
EndProcedure