TABLEAU DYNAMIQUE EN VB.NET

Résolu
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - 4 sept. 2010 à 17:43
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - 4 sept. 2010 à 19:00
Bonjour a tous,
Je souhaite faire un module sous vb.net qui s'applique a des tableaux
dynamiques, seulement je dois éviter de déclarer en system.array les
variables de la sub transposer pour éviter d'avoir une erreur !
Est ce Normal ?
Et existe t'il un moyen de retourner un tableau dynamique dans une fonction genre:
Function Transposer(ByRef Matrice) () as single



Dim Matrice1(5, 5) As Single
Dim Matrice2 As System.Array = Nothing
'Initialisation de la matrice par des valeurs ordonnées (0123...)
Dim cp1 As Long, cp2 As Long
For cp1 = Matrice1.GetLowerBound(0) To Matrice1.GetUpperBound(0) - 1
For cp2 = Matrice1.GetLowerBound(1) To Matrice1.GetUpperBound(1) - 1
Matrice1(cp1, cp2) = cp1 * 10 + cp2
Next cp2
Next cp1
'Transposition de la matrice
Transposer(Matrice1, Matrice2)


Sub Transposer(ByRef Matrice, ByRef MatriceRetour)
Dim cp1 As Long, cp2 As Long, Max1 As Long, Max2 As Long
Max1 = Matrice.GetUpperBound(0) - 1
Max2 = Matrice.GetUpperBound(1) - 1
ReDim MatriceRetour(Max1, Max2)
For cp1 = 0 To Max1
For cp2 = 0 To Max2
MatriceRetour(cp1, cp2) = Matrice(cp2, cp1)
Next cp2
Next cp1
End Sub

4 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
4 sept. 2010 à 18:45
Bonjour,

1) Tu n'as pas activer Option Strict, donc ce n'est pas terrible

Voila une proposition d'implémentation (non testée)
Dim Matrice1(5, 5) As Single
Dim Matrice2(,) As single
'Initialisation de la matrice par des valeurs ordonnées (0123...)
For cp1  As Long = Matrice1.GetLowerBound(0) To Matrice1.GetUpperBound(0) - 1
For cp2  As Long = Matrice1.GetLowerBound(1) To Matrice1.GetUpperBound(1) - 1
Matrice1(cp1, cp2) = cp1 * 10 + cp2
Next cp2
Next cp1
'Transposition de la matrice
Matrice2 = Transposer(Matrice1)


Function Transposer(ByRef Matrice as Single(,)) as Single(,)
Dim ltTab as Single(,)
Dim  Max1 As Long, Max2 As Long
Max1 = Matrice.GetUpperBound(0) - 1
Max2 = Matrice.GetUpperBound(1) - 1
ReDim ltTab(Max1, Max2)
For cp1 As Long = 0 To Max1
For cp2 As Long = 0 To Max2
ltTab(cp1, cp2) = Matrice(cp2, cp1)
Next cp2
Next cp1
return ltTab
End Sub 


3
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
4 sept. 2010 à 18:40
J'ai corrigé quelques erreurs ....

Dim Matrice1(5, 5) As Single
Dim Matrice2 As System.Array = Nothing

Dim cp1 As Long, cp2 As Long
For cp1 = 0 To Matrice1.GetUpperBound(0)
For cp2 = 0 To Matrice1.GetUpperBound(1)
Matrice1(cp1, cp2) = cp1 * 10 + cp2
Next cp2
Next cp1
Transposer(Matrice1, Matrice2)


Sub Transposer(ByRef Matrice, ByRef MatriceRetour)
Dim cp1 As Long, cp2 As Long, Max1 As Long, Max2 As Long
Max1 = Matrice.GetUpperBound(0)
Max2 = Matrice.GetUpperBound(1)
ReDim MatriceRetour(Max2, Max1)
For cp1 = 0 To Max1
For cp2 = 0 To Max2
MatriceRetour(cp2, cp1) = Matrice(cp1, cp2)
Next cp2
Next cp1
End Sub

Cette version marche bien mais Si je fais ceci dans "Sub transposer":
ReDim MatriceRetour(Max2, Max1) as single
J'obtiens: Erreur 1 Les instructions 'ReDim' ne peuvent plus être utilisées pour déclarer des variables tableau.

Quelqu'un peut me donner une explication ?
Merci d'avance, CGSI3
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
4 sept. 2010 à 18:52
Autre chose:
Si je modifie la 2 eme ligne en
Dim Matrice2() As Single
j'obtiens cette erreur a cette ligne
Transposer(Matrice1, Matrice2)

Détail: Impossible d'effectuer un cast d'un objet de type 'System.Object[,]' en type 'System.Single[]'.

Tout ceci est curieux, plus je veux détailler mes tableaux et plus j'ai d'erreur, ceci oblige vb.net a reconnaitre le format de la matrice d'entrée ce qui n'est surement pas top en terme de velocité.
Merci d'avance pour votre aide.
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
4 sept. 2010 à 19:00
Merci beaucoup NHenry,
tu me sauve ma soirée, et cela simplifie tous mes problèmes ...
(déclaration, velocité, fonction etc ...)
Bonne soirée et que la force soit avec toi ...
CGSI3
0
Rejoignez-nous