[Probleme] Visual basic - tableaux

Discussion dans 'Web, design' créé par Tarnak, 28 Juin 2006.

Statut de la discussion:
Fermée.
  1. Offline
    Tarnak »Tarnakeur«
    Salut. Je suis totallement débutant en VB et je calle sur les tableaux. En fait il faut juste trier par ordre croissant un tableau de 10 nombres (entré par l'utilisateur ou aléatoire, n'importe) grace à un autre tableau.

    Niveau organigramme j'y arrive, mais c'est juste le codage qui me fait défaut :-( Je bloque dessus depuis hier matin et j'aimerais avoir la solution pour pouvoir mieux comprendre les tableaux.

    Merci de votre aide.
    Tarnak, 28 Juin 2006
    #1
  2. Offline
    PLoPLi Geek
    Tu trouveras certainement ton bonheur quelque part par ici.

    Les exemples sont en C mais ce devrait pas être trop compliqué de transformer (deux boucles 'for' imbriquées et une comparaison 'if' pour le tri à bulle)
    PLoPLi, 28 Juin 2006
    #2
  3. Offline
    Bingo Beer Addict
    En VB c'est pourtant très simple les tableaux.
    Si tu donnes ton algorithme et qu'il ne fait pas 100 lignes, je veux bien t'expliquer comment le transformer en VB.
    Bingo, 29 Juin 2006
    #3
  4. Offline
    Tarnak »Tarnakeur«
    En fait non, mon algorithme est faux :/

    En francais, je regarderais le premier, je le compererais aux autres et si il est le plus petit je le fais passer dans l'autre tableau en premiere place. Sinon je prend le 2eme et ainsi de suite.
    Tarnak, 29 Juin 2006
    #4
  5. Offline
    Tarnak »Tarnakeur«
    Un truc dans se genre la (sans l'essentiel)



    Sub main()

    Dim a, i, j As Integer
    Dim tableA(1 To 10)
    Dim tableB(1 To 10)

    For i = 1 To 10
    tableA(i) = InputBox("entrez un nombre")
    Next i

    For i = 1 To 10
    a=i
    For j = 2 To 10
    If tableA(i) >= tableA(j) Then
    -->Si le 1er est plus grand que le 2eme<--
    -->Alors on ajoute 1 à i<--
    -->Sinon on passe à j+1<--
    End If
    Next j
    i=a
    tableB(i) = tableA(i)
    Next i


    For i = 1 To 10
    MsgBox (CStr(tableB(i)))
    Next i

    End Sub
    Tarnak, 29 Juin 2006
    #5
  6. Offline
    Bingo Beer Addict
    Je te conseille plutôt un tri à bulle effectivement. Tu n'as pas besoin d'un second tableau pour le réaliser. C'est probablement le tri le plus simple à mettre en oeuvre.
    Le principe est simple : tu parcours le tableau du premier à l'avant dernier indice. Si la valeur sur laquelle tu te trouves est supérieure à celle qui la suit, tu permutes les places des deux valeurs. Tu lors d'un parcours tu as permutté deux valeurs, ton tableau n'était pas trié donc tu recommences, jusqu'à ce que tu fasses un parcours sans permuter de valeurs.

    Ca donnerait un truc du style :

    Function TriABulle(ByRef lngTableau() As Long) As Long()
    Dim blnTriTermine As Boolean
    Dim I As Long
    Dim lngTemp As Long

    blnTriTermine = False

    Do While Not blnTriTermine
    blnTriTermine = True
    For I = LBound(lngTableau) To (UBound(lngTableau) - 1)
    If lngTableau(I) > lngTableau(I + 1) Then
    blnTriTermine = False
    lngTemp = lngTableau(I)
    lngTableau(I) = lngTableau(I + 1)
    lngTableau(I + 1) = lngTemp
    End If
    Next I
    Loop

    TriABulle = lngTableau
    End Function
    Bingo, 30 Juin 2006
    #6
  7. Offline
    Tarnak »Tarnakeur«
    C'est surement plus simple, mais ce que je dois faire ce sont des exercices pour tout faire en VB et la j'en suis aux boucles et tableaux simple (j'ai encore rien vu d'autre) :)
    Tarnak, 30 Juin 2006
    #7
  8. Offline
    Bingo Beer Addict
    Bah dans le tri à bulle il n'y a que des boucles et des tableaux simples justement ! :)
    Bingo, 30 Juin 2006
    #8
  9. Offline
    Tarnak »Tarnakeur«
    En fait c'est un ex pour utiliser une boucle imbriqué dans une autre. Et puis je pige pas trop la fonction et les ubound lbound.

    Tu pourrais m'aider a résoudre ce que j'ai déja commencé stp? Ca me serais d'un grand secours :)
    Tarnak, 30 Juin 2006
    #9
  10. Offline
    Bingo Beer Addict
    UBound renvoie l'indice maximum d'un tableau et LBound l'indice minimum.
    En utilisant ça, une boucle fonctionne avec tous les tableaux, même si ils ne commencent pas à zéro.

    Sinon, comme tu le disais ton algorithme est faux, ou alors je ne comprends pas ce que tu veux faire. Je veux bien le traduire en VB mais tu dois le corriger.
    Tu peux faire un truc du style :
    -trouver le plus petit élément
    -le mettre dans la première valeur du deuxième tableau
    -ensuite pour chaque élément restant dans le deuxième tableau, rechercher la plus petite valeur supérieure à l'élément précédent.

    Remarques :
    - Dim a As long , i As long , j As long (en VB, si tu déclares plusieurs variables en même temps, tu dosi préciser le type pour chaque. tu ne peux pas juste le préciser à la fin de la ligne)

    - Dim tableA(1 To 10) as long ( tes tableaux aussi tu dois définir leur type)
    Dim tableB(1 To 10) as long
    Bingo, 30 Juin 2006
    #10
Statut de la discussion:
Fermée.