Vous êtes sur la page 1sur 6

ECOLE PRÉPARATOIRE DES SCIENCES ET TECHNIQUES – ANNABA

Année Universitaire 2012-2013


Informatique 2eme année

Solutions Travaux Dirigés No 5


Les fonctions

Questions

1. Le rôle le plus important d'une fonction est


a. donner un nom à un bloc de code.
b. augmenter la taille d’un programme.
c. accepter des arguments et fournir une valeur de retour.
d. organiser un programme en unités conceptuelles.
d

2. Écrire une fonction appelée foo() qui affiche le mot Ecole.

void foo()
{
cout << “Ecole”;
}

3. Un instruction de programme qui utilise une fonction est un _______ de fonction.


appel

4. Un argument de fonction est


a. une variable dans la fonction qui reçoit une valeur du programme d'appel.
b. une manière avec laquelle les fonctions acceptent les valeurs du programme appelant.
c. une valeur envoyée à la fonction par le programme appelant.
d. une valeur retournée par la fonction au programme appelant.
c

5. Vrai ou faux : Quand des arguments sont passés par valeur, la fonction utilise les arguments
originaux dans le programme appelant.

Faux

6. Quel est le but de l'emploi des noms d'argument dans une déclaration de fonction ?
Pour clarifier l’usage des arguments

7. Quels éléments de la liste suivante peut légitimement être passé à une fonction ?

1
a. Une constante
b. Une variable
c. Une structure
d. Un tableau

a, b, c, d

8. Quelle est la signification des parenthèses vides dans une déclaration de fonction ?
Les parenthèses vides signifient que la fonction ne prend aucun argument

9. Combien de valeurs peuvent être retournées à partir d'une fonction ?


une

10. Vrai ou faux : Quand une fonction renvoie une valeur, l'appel de fonction entière peut apparaître
sur le côté droit du signe égal et être assigné à une autre variable.
Vrai

11. Où est spécifié le type de retour d'une fonction ?


au début de la déclaration et du déclarateur

12. Une fonction qui ne renvoie rien a le type de retour _______.


void

13. Ceci est une fonction:


int times2(int a)
{
return (a*2);
}
Ecrire un programme principal main() permettant d’appeler cette function.

main()
{
int resultat = times2(37); // function call
}

14. Quand un argument est passé par référence (par variable)


a. une variable est créée dans la fonction pour prendre la valeur de l'argument.
b. la fonction ne peut pas accéder à la valeur de l'argument.
c. une variable temporaire est créée dans le programme d'appel pour prendre la valeur de
l'argument.
d. la fonction accède à la valeur originale de l'argument dans le programme d'appel.
d

15. Quelle est la raison principale de passer des arguments par référence ?
Pour modifier l'argument original (ou pour éviter de copier un grand argument)
16. Écrire les déclarations pour deux fonctions surchargées appelées bar(). Toutes les deux renvoient
le type int. Le premier prend un argument de type char, et le deuxième prend deux arguments de type
char.
int bar(char);
int bar(char, char);

17. Généralement une fonction inline s’exécute _______ qu'une fonction normale, mais exige
_______ de mémoire
plus rapidement, plus

18. Écrire le déclarateur pour une fonction inline appelée foobar() qui prend un argument de type float
et renvoie le type float.
inline float foobar(float fvar)

19. Un argument par défaut a une valeur qui


a. peut être fourni par le programme d'appel.
b. peut être fournie par la fonction.
c. doit avoir une valeur constante.
d. doit avoir une valeur variable.

a, b

20. Écrire une déclaration pour une fonction appelée blyth() qui prend deux arguments et renvoie le
type char. Le premier argument est de type int et s'appelle i, et le deuxième est type float et s'appelle pi
avec une valeur par défaut de 3.14159.
char blyth(int i, float pi=3.14159);

21. Quelles fonctions peuvent accéder à une variable locale ?


La fonction dans laquelle elle est définie

22. Une variable qui est connue seulement dans la fonction dans laquelle elle est définie est
_______________.

Une variable locale.

23. L’instruction ______ dans une fonction appelée permet de passer la valeur d'une expression au
programme appelant.

return

24. Le mot-clé ______ est employé dans un en-tête de fonction pour indiquer que la fonction ne
renvoie pas une valeur ou indique que la fonction ne contient aucun paramètre.

void

3
25. La ______ d'une variable est la partie (le bloc) du programme dans lequel la variable peut être
employé.

portée

