TABLEAU DYNAMIQUE EN VB.NET [Résolu]

CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention - 4 sept. 2010 à 17:43 - Dernière réponse : CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
NHenry 14129 Messages postés vendredi 14 mars 2003Date d'inscription 19 avril 2018 Dernière intervention - 4 sept. 2010 à 18:45
+3
Utile
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 


Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention - 4 sept. 2010 à 18:40
0
Utile
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
Commenter la réponse de CGSI3
CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention - 4 sept. 2010 à 18:52
0
Utile
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.
Commenter la réponse de CGSI3
CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention - 4 sept. 2010 à 19:00
0
Utile
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
Commenter la réponse de CGSI3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.