Procedure
Re: Procedure
en effet ! :p faut pas m'en vouloir j'ai parfois du mal :p
Re: Procedure
en faite encore une tite question si vous me le permettez ! :p
es ce possible de lire les valeur d'un tableau externe à la procédure dans la procédure ? en sachant que mon tableau est déclaré dans un autre fichier .pbi que j'include au début avant les procédures... je sais pas si j'ai été assé clair ! :p
es ce possible de lire les valeur d'un tableau externe à la procédure dans la procédure ? en sachant que mon tableau est déclaré dans un autre fichier .pbi que j'include au début avant les procédures... je sais pas si j'ai été assé clair ! :p
Re: Procedure
Il suffit de déclarer ton tableau en global.
++
++
Re: Procedure
ou bien d'utiliser l'exemple que tu as toi meme trouvé dans la doc
passer un tableau en parametre d'une procedure :
en utilisant le mot 'Array'
passer un tableau en parametre d'une procedure :
en utilisant le mot 'Array'
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)
Re: Procedure
Ah oui c'est vrai qu'on peut faire ça maintenant. Je n'ai pas programmé beaucoup en PB depuis ces évolutions qui sont très pratiques !
Re: Procedure
je sais pas si c'est du au faite que les tableaux soit dans un inclde mais en param ça ne passait pas justement... je vais ressayé j'ai du faire une erreur
merci sinon je testerai en global
merci sinon je testerai en global
Re: Procedure
Bonjour Dobro et Bravo pour avoir trouvé la possibilité d'utiliser un tableau en externe et en interne d'une procédure
Mais le prg suivant montre que l'adresse de titi() a changé et que l'on peut revenir au tableau d'origine Prg principal
ou au tableau créé dans la procédure au choix de la programmation
Une seule variable pour deux espaces mémoire encore bravo pour avoir découvert cette possibilité
A+
Mais le prg suivant montre que l'adresse de titi() a changé et que l'on peut revenir au tableau d'origine Prg principal
ou au tableau créé dans la procédure au choix de la programmation
Une seule variable pour deux espaces mémoire encore bravo pour avoir découvert cette possibilité
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
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Re: Procedure
.............
Dernière modification par Backup le sam. 01/oct./2011 11:56, modifié 1 fois.
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: Procedure
Salut.
Ce type de conversation a aussi été évoquée ici.
Cela fonctionne bien si la taille des tableaux est bonne.
A la rigueur le tableau externe (Celui dans lequel on copie) peut-être supérieur, mais pas le contraire sinon de toute façon le compilo renvoie "Array index out of bounds"
Bref technique dangereuse mais fonctionnelle
.
Bye.
[EDIT]Je m'auto-cite : "A la rigueur le tableau externe (Celui dans lequel on copie) peut-être supérieur."
J'ai un doute puisqu'en faisant :Je n'obtiens plus 25.
Autre exemple : avec ce petit code, cela fonctionne :
Mais si j'augmente la valeur du tableau externe et en dessous la boucle qui va avec, j'ai un message d'erreur.
C'est peut-être moi qui me suis planté.
Donc cela reviendrait à dire qu'il faut que les tableaux soient RIGOUREUSEMENT identiques.
Ce type de conversation a aussi été évoquée ici.
Cela fonctionne bien si la taille des tableaux est bonne.
A la rigueur le tableau externe (Celui dans lequel on copie) peut-être supérieur, mais pas le contraire sinon de toute façon le compilo renvoie "Array index out of bounds"
Bref technique dangereuse mais fonctionnelle

Bye.
[EDIT]Je m'auto-cite : "A la rigueur le tableau externe (Celui dans lequel on copie) peut-être supérieur."
J'ai un doute puisqu'en faisant :
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 !
Autre exemple : avec ce petit code, cela fonctionne :
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)
C'est peut-être moi qui me suis planté.
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)
Re: Procedure
Geo Trouvpatou a écrit : Donc cela reviendrait à dire qu'il faut que les tableaux soient RIGOUREUSEMENT identiques.


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é

encore que Redim() devrai fonctionner pour un tableau 1 dimension

-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: Procedure
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é
Mais là, ça devient assez dangereux et ça ressemble plus à du boubliboulga qu'à de la prog.
Re: Procedure
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.
le but est de ressortir un tableau d'une procédure ... point !
si après tu veux changer le tableau pour augmenter sa taille , c'est un autre problème
mais qui n'as rien a voir avec le fait de récupérer un tableau d'une procédure ...
faut pas tout confondre ...

tu aura ce problème de changement de taille avec n'importe quel tableau !
le fait qu'il provienne d'une procédure, n'as rien a voir ..