[VB6] tableau aléatoire [ résolu ]

tableau aléatoire [ résolu ] [VB6] - VB/VBA/VBS - Programmation

Marsh Posté le 07-06-2005 à 19:35:15    

Salut.
Voilà j'ai des données à transférer d'un fichier texte vers un tableau, en fait les différents mots d'une phrase.
Le problème est que j'y arrive bien tant qu'il faut que les données soient dans l'ordre mais je ne sais pas  comment faire pour placer ces mots dans mon tableau de façon aléatoire.
Si qqun avait une idée...
Merci d'avance. :)


Message édité par amsterdam le 09-06-2005 à 21:46:41
Reply

Marsh Posté le 07-06-2005 à 19:35:15   

Reply

Marsh Posté le 09-06-2005 à 17:03:05    

C'est bizarre...20 personnes ont visulisé mon topic mais aucune réflexion. :/
Si vous trouvez que mes explicatios ne sont pas claires n'hésitez pas à le dire. :d


Message édité par amsterdam le 09-06-2005 à 17:03:21
Reply

Marsh Posté le 09-06-2005 à 17:14:57    

amsterdam a écrit :

Salut.
Voilà j'ai des données à transférer d'un fichier texte vers un tableau, en fait les différents mots d'une phrase.
Le problème est que j'y arrive bien tant qu'il faut que les données soient dans l'ordre mais je ne sais pas  comment faire pour placer ces mots dans mon tableau de façon aléatoire.
Si qqun avait une idée...
Merci d'avance. :)


Salut,
 
Ce que tu peux faire c'est utiliser la fonction rmd (si mes souvenirs sont exacts) pour "tirer" un chiffre aléatoire qui sera l'indice de ton tableau dans lequel placer ton mot.
 
Et tu boucles jusqu'à ce que ton tableau soit plein! Attention, il te faudra sûrement tester la valeur du chiffre aléatoire trouvé parce que peut-être que VB retournera plusieurs fois le même. Mais je ne suis pas sûr parce qu'il me semble que tu peux "initialiser" le randomize... Et si tu ne l'initialise qu'une fois, peut-être qu'il te sortira tous les nombres sans "tirer au sort" 2x le même.
 
Voilà... Faut juste être patient :)

Reply

Marsh Posté le 09-06-2005 à 17:38:04    

C'est justement le problème de doublons qui me pose problème.
Donc en attendant j'ai commencé à tester autre chose.
Je crée une boucle qui me sort une chaine genre "123456" en fonction de la taille du tableau.
Me reste plus qu'à extraire les chiffres qui représentent l'indice du tableau de mots et comme ça pas de doublons.
 
Bon d'accord c'est surement un peu bourrin mais bon....:d
Enfin merci pour ta réponse. :jap:


Message édité par amsterdam le 09-06-2005 à 17:41:11
Reply

Marsh Posté le 09-06-2005 à 17:46:29    

Par contre si j'ai plus de 10 mots je vais être mal....enfin j'essaie quand même. :lol:

Reply

Marsh Posté le 09-06-2005 à 18:27:58    

Rapido:
sub test()
Dim MyValue As Integer
Dim Nbmot, Cpt1, Cpt2 As Integer
Dim Montext, MonItem As String
Dim MonTabl() As String
'Texte
'Montext = "On ne peut pas attendre que l'inspiration vienne. Il faut courir après avec une massue."
Montext = "Les fichiers d'aide de Windows 2000 Server sont généralement placés dans " & _
          "C:\Winnt\Help. Ces fichiers sont interconnectés pour former un système d'aide " & _
          "intégré et ils contiennent des raccourcis permettant d'ouvrir différents outils " & _
          "d'administration. Les fichiers d'aide utilisent environ 30 Mo d'espace disque."
 
Montext = RTrim(LTrim(Montext))
'Compte nb mot
Cpt1 = 0
Nbmot = 0
Do
    Cpt1 = InStr(Cpt1 + 1, Montext, Chr(32))
    Nbmot = Nbmot + 1
Loop While Cpt1 > 0
'dim le tableau
ReDim MonTabl(Nbmot)
'init
Cpt1 = 0
Randomize    ' Initialise le générateur de nombres aléatoires.
'boucle sur nbmot
For Nbmot = 0 To UBound(MonTabl, 1) - 1
    Cpt1 = InStr(Cpt1 + 1, Montext, Chr(32))
    Select Case Nbmot
        Case 0
            Cpt2 = Cpt1 - 1
            Cpt1 = 0
        Case UBound(MonTabl, 1) - 1
            Cpt2 = Len(Montext)
        Case Else
            Cpt2 = InStr(Cpt1 + 1, Montext, Chr(32))
    End Select
    MonItem = Mid$(Montext, Cpt1 + 1, Cpt2 - Cpt1)
    MonItem = RTrim(MonItem)
    If Right(MonItem, 1) = Chr(46) Then MonItem = Mid(MonItem, 1, Len(MonItem) - 1)
    'cherche un index aléatoire dispo ds la dim du tableau
    Do
        MyValue = Int((UBound(MonTabl, 1) * Rnd))
    Loop While MonTabl(MyValue) <> ""
    MonTabl(MyValue) = MonItem
Next
'Test
For Cpt1 = 0 To UBound(MonTabl, 1) - 1
Debug.Print MonTabl(Cpt1)
Next
end sub
 
Bon! le traitement du texte est à revoir (structure, gestion fin paragraphe, majuscules ou pas...) l'essentiel est dans la dernière boucle Do...
 

Reply

Marsh Posté le 09-06-2005 à 19:08:14    

Donc si je comprend bien la vérité ( est alleuirs :d )se trouve dans cette portion de code ?


 'cherche un index aléatoire dispo ds la dim du tableau
    Do
        MyValue = Int((UBound(MonTabl, 1) * Rnd))
    Loop While MonTabl(MyValue) <> ""
    MonTabl(MyValue) = MonItem
 


Bon bah y a plus qu'à....
Merci. :jap:


Message édité par amsterdam le 09-06-2005 à 19:09:29
Reply

Marsh Posté le 09-06-2005 à 19:21:16    

Yes, conjointement avec l'init Randomize.

Reply

Marsh Posté le 09-06-2005 à 21:45:30    

Ok.
Sinon j'ai fait ceci en m'inspirant d'un truc trouvé sur un autre site et
à priori ça fonctionne.


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


Reste quand même à changer le nom des variables :lol: .
Merci à vous deux et rendez-vous à mon prochain bloquage. :sol:

Reply

Sujets relatifs:

Leave a Replay

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