3 nombres sur 9 dans tous les sens

Résolu
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006 - 24 sept. 2006 à 13:34
 Vb Lover - 12 oct. 2006 à 10:11
bonjour
sur une liste de 9 nombres il me les faut par 3  tous mais une seule fois

1,2,3,4,5,6,7,8,9

je dois obtenir (
dans un listdictionnary par exemple
)
123
124
125
126
129
...
234
245
...

mais bien sur pas 321 ni 524 car ils sont deja dans ma liste : 123 et 245

merci pour l'aide

42 réponses

Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
24 sept. 2006 à 15:48
Pour un tableau, l'adaptation est simple 

Dim result As String
  For a = 1 To 7
   For b = a + 1 To 8
    For c = b + 1 To 9
     result = Tablo(a) & Tablo(b) & Tablo(c)
    Next a
   Next b
  Next c
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 15:51
non Dolphin je plante

            Dim neufa As New StringCollection

            neufa.Add(2.ToString)
            neufa.Add(6.ToString)
            neufa.Add(7.ToString)
            neufa.Add(8.ToString)
            neufa.Add(3.ToString)
            neufa.Add(14.ToString)
            neufa.Add(15.ToString)
            neufa.Add(11.ToString)
            neufa.Add(22.ToString)

            Dim a, b, c As Integer
            Dim sb As New StringBuilder
            Dim i As Integer = 0

            For a = 1 To 7
                For b = a + 1 To 8
                    For c = b + 1 To 9
                        i += 1
                        sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(c))
                    Next
                Next
            Next

            Me.AddLiteral(i.ToString & "<hr />")
            Me.AddLiteral(sb.ToString)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 sept. 2006 à 15:51
Dolphin Boy
-> j'ai un gros doute sur la fiabilité de ton code.. (tant en chaîne qu'en tableau, en VB6 tout au moins)
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 15:52
non ca marche pas
j'aimerais bien l'autre code mais en vb net  , je comprend pas le langage utilise
0

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

Posez votre question
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 15:54
imaginons que mes 9 nombres soient :  14, 17, 25,26,42,77,89,101,200
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 15:58
il s'agit d'un tableau de 9 nombres, c'est bete qu'on nepuisse pas editer les messages
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
24 sept. 2006 à 16:04
Oups, un oubli, les tableaux commencent par 0 donc :

  For a = 0 To 6
   For b = a + 1 To 7
    For c = b + 1 To 8
     '.....
    Next a
   Next b
  Next c
0
Profil bloqué
24 sept. 2006 à 16:04
Désolé je n'ai pas fait attention au fait que tu programmes en VB Net : c'est du VB 6.0

Je te décortique l'idée du code

- Une chaine String égale à "012"
- une boucle DO LOOP
     -  car1$ : chaine d'1 caractère ASCII représentant le premier caractère de chaine$ avec le code ASCII augmenté de 1 ( le 0 devient 1)
     - car2$ : idem mais pour le second caractère de chaine$ ( le 1 devient 2)
     - car3$ : idem pour le 3° caractère de chaine$ ( le 2 devient 3)
     - on reforme chaine$ en concaténant car1$, car2$ et car3$ : pour le premier tour "012" devient "123"
     - si car1$ = "7" on affiche la chaine et on sort ( c'est le "789" de fin de liste)
     - on sauvegarde chaine dans une varible string Temp$
     - On fait une boucle FOR NEXT depuis la valeur du chiffre de droite de la chaine jusqu'à 9 ( de 3 à 9 la première fois)
               - dans ce FOR NEXT on forme la chaine à afficher à l'écran : les 2 chiffres de gauche de       chaine$ et le chiffre de progression du FOR NEXT --> 123,124,125,126,127,128,129 pour la première série
               - on affiche dans la liste à chaque fois cette chaine : 123 puis 124 pui etc....
       - fin du FOR NEXT
       - on récupère notre chaine d'origine sauvegardée dans temp$
- Fin de la boucle DO LOOP

En espérant t'avoir aidé
A+

GRENIER Alain[8D]
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 16:10
merci bcp Alain pour ton code et ton temps, mais je ne vois pas bien ton principe de code

si tu as un tableau de x nombre (disons 9)  comme suit :
14, 17, 25,26,42,77,89,101,200


il faut les marier par  y (ici 3)   sans doublons (pas 1,1,2) et toujours differents (1,2,4 mais pas 4,2,1)

mon code marcherait mais il faut a chaque boucle vider le nombre  en cours



Private Sub TroisDeNeuf()
            Dim neufa As New StringCollection
            Dim neufb As New StringCollection
            Dim neufc As New StringCollection
            For a As Integer = 1 To 9
                neufa.Add(a.tostring)
            Next
            neufb = neufa
            neufc = neufa
            Dim sb As New StringBuilder
            Dim i As Integer = 0
            Dim _a, _b, _c As Integer
            For a As Integer = 0 To 8
                For b As Integer = 0 To 8
                    For c As Integer = 0 To 8
                        If a <> b AndAlso a <> c AndAlso b <> c Then
                            sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(c))
                            i += 1
                        End If
                    Next
                Next
                'ici il faudrait supprimer a chaque boucle le i=+1
            Next
            Me.AddLiteral(i.ToString & "<hr />")
            Me.AddLiteral(sb.ToString)
        End Sub
