Boucle avec VB
Bonjour,
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
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
71 réponses
Résumé de la discussion
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.
-
Bonjour,
Tu veux l'algo ? c'est ça ? -
Bonjour, Polux
Oui je veux l'algo, Merci -
salut,
Je ne suis pas là pour faire les exercices ... je suis là pour aider sur tel ou tel point d'algo ou code. Désolé -
Bonjour,
Je sais, mais je peux te donner mon algo si tu veux ? -
ok fais passer ...
-
CODE :
'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 -
Voiçi le code .... au forum
-
Oui ce que je cherche
-
Non...
Je veux renvoyer les chiffres pairs dans la troisième liste, comment ça ? -
regarde ton code :
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 -
si tu initialises 'trouver' dans ta bloucle, tu vides les éléments de : trouver = trouver & " " & j & "," . Il faut initialiser 'trouver' en dehors de la boucle.
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 -
cad l'erreur ici
If i = B.List(j) Then
trouver = trouver & " " & j & ","
End If -
Oui 'trouver' est un string ... tu dois trier des integer ...
-
aider moi car rien ne ca marche, merci
-
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
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 ? -
J'ai esssayé comme ça :
Dim trouve As String trouve = "" i = 1 j = 0 Do While i < 10 Do While j < 4 If i = B.List(j) Then trouve = trouve & "" & i '(LE PROBLEME EST LA ???????????) End If j = j + 1 Loop i = i + 1 If i = 10 Then C.AddItem trouve Loop-
Allez ...
Voici que quoi t'aider à mieux comprendre :
Sub test() '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, Dim i, j, k As Integer Dim trouver As String Dim bFind As Boolean Dim b(4) As Integer i = 0 j = 1 b(0) = 1 b(1) = 3 b(2) = 5 b(3) = 7 b(4) = 9 bFind = True Do While i < 5 'je scanne le 2eme tableau Do While j < 11 ' je scanne le 1er tableau If b(i) = j Then Exit Do End If k = j bFind = False j = j + 1 Loop If bFind = False Then 'rien trouver => ecrit 3eme tableau MsgBox k 'c.AddItem k End If j = 1 'reinit le compteur du 1er tableau bFind = True i = i + 1 'on regarde la prochaine occurs du 2nd tableau Loop End Sub
-
-
Oui le problème est bien là ... mais également dans tes boucles ... lorsque que tu fais ta boucle do while j < 4, tu incrémentes j (j = j + 1), quand ta boucle est finie, tu fais : i = i + 1 mais j reste à 4, donc tu ne repasses plus dans la boucle ...
-
Peux tu me dire de quel type d'objet sont A, B et C ?
- 1
- 2
- 3
- 4
Suivant