Algorithme...

Résolu
Signaler
Messages postés
181
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
16 octobre 2006
-
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
-
Voilà, j'ai un problème purement algorithmique:
J'aimerai lister toute les possibilité de compositions de l'alphabète avec 3 lettres:

a.a.a
a.a.b
a.a.c
...
a.b.a
a.b.b
...

Bon, le truc c'est que j'aimeai bien que le nombre de caractère puisse être varier.. alors si le nombre de caractère est 3, et qu'il est fixe, on peut tout simplement faire:

Dim a As Single
For a = 0 To 25
clé(0) = a
Dim b As Single
For b = 0 To 25
clé(1) = b
Dim c As Single
For c = 0 To 25
clé(2) = c
ListBox1.Items.Add(Chr(97 + clé(0)) & "." & Chr(97 + clé(1)) & "." & Chr(97 + clé(2)))
Next
Next
Next

Voilà.. le truc serai que la boucle for se réexecute.. ça serai du style ça.. mais ça marche pas complètement..:

Private Sub getmore()
Dim x As Single
For x = 0 To 25
clé(position) = x
If ListBox1.Items.Count = 25 ^ 2 Then Exit Sub
If position = 2 Then
position = 0
ListBox1.Items.Add(Chr(97 + clé(0)) & "." & Chr(97 + clé(1)) & "." & Chr(97 + clé(2)))
Else
position += 1
getmore()
End If
Next x
End Sub

le prob est que le getmore continue à se réexecuter.. alors prob.. si quelqu'un a une super idée.. ça serai piiire cool!

Merci d'avance..

6 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
Private Sub Command1_Click()

Dim T() As Integer

Dim Nb As Integer

Dim Cx As Integer

Dim n As Integer

Dim i As Integer

Dim j As Integer

Dim z As Integer



'Combinaisons de 3 Lettres sur 3 lettres

Nb 3: Cx 3

ReDim T(Cx)



n = 0

Debug.Print "----- début -----"



Do

For i n + 1 To Cx - 1: T(i) 1: Next

For i = 1 To Nb

For j = 1 To Cx - 1: Debug.Print Chr$(T(j) + 96);: Next: Debug.Print Chr$(i + 96)

z = z + 1

Next

For n = Cx - 1 To 1 Step -1

i = T(n) + 1

If i <= Nb Then Exit For

Next

T(n) = i

Loop Until n = 0

Debug.Print "nombre = "; z



End Sub


Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
256
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
1
plus propre :

private sub faire(n as integer, s as string)
dim k as integer

if n = 0 then
me.list1.additem s

else

for k = 1 to 3
faire(n-1,s & chr(96+k))
next k

end if

end sub

(c'est les fonctions récursives)

A+.
Thomas.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
181
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
16 octobre 2006

Haha!!
Ben en faite je viens de trouver.. il suffisais que j'arrête de recommencer la boucle en comptant le nombre de fois qu'elle était executée.. et par une petite variable (nbboucle) j'ai comme ça le nombre de fois éxecuté:

Private Sub getmore()
Dim x As Single
For x = 0 To 25
clé(position) = x
If ListBox1.Items.Count = 25 ^ 2 Then Exit Sub
If position = 2 Then
position = 0
ListBox1.Items.Add(Chr(97 + clé(0)) & "." & Chr(97 + clé(1)) & "." & Chr(97 + clé(2)))
Else
position += 1
If nbboucle < 3 Then
getmore()
Else : nbboucle += 1
End If
End If
Next x
End Sub

Donc voilà..
Messages postés
181
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
16 octobre 2006

Eh ben non.. je me suis trompé.. quand je lançais mon prog, ça executais le code d'en dessus.. trop triste..

Bon.. la question tien tjs.. je sais pas comment faire..

Merci de répondre..
Messages postés
181
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
16 octobre 2006

Oh!! super trop piire cool!! merci bien..! j'ai testé la tienne jannoman, elle marche très bien..! la tienne gobillot, je ne l'ai pas testée, mais je te fait confiance, elle me paraît bien aussi, je la testerai à l'occase..!

Merci bien!
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
attention récursivité

- gourmande en temps

- goumande en mémoire

- plantage en cas de dépassement de pile

ce qui va se produire au bout de 26*26*26* ...



Daniel