cs_clinik
Messages postés34Date d'inscriptionvendredi 12 novembre 2004StatutMembreDernière intervention 1 novembre 2012
-
30 août 2007 à 02:42
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 2008
-
31 août 2007 à 21:28
Salut,
J'aimerais quelques explications, puisque je veux faire une boucle pour me donner tout les possibilitées possibles avec 4 nombres par exemple.....
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 août 2007 à 08:19
Salut,
>[auteurdetail.aspx?ID=59035 FMatrix07] Tiens on a presque la même signature
>[auteurdetail.aspx?ID=379347 clinik]: essaie ceci
Dim i As Integer
Dim A As String
Dim B As String
Dim C As String
Dim D As String
A = "1"
B = "2"
C = "3"
D = "4"
'l'idée c'est d'aller de i= 1234 à 4321
'et d'ajouter à la liste que les nombres
'ecrit avec 1 et 2 et 3 et 4
'la seul chose a faire est s'assurer (pas fait ici)
'que a < b < c < d
For i = CInt(A & B & C & D) To CInt(D & C & B & A)
'si le nombre contient 1 et ...
If InStr(1, i, A) Then
'si le nombre contient 2 et ...
If InStr(1, i, B) Then
'si le nombre contient 3 et ...
If InStr(1, i, C) Then
'si le nombre contient 4 et ...
If InStr(1, i, D) Then
Call ShowList.AddItem(CStr(i))
End If
End If
End If
End If
Next , ----
[code.aspx?ID=41455 By Renfield]
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 31 août 2007 à 17:08
Re,
NOTE: [auteurdetail.aspx?ID= 379347 clinik ][auteurdetail.aspx?ID=379347 Voici l'intérêt de faire attention à la section ou tu pose ta question]
SI tu fais tu VB6 NE POSTE PAS LA: [infomsgf_VB-NET-VB-2005_40.aspx VB.NET et VB 2005]
Sauf erreur de ma part (et oui c'est vendredi tout de meme) la traduction en VB6 serait
Private Sub btnSearch_Click()
Dim L As Integer
L = CInt(txtLen.Text)
lstSolutions.Clear
Call TrouveComb(L, "")
Call MsgBox("Terminée", vbOK Or vbExclamation, "Combinaisons")
End Sub<hr />
Private Sub TrouveComb(ByVal L As Integer, ByVal Begining As String)
Dim i As Integer
If Len(Begining) = L Then
Call lstSolutions.AddItem(Begining)
lblNbSolutions.Caption = lstSolutions.ListCount
DoEvents
Else
For i = 1 To L
If InStr(1, Begining, CStr(i)) = 0 Then
'If Begining.IndexOf(i.ToString()) = -1 Then
Call TrouveComb(L, Begining & CStr(i))
End If
Next
End If
End Sub , ----
[code.aspx?ID=41455 By Renfield]
J'ai pas testé ce que donne cette version.
@+: Ju£i?n Pensez: Réponse acceptée
FMatrix07
Messages postés233Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention21 février 20092 30 août 2007 à 04:26
Bonjour,
Il ne faudrait pas plus que tu fasse 4 boucle, 1 pour chaque position que peux avoir chaque nombre
For j = A To D
If j = A Then
For i = A To D
ShowList.AddItem (i * 1 + B * 10 + C * 100 + D * 1000)
Next
ElseIf j = B Then
For i = A To D
ShowList.AddItem (A * 1 + i * 10 + C * 100 + D * 1000)
Next
ElseIf j = C Then
For i = A To D
ShowList.AddItem (A * 1 + B * 10 + i * 100 + D * 1000)
Next
ElseIf j = D Then
For i = A To D
ShowList.AddItem (A * 1 + B * 10 + C * 100 + i * 1000)
Next
End IF
Next
SCCréat
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_clinik
Messages postés34Date d'inscriptionvendredi 12 novembre 2004StatutMembreDernière intervention 1 novembre 2012 30 août 2007 à 04:41
Merci boucoup,
Avec sa :
Dim i As Integer
Dim j As Integer
Dim A As String
Dim B As String
Dim C As String
Dim D As String
A = "1"
B = "2"
C = "3"
D = "4"
For j = A To D
If j = A Then
For i = A To D
ShowList.AddItem (i * 1 + B * 10 + C * 100 + D * 1000)
Next
ElseIf j = B Then
For i = A To D
ShowList.AddItem (A * 1 + i * 10 + C * 100 + D * 1000)
Next
ElseIf j = C Then
For i = A To D
ShowList.AddItem (A * 1 + B * 10 + i * 100 + D * 1000)
Next
ElseIf j = D Then
For i = A To D
ShowList.AddItem (A * 1 + B * 10 + C * 100 + i * 1000)
Next
End If
Next
Il me donne pas mal tout les 4*** mais il y en a qui reviennent 2 fois
mais il me donne qu'un 1***, 2*** et 3****
FMatrix07
Messages postés233Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention21 février 20092 30 août 2007 à 05:19
Dim i As Integer
Dim j As Integer
Dim A As String
Dim B As String
Dim C As String
Dim D As String
A = "1"
B = "2"
C = "3"
D = "4"
For j = A To D
If j = A Then
ShowList.AddItem (A & B & C & D)
ShowList.AddItem (A & B & D & C)
ShowList.AddItem (A & D & B & C)
ShowList.AddItem (A & D & C & B)
ShowList.AddItem (A & C & B & D)
ShowList.AddItem (A & C & D & B)
ElseIf j = B Then
ShowList.AddItem (B & A & C & D)
ShowList.AddItem (B & A & D & C)
ShowList.AddItem (B & D & A & C)
ShowList.AddItem (B & D & C & A)
ShowList.AddItem (B & C & A & D)
ShowList.AddItem (B & C & D & A)
ElseIf j = C Then
ShowList.AddItem (C & B & A & D)
ShowList.AddItem (C & B & D & A)
ShowList.AddItem (C & D & B & A)
ShowList.AddItem (C & D & A & B)
ShowList.AddItem (C & A & B & D)
ShowList.AddItem (C & A & D & B)
ElseIf j = D Then
ShowList.AddItem (D & B & C & A)
ShowList.AddItem (D & B & A & C)
ShowList.AddItem (D & A & B & C)
ShowList.AddItem (D & A & C & B)
ShowList.AddItem (D & C & B & A)
ShowList.AddItem (D & C & A & B)
End If
Next
Je sais pas cool comme code mais ça donne le bon résultat sinon il faut faire un code encore plus complexe pour determiner la position de chaque nombre et la deplacer de 1 a chaque fois
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 31 août 2007 à 10:33
Le problème se résolvant bien avec un algo récursif, voici une proposition de code, plutot efficace je pense.
En plus, tu peux y faire varier la longueur de la combinaison à rechercher (de 1 à 9)
Pour le tester, mettre sur une form :
- une Textbox nommée 'txtLen' et servant à indiquer la longueur de la combinaison à rechercher
- Un Button nommé 'btnSearch' servant à lancer la recherche
- Une Listbox nommée 'lstSolutions' servant à afficher les solutions
- Une Label nommée 'lblNbsolutions' servant à afficher le nb de solutions
Colle ensuite le code ci-dessous dans le module de la forme :
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
Dim L As Integer = Integer.Parse(txtLen.Text)
lstSolutions.Items.Clear()
TrouveComb(L, "")
MessageBox.Show("Terminée", "Combinaisons", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Sub
Private Sub TrouveComb(ByVal L As Integer, ByVal Begining As String)
If Begining.Length = L Then
lstSolutions.Items.Add(Begining)
lblNbSolutions.Text = lstSolutions.Items.Count
My.Application.DoEvents()
Else
For i As Integer = 1 To L
If Begining.IndexOf(i.ToString()) = -1 Then
TrouveComb(L, Begining & i.ToString())
End If
Next
End If
End Sub
Dis-moi ce que tu en pense.
Avantages par rapport à la solutions de JRivet :
- Je ne boucle pas sur tous les nombres de 1234 à 4321, donc à priori, plus rapide
- Utilisable pour une longueur de combinaison variant de 1 à 9, sans toucher une seule ligne de code.