12. Sous-programmes

12.1. Sous-programmes-fonctions
• Définition de fonction
• Appel d’une fonction pour exécution
• Exemples et tâches avec fonctions

12.2. Sous-programmes procédures
• Définition de procédure
• 12.5. Appel d’une procédure pour exécution • Exemple

12.3. Transmission des paramètres entre sous- programmes
• Paramètres passés par valeur. Exemple
• Paramètres passés par référence. Exemples
• Tableaux unidimentionnels comme paramètres formels. Exemple
• Tableaux multidimentionnels comme paramètres formels. Exemple

12.4. Notion de "prototype". Exemple

 
 

• Les tableaux unidimentionnels comme paramètres formels. Exemple


Définition d’un tableau unidimensionnel comme paramètre formel:

- mode commun:

type_d’éléments nom_du_tableau[]

Exemple :

int x[], double y[];

- définition d’un tableau comme paramètre formel par pointeur:

type_d’éléments * p;

Exemple :

int * p, double *z;

En ces deux cas les paramètres réels correspondants sont des noms des tableaux. On doit définir encore le nombre d’éléments du tableau.

Exemple: Trouver le plus grand diviseur commun d’éléments d’un tableau. Ecrire la procédure
readArr pour acquisition de tableau, la procédure writeArr pour affichage et la fonction gcd qui trouve le plus grand diviseur d’éléments du tableau. #include < iostream.h > // fonction gcd int gcd(int a, int b) { while(a!=b) if(a > b) a = a-b; else b = b-a; return a; } // procédure readArr void readArr(int m, int arr[]) { for (int i=0;I < m;i++) { cout<<"arr["<< i <<"] = "; cin>> arr[i]; } } // procédure writeArr void writeArr(int m, int arr[]) { for(int i=0;i < m;i++) cout<<"arr["<< i <<"] = "<< arr[i]<< endl; } int main() { int n, a[100]; cout<<" Introduire le nombre d'éléments du tableau a - n : "; cin>> n; readArr(n,a); cout<<"Le tableau: "<< endl; writeArr(n, a); int x = a[0]; for (int i=1;i < n;i++) x = gcd(x, a[i]); cout<<" gcd = "<< x<< endl; return 0; } L’exemple montre que les procédures readAr et writeArr fonctionnent directement avec des tableaux. Le changement des tableaux après l’acquisition dans la procédure readArr est conservé et visible dans la fonction main().

Exemple. Dans la procédure suivante le tableau est défini comme paramètre formel à l’aide d’un pointeur:
void readArr(int m, int *p) { for(int i=0;i < m;i++) { cout<<"arr["<< i <<"] = "; cin>> *p++; } L’appel de la procédure se fait de la même manière: readArr(n,a);.