Algorithme...

Résolu
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006 - 30 janv. 2006 à 21:20
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 31 janv. 2006 à 18:09
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

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
30 janv. 2006 à 21:59
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
jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 1
31 janv. 2006 à 08:13
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
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006
30 janv. 2006 à 21:31
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à..
0
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006
30 janv. 2006 à 21:35
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..
0

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

Posez votre question
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006
31 janv. 2006 à 17:58
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!
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
31 janv. 2006 à 18:09
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
0