[Probleme] Visual basic - tableaux

Statut
N'est pas ouverte pour d'autres réponses.

Tarnak

Elite
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.
 

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)
 

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.
 
1er
OP
Tarnak

Tarnak

Elite
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.
 
1er
OP
Tarnak

Tarnak

Elite
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
 

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
 
1er
OP
Tarnak

Tarnak

Elite
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) :)
 

Bingo

Beer Addict
Tarnak a dit:
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) :)
Bah dans le tri à bulle il n'y a que des boucles et des tableaux simples justement ! :)
 
1er
OP
Tarnak

Tarnak

Elite
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 :)
 

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
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut