[ VB6 ] Problème de doublons [ résolu ]

Problème de doublons [ résolu ] [ VB6 ] - VB/VBA/VBS - Programmation

Marsh Posté le 10-06-2005 à 14:54:25    

Bonjour.
Voici un bout de code qui me sert à mélanger les valeurs contenues dans un tableau.


v0 = UBound(tableau_mots) - LBound(tableau_mots)
 
 
For i = LBound(tableau_mots) To UBound(tableau_mots)
  v1 = Int(Rnd() * v0 + LBound(tableau_mots))
  v2 = Int(Rnd() * v0 + LBound(tableau_mots))
  v3 = tableau_mots(v2)
  tableau_mots(v2) = tableau_mots(v1)
  tableau_mots(v1) = v3


 
Je n'ai qu'un problème, c'est que le mot qui se trouve en première place dans mon tableau avant le mélange se retrouve régulièrement deux fois après le brassage.
Je pensai que ça pouvait être lié à " option base 1 " mais à priori non.
 
Si qqun avait une idée...
Merci d'avance.


Message édité par amsterdam le 11-06-2005 à 18:46:40
Reply

Marsh Posté le 10-06-2005 à 14:54:25   

Reply

Marsh Posté le 10-06-2005 à 16:46:02    

amsterdam a écrit :

Bonjour.
Voici un bout de code qui me sert à mélanger les valeurs contenues dans un tableau.


v0 = UBound(tableau_mots) - LBound(tableau_mots)
 
 
For i = LBound(tableau_mots) To UBound(tableau_mots)
  v1 = Rnd() * v0 + LBound(tableau_mots)
  v2 = Rnd() * v0 + LBound(tableau_mots)
  v3 = tableau_mots(v2)
  tableau_mots(v2) = tableau_mots(v1)
  tableau_mots(v1) = v3


 
Je n'ai qu'un problème, c'est que le mot qui se trouve en première place dans mon tableau avant le mélange se retrouve régulièrement deux fois après le brassage.
Je pensai que ça pouvait être lié à " option base 1 " mais à priori non.
 
Si qqun avait une idée...
Merci d'avance.


Salut,
 
Bon, à voir il semble qu'avec les fonctions Randomize et Rnd tu n'arrives pas à faire tirer à VB une fois et une seule fois les chiffres d'une série...
 
Si tu te souviens de ton précédent Post, il y avait une remarque de dahlo:

Citation :

l'essentiel est dans la dernière boucle Do...


 
Je ne peux donc que confirmer sa remarque... Et si tu te souviens bien, sa boucle Do fait:

Code :
  1. Do
  2.   MyValue = Int((UBound(MonTabl, 1) * Rnd))
  3. Loop While MonTabl(MyValue) <> ""


 
Voilà... il ne te reste plus qu'à adapter tout ça pour ton code :)
 
A+ et bon week-end


Message édité par gfa le 10-06-2005 à 16:55:45
Reply

Marsh Posté le 10-06-2005 à 16:56:22    

Oui mais pourquoi dans une phrase du genre " je suis une grosse quiche en prog  " c'est toujours le "je" qui apparait deux fois et jamais un des autres mots ?
Sinon la méthode bourrin va consister à comparer si v1 et v2 sont identiques avant de les inverser mais bon...... :/

Reply

Marsh Posté le 10-06-2005 à 16:57:29    

Ok je vais regarder çà. :hello:

Reply

Marsh Posté le 11-06-2005 à 13:33:43    

Je viens de tester et je n'ai pas ton problème.
Voici le code que j'ai utilisé:

  Dim i As Integer
  Dim tableau_mots() As Variant
  Dim v0 As Integer
  Dim v1 As Integer
  Dim v2 As Integer
  Dim v3 As String
   
  tableau_mots = Array("je", "suis", "une", "grosse", "quiche", "en", "prog" )
  v0 = UBound(tableau_mots) - LBound(tableau_mots)
   
  For i = LBound(tableau_mots) To UBound(tableau_mots)
    v1 = Int(Rnd() * v0 + LBound(tableau_mots))
    v2 = Int(Rnd() * v0 + LBound(tableau_mots))
    v3 = tableau_mots(v2)
    tableau_mots(v2) = tableau_mots(v1)
    tableau_mots(v1) = v3
  Next i


Je ne serais pas étonné que le problème vienne du contenu du tableau.


Message édité par AlainTech le 11-06-2005 à 13:34:32

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 11-06-2005 à 18:46:05    

Nan en fait il vanait de la phrase que j'avait modifiée en cours de route et qui contenait 2 "e" mais j'ai eu trop honte de venir le dire quand je m'en suis aperçu hier soir. :d
 [:nowad]  [:nowad]  [:nowad]  
Comme quoi je suis vraiment une grosse quiche... [:burtonsnowboard]  
Mais merci quand même de m'avoir aidé.

Reply

Marsh Posté le 11-06-2005 à 18:58:07    

Y a pas de honte à avoir.
On s'est tous plantés sur des conneries.
Voir ma signature. ;)


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 11-06-2005 à 19:15:28    

Ok. :)
De toute façon le prochain problème ne saurait tarder :lol:.
Mais je cherche encore un peu tout seul de mon côté et si je ne trouve pas je viens ici.  :hello:


Message édité par amsterdam le 11-06-2005 à 19:15:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed