Boucle avec VB
Polux31 Messages postés 7219 Statut Membre -
Avec VB6 comment je peux résoudre le problème suivant : trois listes A,B et C la liste A comprend des réels de 1 à 10 (incrémentation) et la liste B comrend les réels suivants (2,3,6,9) , comment renvoyer les éléments dans la liste C les éléments manuquants c-a-d (1,4,5,7,8 et 10) Merci
Configuration: Windows 2000 Internet Explorer 6.0
- Boucle avec VB
- Langage vb - Télécharger - Langages
- Vlc lecture en boucle ✓ - Forum Lecteurs et supports vidéo
- Comment lire en boucle une music sur VLC - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Vb runtime - Télécharger - Divers Utilitaires
71 réponses
- 1
- 2
- 3
- 4
Le problème consiste à déterminer, en VB6, les éléments de A qui ne figurent pas dans B et les transférer dans C, comme dans l’exemple où A contient 1 à 10 et B contient 2,3,6,9. Une solution consiste à utiliser deux boucles : parcourir A puis, pour chaque élément, comparer avec B et, si absent, l’ajouter à C. Des échanges suggèrent aussi d’éviter les chaînes et de déclarer A et B comme tableaux numériques (Integer) et de bien initialiser les index afin d’éviter les erreurs. En cas d’ordre différent entre A et B ou de nécessité de meilleures performances, une approche robuste peut consister à trier A puis réaliser la différence avec B, ou à utiliser des structures associatives.
Ensuite A et B sont de tableaux initialisés. Il faut les déclarer:
Dim tabA(10) As Integer
Dim tabB(5) As Integer
tabA(1) = 1
tabA(2) = 2
etc ...
idem pour tabB
Ensuite J reste initialisé à 4 donc tu ne testes qu'une seule fois dans ta boucle. Il faut donc l'initialiser en dehors de la seconde boucle.
Tu testes des entiers (Integer), donc les valeurs qui doivent être dans le tableau C doivent aussi être des entiers et non une chaîne de caractères (String).
Mais l'idée générale est bonne, creuses un peu plus, tu n'es pas loin du résultat. Aides toi de ce que dit Shaboo
Bon courage ...
;o)
Polux
;o)
Polux
PS: il existe une solution à ton algo plus simple ... mais là aussi, il n'y a pas de bonnes ou mauvaises solutions, il n'y a que des solutions pertinentes : celles qui répondent au cahier des charges ...
Bonne continuation et bon courage
Je vais faire une exception lol ... voilà comment je procède :
Dim i As Integer
Dim j As Integer
For i = 0 To Me.A.ListCount - 2 ' - 2 pour exclure le 10
If Me.A.List(i) <> Me.B.List(j) Then
Me.C.AddItem Me.A.List(i)
j = j + 1
End If
Next i
Shaboo, je ne dis pas que ma solution est plus pertinente, ni meilleure que la tienne, c'est une solution parmi d'autres. Ta proposition est bonne aussi puisqu'elle répond au besoin exprimé ... je regrette seulement que ça ne soit pas nagnag qui l'ai trouvé, c'est tout... et en lui disant qu'il existait une solution plus simple, je voulai l'inciter à chercher encore un peu. Mais c'est mon jour de bonté ... lol
;o)
Polux
Tu veux dire que tu veux récuperer les numéros manquants dans un listBox et ensuite faire des insert dans la table de ta base de données ? Si c'est le cas, pourquoi ne pas le faire en même temps que ton tri ? il suffit de faire la fonction qui va bien pour ça...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe ne suis pas là pour faire les exercices ... je suis là pour aider sur tel ou tel point d'algo ou code. Désolé
'La liste A contient 1,2,3,4,5,6,7,8,9,10
'La liste B contient 1,3,5,7,9
'Je veux renvoyer les chiffres 2,4,6,8 dans la liste C,
'Début du code
Dim i, j As Integer
Dim trouver As String
i = 1
j = 0
Do While i < 10
trouver = ""
Do While j < 4 'puisque 5 éléments dans la liste
If i = B.List(j) Then
trouver = trouver & " " & j & ","
End If
j = j + 1
Loop
i = i + 1
If i = 10 Then c.AddItem trouver
Loop
If i = B.List(j) Then
trouver = trouver & " " & j & ","
End If
je le fais tourner
i = 1 B.List(0) = 1 => OK => tu concatenes => trouver = 0
i = 1 B.List(1) = 3 => pas OK
i = 1 B.List(2) = 5 => pas OK
i = 1 B.List(3) = 7 => pas OK
i = 1 B.List(4) = 9 => pas OK
i = 2 B.List(0) = 1 => pas OK
i = 2 B.List(1) = 3 => pas OK
i = 2 B.List(2) = 5 => pas OK
i = 2 B.List(3) = 7 => pas OK
i = 2 B.List(4) = 9 => pas OK
i = 3 B.List(0) = 1 => pas OK
i = 3 B.List(1) = 3 => OK => tu concatenes => trouver = 0,1
i = 3 B.List(2) = 5 => pas OK
i = 3 B.List(3) = 7 => pas OK
i = 3 B.List(4) = 9 => pas OK
...
et en plus je m'apperçois que tu n'auras pas les bon elements
j = 0
Do While i < 10
Do While j < 4
If i = B.List(j) Then
Exit Do
Else
C.AddItem j
End If
j = j + 1
Loop
i = i + 1
Loop
NB: Je veux renvoyer 2,4,6,8 et 10 (sachant que la 1ere liste contient 1...10 et la 2ème 1,3,5,7,9
i = 1 j = 0 Do While i < 10 Do While j < 4 If i = B.List(j) Then Exit Do Else C.AddItem j End If j = j + 1 Loop i = i + 1 Loop
If i = B.List(j) Then Exit Do Else C.AddItem j End If
Ok ...
On reprend.
je le fais tourner avec ton code
i = 1 B.List(0) = 1 => tu ne vas pas plus loin grace au Exit Do
i = 2 B.List(0) = 1 => tu ajoutes 0 à ta 3eme liste
i = 2 B.List(1) = 2 => tu ne vas pas plus loin grace au Exit Do
i = 3 B.List(0) = 1 => tu ajoutes 0 à ta 3eme liste
i = 3 B.List(1) = 2 => tu ajoutes 1 à ta 3eme liste
i = 3 B.List(1) = 3 => tu ne vas pas plus loin grace au Exit Do
etc, etc , ...
Vois tu d'ou viens le pb ?
- 1
- 2
- 3
- 4