Combinaison de Caractéres

cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 - 27 août 2004 à 13:07
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 27 août 2004 à 22:05
Salut,

Comment avoir toutes les combinaisons sur 3 caractéres ( par Ex) de Chr(32) à Chr(126)

Merci d'avance

It@li@

11 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
27 août 2004 à 13:16
Triple boucle imbriquée :
For i = 32 To 126
   For j = 32 To 126
       For k = 32 To 126
          Debug.Print Chr$(i) & Chr$(j) & Chr$(k)
       Next k
    Next j
Next i
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
27 août 2004 à 13:20
ça en fait quand même
(126 - 31) ^ 3 = 857 375 ; on frôle le million !
Debug.Print sera un peu cour : il faut les mettre dans un tableau.
0
TheEwook Messages postés 155 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
27 août 2004 à 13:23
Salut,

Il faut que tu fasses 3 For imbriqués :

Dim x As integer
Dim y As Integer

Dim i a As Integer
Dim J a As Integer
Dim K a As Integer

x = 32
y = 126

For i = x To y
   For j = x To y
      For k = x To y

          Text1.Text = Text1.Text & Chr(i) & Chr(j) & Chr(k) & & vbNewLine

      Next
   Next
Next


Voilà

@++

________________
TheEwook
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
27 août 2004 à 13:30
Merci et pour que ca me donne les combinaisons en 1,2 et 3 caractéres toujours de Chr(32) à Chr(126)

It@li@
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheEwook Messages postés 155 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
27 août 2004 à 13:40
Salut,

Là le plus dur est fait :

Pour 2 caractéres :
x = 32
y = 126

For i = x To y
For j = x To y

Text1.Text = Text1.Text & Chr(i) & Chr(j) & vbNewLine

Next j
Next i

==============================

Pour 1 caractére
x = 32
y = 126

For i = x To y

Text1.Text = Text1.Text & Chr(i) & vbNewLine

Next i


voilà

@++

________________
TheEwook
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
27 août 2004 à 13:41
POur theEwwok

Dim i a As Integer --> Dim i As Integer
Dim J a As Integer --> Dim J As Integer
Dim K a As Integer --> Dim K As Integer
Text1.Text = Text1.Text & Chr(i) & Chr(j) & Chr(k) & & vbNewLine
-->Text1.Text = Text1.Text & Chr(i) & Chr(j) & Chr(k) & vbNewLine

MAis Merci

It@li@
0
TheEwook Messages postés 155 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
27 août 2004 à 13:42
Salut,

Il suffit de mettre les 3 codes ci-dessus les uns à la suite des autres, pour avoir toutes les combinaisons sur 1, 2 et caractéres de Chr(32) à Chr(126)

@++

________________
TheEwook
0
TheEwook Messages postés 155 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
27 août 2004 à 13:47
Salut,

Oui, simple erreur de syntaxe, désolé

@++

________________
TheEwook
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
27 août 2004 à 15:00
J'ai uniquement testé la double boucle de TheEwook

Quelques remarques sur son code :

La ligne Text1.text = Text1.text & ...

sera beaucoup trop longue à l'exécution.
A la limite, tu fais plutôt un truc du style

List1.additem chr(i) & chr(j)

Le gain est de l'ordre de 500 % (tu vas 5 fois plus vite)

Ensuite, l'utilisation des types Integer n'est pas très appropriée
Dans une boucle For, il vaut mieux mettre des Long quand les boucles sont ... longues :) .
Le gain est encore de 10% avec des Long plutôt que des Integer.

Dans tous les cas, la triple boucle est super super longue ...
mais la double boucle passe sous la barre de 1 seconde.

Manu
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
27 août 2004 à 16:50
On peut aussi tout combiner plutôt que de faire pour 1 puis 2 puis trois si ca te gène pas qu'ils soient pas cet ordre, et du coup gagner du temps.
Dim i As Integer
Dim J As Integer
Dim K As Integer

For i = 32 To 126
  List1.AddItem Chr(i)
  For j = 32 To 126
    List1.AddItem Chr(i) & Chr(j)
    For k = 32 To 126
      List1.AddItem Chr(i) & Chr(j) & Chr(k)
    Next k
  Next j
Next i

Pourquoi des Long, chaque boucle en elle-même n'est pas longue ...

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
27 août 2004 à 22:05
Pourquoi des Long ?

Et bien Visual Basic utilise par défaut des Long dans les boucles.
Si ta variable de boucle n'est pas un long, elle est convertie en Long. La convertion prend du temps.

Dans la boucle de ton exemple, on boucle (126-32+1)*(126-32+1)*(126-32+1) soit 857375 fois.

Le temps gagné en ne faisant pas la transformation des nombres en Long est multiplié 857375. A la fin de l'algorythme, la différence se sent.
Tu fais souvent autant d'itérations ?

Manu
0
Rejoignez-nous