26. Les trois manières de retourner le control d'une fonction appelée à la fonction d’appel sont ______,
______ et ______.

return, return (expression), accolade fermante }

27. La fonction ______ est employée pour générer des nombres aléatoires
rand

Problèmes
1. Ecrire une fonction distance ayant comme paramètres 4 doubles xa,ya et xb,yb qui réprésentent les
coordonnées de deux points A et B et qui renvoie la distance AB. Tester cette fonction.
Cet exercice a pour but de vérifier les points techniques suivants :
• Création de fonction simple.
• Passage de paramètres par valeur.
• Utilisation de return.
• Appel d'une fonction.
#include<iostream.h>
#include<math.h>

double distance(double xa, double ya, double xb, double yb) {


double dx,dy;
dx=xa-xb;
dy=ya-yb;
return sqrt(dx*dx+dy*dy);
}

int main() {
double x1,y1,x2,y2,d;

cout<<"Tapez l'abscisse de A : ";cin>>x1;


cout<<"Tapez l'ordonnée de A : ";cin>>y1;
cout<<"Tapez l'abscisse de B : ";cin>>x2;
cout<<"Tapez l'ordonnée de B : ";cin>>y2;

d=distance(x1,y1,x2,y2);

cout<<"La distance AB vaut : "<<d<<endl;


return 0;
}

2. Ecrire une fonction swap ayant en paramètres 2 entiers a et b et qui échange les contenus de a et de
b. Tester cette fonction.
Cet exercice a pour but de vérifier les points techniques suivants :
• Création de fonction simple.
• Appel d'une fonction.
• Passage de paramètres par références.
#include<iostream>
using namespace std;

void swap(int &x, int &y)


{
int temp;
temp=x;
x=y;
y=temp;
}

int main()
{
int a,b;
cout<<"Tapez a :";cin>>a;
cout<<"Tapez b :";cin>>b;
swap(a,b);
cout<<"a vaut : "<<a<<endl;
cout<<"b vaut : "<<b<<endl;

return 0;
}

3. Écrire une fonction f ayant en paramètres un tableau t1 de taille quelconque et un entier n indiquant
la taille du tableau, ainsi qu'un tableau t2 de la même taille que t1. f doit renvoyer par un return un
entier nb indiquant le nombre de valeurs comprises entre 0 et 10 dans le tableau t1. f doit mettre dans
le tableau t2 les différentes valeurs comprise entre 0 et 10 qu'elle a rencontrées dans le tableau t1.
Cet exercice a pour but de vérifier les points techniques suivants :
• Écriture d'une fonction ayant comme paramètre un tableau de taille quelconque.
• Extraction d'un sous-liste d'éléments.
• Utilisation de return.
#include<iostream>
using namespace std;

void saisir(int t[],int n)


{
int i;
for(i=0;i<n;i++)
{
cout<<"Tapez la valeur numero "<<i<<" : ";
cin>> t[i];
}
}

void afficher(int t[],int n)


{
int i;
for(i=0;i<n;i++)
cout<<t[i]<<" ";
cout<<endl;
}

int f(int t1[], int n,int t2[])


{
int i=0,nb=0;

for(i=0;i<n;i++)if(t1[i]>=0 && t1[i]<=10){t2[nb]=t1[i];nb++;}


return nb;
}

5
int main()
{
int a[10],b[10];
int nb;

saisir(a,10);
nb=f(a,10,b);
cout<<"VOICI LES VALEURS ENTRE 0 ET 10 : "<<endl;
afficher(b,nb);
return 0;
}

4. Écrire une fonction récursive qui trie un tableau de N entiers.

Algorithme suggéré :

1. Si le tableau contient un seul élément, alors il est trié (Condition d’arrêt). Sinon aller à 2

2. Trouver le minimum parmi les indices de 0 à N-1

3. Permuter le minimum avec l'élément 0.

4. Trier les éléments de 1 à N-1

#include<iostream>
using namespace std;

void triRecursif(int t[], int debut, int fin) {


if (debut<fin) {
int imin=debut;
for (int i=debut+1;i<fin;i++)
if (t[i]<t[imin])
imin=i;
int tmp=t[imin];
t[imin]=t[debut];
t[debut]=tmp;
triRecursif(t,debut+1,fin);
}
}

int main() {
int t[10] = {5,6,1,3,14,0,55,7,12,4};
triRecursif(t,0,10);
for (int i=0;i<10;i++)
cout << t[i] << "\t";
}