Exercice 41
Énoncé
Écrire une fonction qui fournit en retour la somme des valeurs d’un tableau de
flottants à deux indices dont les dimensions sont fournies en argument.
Par analogie avec ce que nous avions fait dans l’exercice 39, nous pourrions songer à
déclarer le tableau concerné dans l’en-tête de la fonction sous la forme t[][]. Mais cela
n’est plus possible car, cette fois, pour déterminer l’adresse d’un élément t[i][j] d’un
tel tableau, le compilateur doit en connaître la deuxième dimension.
Une solution consiste à considérer qu’on reçoit un pointeur (de type float*) sur le début
du tableau et d’en parcourir tous les éléments (au nombre de n*p si n et p désignent les
dimensions du tableau) comme si l’on avait affaire à un tableau à une dimension.
Cela nous conduit à cette fonction :
float somme (float * adt, int n, int p)
{ int i ;
float s ;
for (i=0 ; i
return s ;
}
Pour utiliser une telle fonction, la seule difficulté consiste à lui transmettre
effectivement l’adresse de début du tableau, sous la forme d’un pointeur de type int *.
Or, avec, par exemple t[3][4], t, s’il correspond bien à la bonne adresse, est du type
« pointeur sur des tableaux de 4 flottants ». A priori, toutefois, compte tenu de la
présence du prototype, la conversion voulue sera mise en œuvre automatiquement par
le compilateur. Toutefois, comme nous l’avons déjà dit dans l’exercice 38, on gagnera
en lisibilité (et en éventuels messages d’avertissement !) en faisant appel à l’opérateur
de « cast ».
Voici finalement un exemple d’un tel programme d’utilisation de notre fonction :
#include
using namespace std ;
main()
{ float somme (float *, int, int) ;
float t[3] [4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } ;
cout << "somme : " << somme ((float *)t, 3, 4) << "\n" ;
}
90
Énoncé
Écrire une fonction qui fournit en retour la somme des valeurs d’un tableau de
flottants à deux indices dont les dimensions sont fournies en argument.
Par analogie avec ce que nous avions fait dans l’exercice 39, nous pourrions songer à
déclarer le tableau concerné dans l’en-tête de la fonction sous la forme t[][]. Mais cela
n’est plus possible car, cette fois, pour déterminer l’adresse d’un élément t[i][j] d’un
tel tableau, le compilateur doit en connaître la deuxième dimension.
Une solution consiste à considérer qu’on reçoit un pointeur (de type float*) sur le début
du tableau et d’en parcourir tous les éléments (au nombre de n*p si n et p désignent les
dimensions du tableau) comme si l’on avait affaire à un tableau à une dimension.
Cela nous conduit à cette fonction :
float somme (float * adt, int n, int p)
{ int i ;
float s ;
for (i=0 ; i
}
Pour utiliser une telle fonction, la seule difficulté consiste à lui transmettre
effectivement l’adresse de début du tableau, sous la forme d’un pointeur de type int *.
Or, avec, par exemple t[3][4], t, s’il correspond bien à la bonne adresse, est du type
« pointeur sur des tableaux de 4 flottants ». A priori, toutefois, compte tenu de la
présence du prototype, la conversion voulue sera mise en œuvre automatiquement par
le compilateur. Toutefois, comme nous l’avons déjà dit dans l’exercice 38, on gagnera
en lisibilité (et en éventuels messages d’avertissement !) en faisant appel à l’opérateur
de « cast ».
Voici finalement un exemple d’un tel programme d’utilisation de notre fonction :
#include
using namespace std ;
main()
{ float somme (float *, int, int) ;
float t[3] [4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } ;
cout << "somme : " << somme ((float *)t, 3, 4) << "\n" ;
}
90
