Fonction et Byref [Résolu]

Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
- - Dernière réponse : 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
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
1
0
Merci
Salut rt15

Merci, j'ai compris et ca marche.

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

DD05
Commenter la réponse de DD05