Programmation C++/Les fonctions/Exercices
Exercices sur les fonctions
EXERCICE 1
Écrire une fonction distance ayant comme paramètres 4 doubles xa,ya et xb,yb qui repré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.
- Voici le fichier source :
#include <iostream>
using namespace std;
#include <cmath>
double distance(double xa, double ya, double xb, double yb)
{
double dx, dy;
dx = xb - xa;
dy = yb - ya;
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;
}
EXERCICE 2
Écrire une fonction f ayant comme paramètres un double x et un booléen ok et qui renvoie un double par un return
. La fonction renvoie par un return
la racine carrée de (x-1)*(2-x)
. La fonction renvoie par l'intermédiaire de la variable ok la valeur true
si la fonction est définie au point x, false
sinon. 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 et par référence.
- Utilisation de
return
. - Paramètres en entrées et en sorties d'une fonction.
- Appel d'une fonction.
- Jeu de tests d'une fonction.
Voici le fichier source :
#include <iostream>
using namespace std;
#include <cmath>
double f(double x, bool &ok)
{
double r=0;
if(x>=1 && x<=2) { r = sqrt((x-1)*(2-x)); ok = true;}
else ok = false;
return r;
}
int main()
{
double x, y;
bool ok;
cout << "Tapez x :"; cin >> x;
y = f(x, ok);
if (ok) cout << "f(x) vaut :" << y << endl;
else cout << "x n'est pas correct" << endl;
return 0;
}
EXERCICE 3
Écrire une fonction f ayant en paramètre un entier et qui renvoie par un return
un booléen : true
si l'entier est premier et false
sinon. Tester cette fonction.
Cet exercice a pour but de vérifier les points techniques suivants :
- Création de fonction simple.
- Appel d'une fonction.
- Validation des données avant l'appel d'une fonction.
- Fonction renvoyant un booléen.
- Voici le fichier source :
#include <iostream>
using namespace std;
#include <cmath>
bool f(int x)
{
bool r=true;
int d=2;
while(r && d*d<=x) if(x%d==0) r=false; else d++;
return r;
}
int main()
{
int x;
bool premier;
do{
cout << "Tapez x :"; cin >> x;
} while (x<=0);
premier = f(x);
if(premier) cout << "x est premier" << endl;
else cout << "x n'est pas premier" << endl;
return 0;
}
EXERCICE 4
Écrire une fonction f ayant comme paramètre un entier n et qui renvoie le n-ième nombre premier : cette fonction utilisera la fonction du 3). Tester cette fonction.
Cet exercice a pour but de vérifier les points techniques suivants :
- Création de fonctions simples.
- Appel de fonction.
- Fonction qui appelle une autre fonction.
- Voici le fichier source :
#include <iostream>
using namespace std;
bool premier(int x)
{
bool r = true;
int d = 2;
while (r && d*d<=x)
if (x%d == 0) r=false; else d++;
return r;
}
int Npremier(int N)
{
int nb = 0;
int i = 2;
while (nb != N)
{
if (premier(i)) nb++;
i++;
}
return (i - 1);
}
int main()
{
int N, p;
cout << "Tapez la valeur de N : "; cin >> N;
p = Npremier(N);
cout << "Le N-ième nombre premier est : " << p << endl;
return 0;
}
EXERCICE 5
Écrire 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.
- Voici le fichier source :
#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;
}
EXERCICE 6
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f doit renvoyer par un return
un booleén b indiquant s'il existe une valeur comprise entre 0 et 10 dans les n premières cases du tableau t. Tester cette fonction.
Cet exercice a pour but de vérifier les points techniques suivants :
- Ecriture d'une fonction ayant comme paramètre un tableau de taille quelconque.
- Recherche d'un élément dans un tableau vérifiant une propriété.
- Utilisation de
return
. - Voici le fichier source :
#include <iostream>
using namespace std;
void saisir(int t[], int n)
{
int i;
for(i=0; i<n; i++)
{
cout << "Tapez la valeur numéro " << i << " : ";
cin >> t[i];
}
}
bool f(int t[], int n)
{
bool trouve = false;
int i=0;
while(!trouve && i<n)
if(t[i]>=0 && t[i]<=10) trouve=true;
else i++;
return trouve;
}
int main()
{
int a[10];
saisir(a, 10);
bool b;
b = f(a, 10);
if (b) cout << "Il existe une valeur entre 0 et 10" << endl;
else cout << "Il n'existe pas de valeurs entre 0 et 10" << endl;
return 0;
}
EXERCICE 7
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f doit renvoyer par un return
le nombre de valeurs comprises entre 0 et 10 dans les n premières cases du tableau t. Tester cette fonction.
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.
- Compter le nombre d'éléments dans un tableau vérifiant une propriété.
- Utilisation de
return
. - Voici le fichier source :
#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];
}
}
int f(int t[], int n)
{
int nb=0;
int i;
for(i=0; i<n; i++)
if(t[i]>=0 && t[i]<=10) nb++;
return nb;
}
int main()
{
int a[10];
saisir(a, 10);
int x;
x = f(a, 10);
cout << "Il y a " << x << " valeur(s) entre 0 et 10" << endl;
return 0;
}
EXERCICE 8
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f possède un autre paramètre v , entier passé par référence. f doit renvoyer par un return
un booleén b indiquant s'il existe une valeur comprise entre 0 et 10 dans les n premières cases du tableau t. Si f renvoie true
, v est égal à la valeur de la première case du tableau comprise entre 0 et 10. Tester cette fonction.
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.
- Recherche d'un élément dans un tableau.
- Utilisation de
return
. - Voici le fichier source :
#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];
}
}
bool f(int t[], int n, int &v)
{
bool trouve = false;
int i=0;
while (!trouve && i<n)
if (t[i]>=0 && t[i]<=10) { trouve=true; v=t[i]; }
else i++;
return trouve;
}
int main()
{
int a[10];
bool b;
int w;
saisir(a, 10);
b = f(a, 10, w);
if (b)
cout << "Il existe une valeur entre 0 et 10 : " << w
<< " est la première de ces valeurs." << endl;
else
cout << "Il n'existe pas de valeurs entre 0 et 10" << endl;
return 0;
}
EXERCICE 9
É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'il 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
. - Voici le fichier source :
#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;
}
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;
}
EXERCICE 10
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f doit renvoyer par un return un entier égal à l'indice de la première case du tableau (parmi les n premières) comprise entre 0 et 10. S'il n'existe pas de telle valeur, la fonction renvoie -1. Tester cette fonction.
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.
- Utilisation de
return
. - Recherche d'un élément dans un tableau.
- Voici le fichier source :
#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];
}
}
int f(int t[], int n)
{
int i=0, ind=-1;
while(ind==-1 && i<n)
if(t[i]>=0 && t[i]<=10) ind=i; else i++;
return ind;
}
int main()
{
int a[10];
int w;
saisir(a, 10);
w = f(a, 10);
if (w!=-1)
cout << "Il existe une valeur entre 0 et 10. "
<< "l'indice de la première case est " << w << endl;
else
cout << "Il n'existe pas de valeurs entre 0 et 10" << endl;
return 0;
}