Tableaux en paramètres
155
fonction razv (tableau réel t[], entier nElem)
// pas de dimension pour t
{ entier i
répéter pour i := 1 à nElem
t[i] := 0.0
}
Nous conviendrons qu’il est possible de ne pas préciser de dimension pour t dans l’en-tête de
la fonction. Nous conservons cependant les crochets ([]) pour indiquer que l’on a affaire à un
tableau à une dimension.
Remarques
1 Dans la traduction des instructions de la fonction, le traducteur n’a plus connaissance de
la dimension exacte du tableau. Les contrôles de débordement d’indice sont donc cruciaux.
2 On notera bien que les tableaux traités par la fonction, c’est-à-dire ceux qui sont fournis
en paramètres effectifs, ont chacun une taille parfaitement définie. On fait parfois un
abus de langage qui consiste à dire que la fonction travaille sur des tableaux de taille
variable. En fait, ici, il n’y a aucune notion de gestion dynamique telle que nous l’avons
exposée au paragraphe 11 du chapitre 7, page 128 ; bien entendu, rien n’empêcherait
qu’un tableau transmis à la fonction ait été alloué dynamiquement si le langage le permet.
3 Il faut bien voir que nbElem est un paramètre comme un autre dont nous avons
convenu qu’il représentait la dimension du tableau. Rien n’empêche (hormis le bon
sens du programmeur) :
– d’appeler la fonction razv en lui fournissant une autre valeur :
razv (t1, 2)
// placerait 0. dans les deux premiers éléments de t1
razv (t1, 5)
// placerait 0. dans les trois éléments de t1
// et «ailleurs» (débordement d’indice)
– de ne pas traiter tous les éléments du tableau dans la fonction razv, en écrivant par
exemple :
répéter pour i := 1 à nbElem-1
3.3 Exemple
Voici un exemple de programme utilisant une fonction fournissant comme résultat la somme
des éléments d’un tableau d’entiers, dont la dimension est fournie en paramètre.
entier t1 [4] := { 1, 2, 3, 4 }
entier t2 [6] := { 2, 8, 12, 5, 3, 9 }
écrire «somme de t1 = », somme(t1, 4)
écrire «somme de t2 = », somme(t2, 6)
Précédent

- 178/370

Suivant