Fonction et Byref

Résolu
DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 - 29 nov. 2007 à 15:02
DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 - 29 nov. 2007 à 19:52
Bonjour,

J'ai trouvé ce code sur ce site écrit par by Lover. Il est très bien fait pour ce que je désire faire. Merci à by Lover.
La fonction Add permet de réaliser la somme ou la soustraction de deux matrices carrées.
Donc en argument d'entrée, j'ai les matrices M1 et M2 puis le boolean indiquant s'il s'agit d'une somme ou soustraction.

Comment appeller la fonction Add dans mon programme ?
Mon problème est que je n'arrive pas à trouver les arguments à mettre entre parenthèse de Add ( ) lorsque je l'appel.
Merci.

DD05

M1         M2
|1 2|      |3 4|
|7 5|      |2 9|

La somme de M1 + M2 donne :
|4   6| 
|9 14|    

Public Function Add(ByRef M1() As Double, ByRef M2() As Double, _
                    Optional ByVal Addition As Boolean = True) As Double()
Dim Resultat() As Double
Dim i As Integer, j As Integer
Dim n1 As Integer, n2 As Integer


    ' Opération possible ?
    n1 = UBound(M1, 1)
    n2 = UBound(M1, 2)
    If n1 <> UBound(M2, 1) Or n2 <> UBound(M2, 2) Then Exit Function


    ReDim Resultat(n1, n2)
   
    ' Resultat(ij) = M1(ij) +- M2 (ij)
    For i = 1 To n1
        For j = 1 To n2
            If Addition Then
                Resultat(i, j) = M1(i, j) + M2(i, j)
            Else
                Resultat(i, j) = M1(i, j) - M2(i, j)
            End If
        Next
    Next


    Add = Resultat
   
End Function

2 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
29 nov. 2007 à 17:57
Salut,


C'est du VB6. Tu aurais dû poster sur vbfrance.


ByRef, ça veut dire que tu passe les arguments par référence. C'est ce
qui se passe par défaut quand on ne met pas ByRef (Donc ByRef ne sert
qu'à être plus clair...). On peut mettre ByVal à la place de ByRef pour
faire passer les arguements par valeur. Plus d'infos ici.


J'aime pas trop le code ci-dessus rapport à la façon dont il gère la
borne inférieure... Rien ne dit que les matrices sont indexées à partir
de 1. Il aurait pu utiliser LBound. Mais passons. En plus j'oublie
toujours si ça commence à 0 ou à 1 par défaut en VB6. En plus y a une
option qui permet de changer le comportement... Je divague beaucoup là.


Alors pour utiliser ton code, tu dois faire des matrice, autrement dit
des tableaux multidimensionnels. L'aide de la msdn sur le sujet est ici. M(i,j), on peut par exemple dire que c'est le coef de la ième ligne, jème colonne.


' Je met des To pour préciser la borne inférieur sans m'occuper des valeurs par défaut et autres options.

Dim M1 As Double(1 To 2, 1 To 2)

Dim M2 As Double(1 To 2, 1 To 2)

Dim M3 As Double()


M1(1,1)=1

M1(1,2)=2

M1(2,1)=7

M1(2,2)=5


Pareil pour M2.

Puis tu appel ta fonction :

M3 = Add(M1, M2)

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
3
DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 1
29 nov. 2007 à 19:52
Salut rt15

Merci, j'ai compris et ca marche.

Sinon, tu as raison, les matrices démarrent à 0 en VB6

DD05
0
Rejoignez-nous