Boucle (For..) [Résolu]

Signaler
Messages postés
34
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
1 novembre 2012
-
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
-
Salut,

J'aimerais quelques explications, puisque je veux faire une boucle pour me donner tout les possibilitées possibles avec 4 nombres par exemple.....

Ex:
A= 1
B= 2
C= 3
D= 4

Possibilitées: 1234, 1243, 1324.....

Merci

11 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
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]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
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
Messages postés
34
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
1 novembre 2012

A = 1
B = 2
C = 3
D = 4


Dim i As Integer


 For i = A To D
    ShowList.AddItem (A * 1 + B * 10 + C * 100 + D * 1000)
Next

J'suis coincé
Messages postés
233
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
21 février 2009
2
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
Messages postés
34
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
1 novembre 2012

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****
Messages postés
233
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
21 février 2009
2
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

SCCréat
Messages postés
233
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
21 février 2009
2
Tiens nous au courant si tu trouves quelque chose de mieux.

@+: SCCréat
Pensez:  Réponse acceptée
Stéphan.COCHET
Messages postés
233
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
21 février 2009
2
Hello Jrivet,
On dirait que les grands esprits se recontre

Ta soluce est pas mal du tout

@+: SCCréat
Pensez:  Réponse acceptée
Stéphan.COCHET
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
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.
Messages postés
34
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
1 novembre 2012

Serais-ce du .Net?

Il y a plein de ligne en rouge dans le code lorsque je le paste..

* Mais sa me semble plus utile que le celui de JRivet :)
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
jrivet < Suis d'a&ccord avec ta traduction
clinik < Gare à toi si le maitre des Sit passe par là !! tuvas gouer e son sabre laser déménageur de post !