0
Profil bloqué
24 sept. 2006 à 16:41
Salut Anselmejour
Au début j'avais compris que tu travaillais sur les chiffres 1 à 9 alors que tu travailles sur 9 nombres et ces nombres peuvent comporter plusieurs chiffres
Fais un tableau de tes 9 nombres avec les indices de 1 à 9 : Table (1 to 9)
ensuite crée 3 variables : ind1,ind2 et ind3 qui représenteront les indicesAu début pose ind1 0 : ind2 1 et ind3 = 2  ( les indices de début)
Une boucle Do
    ind1 = ind1 +1
    ind2 =ind2 +1
    ind3 =ind3 +1
    si ind1 = 7 alors
          les 3 éléments sont table(7),table(8) et Table(9)
          tu affiches tes trois éléments pour test
          On sort de la boucle
          Une boucle FOR :   Pour i = ind3 to 9
                  Les 3 éléments sont Table(ind1),table(ind2) et table(i)
                  Tu affiches les 3 éléments pour test
          Fin de la boucle FOR
Fin de la boucle DO            
 Loop

GRENIER Alain[8D]
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 16:53
non je l'ai pas

            Dim neufa As New StringCollection
            For x As Integer = 1 To 9
                neufa.Add(x.ToString)
            Next

            Dim a, b, c As Integer
            a = -1
            b = 0
            c = 1

            Dim sb As New StringBuilder
            Dim i As Integer = 0

            Do
                a += 1
                b += 1
                c += 1
                If a = 7 Then
                    Exit Do
                Else
                    For y As Integer = c To 9
                        i += 1
                        sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(c))
                    Next
                End If
            Loop

            Me.AddLiteral(i.ToString & "<hr />")
            Me.AddLiteral(sb.ToString)
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 16:54
je penseque mon code est correct mais le probleme est de supprimer des elements d'un tableau dans une boucle (en changer la taille)
0
Profil bloqué
24 sept. 2006 à 17:13
Je me suis permis de corriger en VB Net
Vérifie les 4 lignes avec les points d'interrogation car je ne les comprends pas

dim neufa as New StringCollection
For X as Integer = 1 to 9
      neufa.Add(x.ToString)
Next
Dim a,b,c as Integer
a=0
b=1
c=2

Dim sb as New StringBuilder
Do
     a+ = 1
     b+ = 1
     c+ =1
     if a = 7 then
          sb.Appendformat ("{0} {1} {2}
",neufa(a),neufa(b),neufa(c))          ??????
     exit do
     For y  as Integer = c to 9
          sb.Appendformat ("{0} {1} {2}
",neufa(a),neufa(b),neufa(y))          ???????
     Next
Loop

Me.AddLiteral(i.ToString  & "<hr />"           ????????
Me.AddLiteral(sb.ToString)             ????????????

GRENIER Alain[8D]
0
Profil bloqué
24 sept. 2006 à 17:20
Il manque un End If entre le Exit Do et la Boucle For Next
Excuse

GRENIER Alain[8D]
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 17:23
ton code :

Dim neufa As New StringCollection
            For X As Integer = 1 To 9
                neufa.Add(X.ToString)
            Next
            Dim a, b, c As Integer
            a = 0
            b = 1
            c = 2

            Dim sb As New StringBuilder
            Dim i As Integer = 0

            Do
                a += 1
                b += 1
                c += 1
                If a = 7 Then
                    Exit Do
                Else
                    For y As Integer = c To 9
                        sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(c))
                    Next
                End If
            Loop

            Me.AddLiteral(i.ToString & "<hr />")
            Me.AddLiteral(sb.ToString)

avec ca j'obtiens :


2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
3 4 5
3 4 5
3 4 5
3 4 5
3 4 5
3 4 5
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
5 6 7
5 6 7
5 6 7
5 6 7
6 7 8
6 7 8
6 7 8
7 8 9
7 8 9

si je remplace



sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(c))
par





sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(y))

je plante out of range

appendformat est juste une construction de chaine (string) a partir des donnees en vb net
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 17:44
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index






ma variable i sert juste de titre a compter le nombre de lignes obtenues
ton code ne marche pas
0
Profil bloqué
24 sept. 2006 à 17:57
Dim neufa As New StringCollection
For X As Integer = 1 To 9
   neufa.Add(X.ToString)
Next
Dim a, b, c As Integer
a = 0
b = 1
c = 2


Dim sb As New StringBuilder
Dim i As Integer = 0


Do
   a += 1
   b += 1
   c += 1
   If a = 7 Then
       sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(c))
       i += 1
       Exit Do
   end if
   For y As Integer = c To 9
       sb.AppendFormat("{0} {1} {2}
", neufa(a), neufa(b), neufa(y))
       i +=1
   Next
Loop


Me.AddLiteral(i.ToString & "<hr />")
Me.AddLiteral(sb.ToString)

GRENIER Alain[8D]
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 18:04
Dolphin ca marche nikel chrome

Alain non ca plante

merci a tous les 2
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 sept. 2006 à 20:42
un p'tit coup de "réponse acceptée" sur la ou les réponses qui t'ont aidé?
ouaip, çà peut être sympa... (habitude à prendre)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
anselmejour Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 9 octobre 2006
24 sept. 2006 à 21:02
voila en 2 reponses le resultat

merci a tous
0
Rejoignez-nous