Re: Procedure
Publié : jeu. 29/avr./2010 11:16
en effet ! :p faut pas m'en vouloir j'ai parfois du mal :p
Code : Tout sélectionner
Procedure fill(Array A.l(1), longueur) ; Le 1 représente le nombre de dimensions du tableau
For i = 0 To longueur
A(i) = i
Next i
EndProcedure
Dim A.l(10)
fill(A(), 10) ; Le tableau A() est passé en paramètre
Debug A(5)
Debug A(10)
Code : Tout sélectionner
Procedure tonton(a,b)
Dim titi(10,10)
For y=1 To 10
For x=1 To 10
titi(x,y)=x*y
Next x
Next y
ProcedureReturn @titi() ; en fait on retourne l'adresse du tableau local a la procedure
EndProcedure
Dim titi(10,10) ; on creer un tableau externe qui va recevoir le tableau interne
; Non ce tableau ne reçoit rien la mèmoire est toujours disponible Il y a substitution d'adresse mais si l'on sauve l'adresse
; d'origine on retrouve sous le même nom de variable la table d'origine
; Voir le démo suivante
; Chargement de la première table titi
For l=0 To 10
For c=0 To 10
titi(l,c)=(l+10)*C
Next
Next
AD_TITI_M=@titi()
titi()=tonton(a,b) ; on recupere le contenu du tableau de la proc
ad_titi_p=@titi()
Debug "adresse titi Prg Principal ="+Str(ad_titi_m)
Debug "adresse titi Procédure ="+Str(ad_titi_p)
Debug "Val titi(5,5) Procédure="+Str(titi(5,5)) ; affiche 25 car 5*5=25 meme que !
titi()=ad_titi_m
Debug "Val titi(5,5) Prg principal="+Str(titi(5,5)) ; affiche 75 car (5+10)*5= 75
titi()=ad_titi_p
Debug "Val titi(5,5) Procédure="+Str(titi(5,5)) ; affiche 25 car 5*5=25 meme que !
; On peut passer sous la même variable d'un espace mémoire à un autre s'ils ont la même structure
Code : Tout sélectionner
EnableExplicit
Procedure tonton(a,b)
Protected x.i, y.i
Dim titi(10,10)
For y=1 To 10
For x=1 To 10
titi(x,y)=x*y
Next x
Next y
ProcedureReturn @titi() ; en fait on retourne l'adresse du tableau local a la procedure
EndProcedure
Global a.i, b.i
Dim titi(14,14) ; on creer un tableau externe qui va recevoir le tableau interne
titi()=tonton(a,b) ; on recupere le contenu du tableau de la proc
Debug titi(5,5) ; affiche 25 car 5*5=25 meme que !
Code : Tout sélectionner
EnableExplicit
Procedure tonton(a)
Protected x.i
Dim titi(5)
For x=1 To 5
titi(x)=x
Next x
ProcedureReturn @titi() ; en fait on retourne l'adresse du tableau local a la procedure
EndProcedure
Global a.i, i.i
Debug tonton(a)
Dim titi(5) ; on creer un tableau externe qui va recevoir le tableau interne
titi()=tonton(a) ; on recupere le contenu du tableau de la proc
Debug "-----"
Debug titi()
Debug tonton(a)
Debug "-----"
Debug ""
Debug "-----"
For i= 0 To 5
Debug str(@titi(i)) +" = "+ str(PeekI(@titi() + (i*SizeOf(integer))))
Next i
Debug "-----"
Debug ""
;Debug titi(4)
Code : Tout sélectionner
EnableExplicit
Procedure tonton(a)
Protected x.i
Dim titi(5)
For x=1 To 5
titi(x)=x
Next x
ProcedureReturn @titi() ; en fait on retourne l'adresse du tableau local a la procedure
EndProcedure
Global a.i, i.i
Debug tonton(a)
Dim titi(10) ; <-- On met 10
titi()=tonton(a) ; on recupere le contenu du tableau de la proc
Debug "-----"
Debug titi()
Debug tonton(a)
Debug "-----"
Debug ""
Debug "-----"
For i= 0 To 10 ; <-- On met 10
Debug str(@titi(i)) +" = "+ str(PeekI(@titi() + (i*SizeOf(integer))))
Next i
Debug "-----"
Debug ""
;Debug titi(4)
Geo Trouvpatou a écrit : Donc cela reviendrait à dire qu'il faut que les tableaux soient RIGOUREUSEMENT identiques.
Bah pourquoi pas, si le but était de récupérer les valeurs d'un tableau pour les mettre dans un plus grand pour ensuite y ajouter d'autres choses.Dobro a écrit :Geo Trouvpatou a écrit : Donc cela reviendrait à dire qu'il faut que les tableaux soient RIGOUREUSEMENT identiques.c'te bonne blague , il ne me serai meme pas venu a l'idée de faire un tableau diffèrent
le but etant de récuperer un tableau , vouloir changer sa structure en cours de route est un vice
que mon cerveau n'aurai jamais accepté
je ne suis pas d'accord ! ; rien de "dangereux" la dedansGeo Trouvpatou a écrit : Bah pourquoi pas, si le but était de récupérer les valeurs d'un tableau pour les mettre dans un plus grand pour ensuite y ajouter d'autres choses.
Mais là, ça devient assez dangereux et ça ressemble plus à du boubliboulga qu'à de la prog.