Passer un array en parametre

MasterJ Messages postés 37 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 13 août 2002 - 10 juil. 2002 à 20:55
garnotte Messages postés 14 Date d'inscription mardi 29 janvier 2002 Statut Membre Dernière intervention 18 février 2016 - 11 juil. 2002 à 01:34
Salut tt le monde,

Est-il possible de passer un tableau en parametre a une fonction????

merci
@later
Jeff
A voir également:

5 réponses

garnotte Messages postés 14 Date d'inscription mardi 29 janvier 2002 Statut Membre Dernière intervention 18 février 2016 1
10 juil. 2002 à 21:14
Bien sûr. Il est très important de se rappeler que l'index du tableau ainsi passé en paramètre débutera à 0, peu importe l'index de base que tu auras utilisé pour définir ton tableau. Donc, si tu as un tableau

tabl : array[1..10] of char

et que tu le passe en paramètre à une fonction

fctDemandantArray( tabl );

dans la fonction fctDemandantArray, l'index du tableau tabl débutera à 0.

Aussi, au moment de la déclaration de la fonction, tu ne peux pas définir de dimensions à ton tableau. Il faut donc que tu fasses très attention de ne pas déborder du tableau passé en paramètre lors du traitement dans la fonction.

Bonne journée!
1
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
10 juil. 2002 à 22:34
FAUX :

L'index de base débutera à celui défini dans le type :
Type TTab=Array[1..10]Of integer

Si la fonction est déclarée comme suit :
FonctionTableau(UnTab:TTab):Integer
Alors TTab aura bien un indice commençant à 1 !!
Mais le type du tableau passé en paramètre devra toujours être de type TTab

Par contre si la fonction est déclarée comme suit
FonctionTableau(UnTab:array of integer);
Là effectivement le premier indice sera toujours 0 quelque soit le taille du tableau passé en paramètre.

--- :sleepy) Nono du Moulin :sleepy) ---
0
garnotte Messages postés 14 Date d'inscription mardi 29 janvier 2002 Statut Membre Dernière intervention 18 février 2016 1
10 juil. 2002 à 22:46
Ah, là, tu viens de me scier les jambes! B)

Je n'ai jamais eu à essayer ton premier exemple. Par contre, je me suis cassé les dents en utilisant l'autre technique.

Merci du tuyau!
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
10 juil. 2002 à 23:05
Pourtant la syntaxe est correcte, Par exemple :

On définie une fonction qui fait le total d'un table d'entier :
Function Total(Tab:Array of integer):Integer;
Var i:Integer;
Begin
Result:=0;
For i:=Low(Tab) To High(Tab) Do Result:=Result+Tab[i];
End;

On déifni trois tableau identiques mais avec des indices différents :
Var
Tab1:Array[0..9]Of integer=(1,1,1,1,1,1,1,1,1,1);
Tab2:Array[1..10]Of Integer=(1,1,1,1,1,1,1,1,1,1);
Tab3:Array[-5..4]Of Integer=(1,1,1,1,1,1,1,1,1,1);

Mais cela donne quand même trois fois le même résultat :
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(IntToStr(Total(Tab1)));
ShowMessage(IntToStr(Total(Tab2)));
ShowMessage(IntToStr(Total(Tab3)));
end;

Donc en fait l'indice de base importe peu. Quand on utillise des fonctions avec des tableau de taille variable il faut toujours utilisé Low() et High() pour obtenir l'indice de débuit et l'indice de fin.

A noter que low et high fonctionne aussi avec les tabeaus de taille fixe.

--- :sleepy) Nono du Moulin :sleepy) ---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
garnotte Messages postés 14 Date d'inscription mardi 29 janvier 2002 Statut Membre Dernière intervention 18 février 2016 1
11 juil. 2002 à 01:34
C'est ça que je voulais dire :)

Merci pour l'info.
0
Rejoignez-nous