Boucle avec VB

NagNag -  
Polux31 Messages postés 7219 Statut Membre -
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
Configuration: Windows 2000
Internet Explorer 6.0

71 réponses

  • 1
  • 2
  • 3
  • 4
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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
    1
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Ce n'est pas rendre service que de faire les exercices à la place des autres, pour bien programmer il faut bien comprendre et la seule façon que je connaisse c'est de trouver soit même la solution ... surtout pour l'algo ... pour le code, c'est un peu différent, il est difficile de connaitre toutes les subtilités d'un langage. Mais ne te décourage pas, on est tous passé par là ...

    ;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
    1
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      lol ...

      je veux bien voir la solution pertinente en MP stp ;p
      0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Désolé Shaboo si tu l'as mal pris, mais je ne disais pas ça pour toi ... je voulais simplement expliquer à nagnag que l'important c'était d'obtenir le résultat attendu, peu importe la manière dans un premier temps. Après effectivement on peut optimiser le code pour gagner en rapidité d'exécution.

    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
    1
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      wow ... pas mal ...

      j'avais cette solution là en tete aussi ... ;p
      0
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour, je vais merci ...

    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...
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Tu veux l'algo ? c'est ça ?
    0
  7. nagnag
     
    Bonjour, Polux
    Oui je veux l'algo, Merci
    0
  8. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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é
    0
  9. nagnag
     
    Bonjour,
    Je sais, mais je peux te donner mon algo si tu veux ?
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      Envoie ...

      Tu dois utiliser 2 boucles :

      l'une pour ta 1ere liste, l'autre pour ta 2nde liste :

      tu scannes la 1ere et tu compares avec la 2eme => si l'occurence de la 1ere liste est dans la 2eme OK, sinon tu inseres dans la 3eme.
      0
  10. Polux31 Messages postés 7219 Statut Membre 1 204
     
    ok fais passer ...
    0
  11. nagnag
     
    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
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      Pas mal ...

      Mais avec cette instruction :

      If i = 10 Then c.AddItem trouver


      tu ne vas insérer qu'une seule ligne dans ta 3eme liste. Elle est la concatenation des valeurs trouvés dans la comparaison entre ta 1ere liste et ta 2eme liste.

      C'est ce que tu recherches ?
      0
  12. nagnag
     
    Oui ce que je cherche
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      Ok ...

      Mais je pense que ta 3eme liste ressemblera à ta 2eme liste ;p
      0
  13. nagnag
     
    Non...
    Je veux renvoyer les chiffres pairs dans la troisième liste, comment ça ?
    0
  14. ShaBoo Messages postés 406 Statut Membre 50
     
    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
    0
  15. nagnag
     
    cad l'erreur ici
    If i = B.List(j) Then
    trouver = trouver & " " & j & ","
    End If
    0
  16. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Oui 'trouver' est un string ... tu dois trier des integer ...
    0
  17. nagnag
     
    aider moi car rien ne ca marche, merci
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      mets ton code stp
      0
    2. ShaBoo Messages postés 406 Statut Membre 50
       
      mets ton code avec les balises code stp
      0
  18. nagnag
     
    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
    0
  19. nagnag
     
    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 
    
    0
  20. ShaBoo Messages postés 406 Statut Membre 50
     
    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 ?
    0
  • 1
  • 2
  • 3
  • 4