Variable transmis à une fonction modifiée anormalement
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 2013
-
28 août 2007 à 18:06
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
28 août 2007 à 19:05
bonjour à tous
petite bizarrie, est ce normal???
Public Sub AjouteListe(Mot As String, Optional Points As Byte, Optional indav As Byte, Optional nbrelet As Byte, Optional sens As Byte)
NbreSolution = NbreSolution + 1 'comptabilise les solutions
ReDim Preserve Solutions(1 To 5, 1 To NbreSolution)
Solutions(1, NbreSolution) = Mot '1mot
Solutions(2, NbreSolution) = CalculPoint(Mot, indav, sens)
Solutions(3, NbreSolution) = indav 'indice
Solutions(4, NbreSolution) = nbrelet 'nbre let
Solutions(5, NbreSolution) = 1 'sens 1horizon 15 vertical
End Sub
Public Function CalculPoint(Mot As String, ind As Byte, sens As Byte) As Byte
Dim i As Byte
Dim multipli As Byte
Dim Ptlet As Byte, PtMot As Byte, PtMotCroisé As Byte
multipli = 1
For i = 1 To Len(Mot)
Ptlet = tab_point_let(Asc(Mid(Mot, i, 1)))
If sens = 15 Then
PtMotCroisé = PtMotCroisé + (Plateau(ind).Pt_Mot_Av_H) + (Plateau(ind).Pt_Mot_Ap_H)
Else
PtMotCroisé = PtMotCroisé + (Plateau(ind).Pt_Mot_Av_V) + (Plateau(ind).Pt_Mot_Ap_V)
End If
If PtMotCroisé > 0 Then PtMotCroisé = (PtMotCroisé + (Ptlet * Plateau(ind).Bon)) * (Plateau(ind).MotMultipli)
CalculPoint = CalculPoint + PtMotCroisé
PtMotCroisé = 0
multipli = multipli * (Plateau(ind).MotMultipli)
PtMot = PtMot + (Ptlet * Plateau(ind).Bon)
ind = ind + sens
Next i
CalculPoint = (PtMot * multipli)
End Function
la fonction calcul fait évolué l'indice du début de mot jusqu'à la fin du mot
donc une fois le calcul effectué l'indav est augmenté de 5 par exemple ce qui modifie la valeur de solution(3,nbresolution) qui récupère la dernière valeur de l'ind calculé la fonction calcul, alors que normalement la fonction calcul ne renvois pas l'indice mais un nbre de points, deplus si j'ai bien compris par défaut c'est Byref qui est employé donc pas de modification de la valeur de la variable d'origine!!
merci pour vos éclairement
A voir également:
Variable transmis à une fonction modifiée anormalement
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 28 août 2007 à 19:05
lol c'est tout le contraire : ByRef = par référence => pointeur envoyé à la fonction qui en profite pour modifier directement la variable !
C'est pour cà qu'il est toujours dangeureux de ne pas préciser comment on veut passer les paramètres : ByVal (pas de modif) ou ByRef (modif des variables !).