# Exercices en langage C++/Version imprimable

* Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
* Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
* Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.
Une version à jour et éditable de ce livre est disponible sur Wikilivres, une bibliothèque de livres pédagogiques, à l'URL : https://fr.wikibooks.org/wiki/Exercices_en_langage_C%2B%2B

# Avant propos
## Avant propos

Nous proposons ici de recueillir tous types d'exercices en langage C++, du plus basique au plus complexe. N'hésitez pas à rajouter ici et là un nouvel exercice avec sa solution.
Exemple :
Réaliser un programme qui utilise un menu pouvant effectuer les opérations suivantes :
* Fusion de deux vecteurs pour en faire un seul à la fin
* Produit d'une matrice par trace matricielle
* Intersection des deux vecteurs
* Quitter le programme.
Le programme doit permettre aussi à l'utilisateur de retourner dans le menu à chaque instruction.
N.B-Type matrice [4][4]

## Remarques sur le code source
### Fenêtre de console

Quand la console du système d'exploitation est une fenêtre ouverte lors du lancement d'un programme par double-clic depuis un environnement graphique, il peut être nécessaire d'ajouter le code ci-dessous en fin de programme afin de maintenir la fenêtre ouverte le temps de voir le résultat du programme affiché.

### Sortie de programme

La fonction principale main retourne un entier qui est un code d'erreur interprété par le système d'exploitation, de même pour le code passé à la fonction exit(int).
* La valeur 0 indique généralement un succès.
* La valeur 1 indique une erreur pour certains systèmes, ou un succès pour d'autres (ex : VMS).
Plutôt que d'utiliser une valeur littérale, il est préférable d'utiliser les constantes définies dans l'entête <cstdlib> :
* EXIT_SUCCESS pour un succès,
* EXIT_FAILURE pour un échec.
Leurs valeurs dépendent du système pour lequel est compilé le programme.

# Notions de base
## Notions de base
### EXERCICE 1

Écrire un programme qui affiche ceci à l'écran :
Cet exercice a pour but de vérifier les points techniques suivants :
* L'utilisation de cout et de endl.
Voici le fichier source :

### EXERCICE 2

Écrire un programme qui demande à l'utilisateur de taper la largeur et la longueur d'un champ et qui en affiche le périmètre et la surface.

### EXERCICE 3

Écrire un programme qui demande à l'utilisateur de taper 5 entiers et qui affiche leur moyenne. Le programme ne devra utiliser que 2 variables.
Cet exercice a pour but de vérifier les points techniques suivants :
* La notion de variables et leur déclaration.
* Calcul du moyenne.
* Utilisation des types int et double.
* L'utilisation de cin et de cout.
* L'affectation.
Voici le fichier source :

### EXERCICE 4

Écrire un programme qui demande à l’utilisateur de saisir 2 entiers A et B, qui échange le contenu des variables A et B puis qui affiche A et B.
Cet exercice a pour but de vérifier les points techniques suivants :
* La notion de variables et leur déclaration.
* L'utilisation de cin et de cout.
* L'affectation.
* Un "algorithme" rudimentaire : échanger le contenu de 2 variables.
Voici le fichier source :

### EXERCICE 5

Écrire un programme qui demande à l'utilisateur de taper le prix HT d'un kilo de tomates, le nombre de kilos de tomates achetés, le taux de TVA (Exemple 10%,20%,...). Le programme affiche alors le prix TTC des marchandises.
Cet exercice a pour but de vérifier les points techniques suivants :
* La notion de variables et leur déclaration.
* Le choix d'identificateurs pertinents et explicites.
* L'utilisation de cin et de cout.
* L'affectation.
* Modélisation d'un problème "économique".
Voici le fichier source :

# Structures de contrôle
## Structures de contrôle
### EXERCICE 1

Écrire un programme qui demande à l'utilisateur de taper un entier et qui affiche GAGNÉ si l'entier est entre 56 et 78 bornes incluses PERDU sinon.
Cet exercice a pour but de vérifier les points techniques suivants :
* La notion de variables et leur déclaration.
* L'utilisation de cin et de cout.
* Le choix d'une structure de contrôle adaptée au problème !
Voici le fichier source :

### EXERCICE 2

Écrire un programme qui affiche tous les entiers de 8 jusqu’à 23 (bornes incluses) en utilisant un for.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation rudimentaire d'un for.
Voici le fichier source :

### EXERCICE 3

Même exercice mais en utilisant un while.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation rudimentaire d'un while.
Voici le fichier source :

### EXERCICE 4

Écrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche leur somme.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation d'un for.
* Étude d'un algorithme usuel : calcul d'une somme.
Voici le fichier source :

### EXERCICE 5

Écrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche le plus petit de ces entiers.
Voici le fichier source :

### EXERCICE 6

Écrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule la somme des cubes de 5^3 à N^3.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple du for.
* Étude d'un algorithme usuel : calcul d'une somme.
* Modélisation d'un problème simple issu des mathématiques.
Voici le fichier source :

### EXERCICE 7

Écrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3 u(n+1)=3*u(n)+4
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple du for.
* Étude d'un algorithme usuel : calcul des termes d'une suite récurrente.
* Modélisation d'un problème issu des mathématiques.
Voici le fichier source :

### EXERCICE 8

Écrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par : u(0)=1 u(1)=1 u(n+1)=u(n)+u(n-1)
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple du for.
* Étude d'un algorithme usuel : calcul d'une suite récurrente.
* Modélisation d'un problème simple issu des mathématiques.
Voici le fichier source :

### EXERCICE 9

Écrire un programme qui demande à l’utilisateur de taper un entier N entre 0 et 20 bornes incluses et qui affiche N+17. Si on tape une valeur erronée, il faut afficher "erreur" et demander de saisir à nouveau l'entier.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple du while.
* Validation des données saisies par l'utilisateur.
Voici le fichier source :

### EXERCICE 10

Écrire un programme qui permet de faire des opérations sur un entier (valeur initiale à 0). Le programme affiche la valeur de l'entier puis affiche le menu suivant :
1. Ajouter 1 2. Multiplier par 2 3. Soustraire 4 4. Quitter
Le programme demande alors de taper un entier entre 1 et 4. Si l'utilisateur tape une valeur entre 1 et 3, on effectue l'opération, on affiche la nouvelle valeur de l'entier puis on réaffiche le menu et ainsi de suite jusqu'à ce qu'on tape 4. Lorsqu'on tape 4, le programme se termine.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation du while.
* Utilisation du switch.
* Gestion d'un programme à l'aide d'un menu.
* Modélisation d'un problème simple sous forme informatique.
Voici le fichier source :

### EXERCICE 11

Écrire un programme qui demande à l'utilisateur de taper des entiers strictement positifs et qui affiche leur moyenne. Lorsqu'on tape une valeur négative, le programme affiche ERREUR et demande de retaper une valeur. Lorsqu'on tape 0, cela signifie que le dernier entier a été tapé. On affiche alors la moyenne. Si le nombre d'entiers tapés est égal à 0, on affiche PAS DE MOYENNE.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation d'un while de difficulté moyenne.
* Étude d'un algorithme usuel : calcul d'une moyenne.
Voici le fichier source :

### EXERCICE 12

Écrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3 u(1)=2 u(n)=n.u(n-1)+(n+1).u(n-2)+n
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation d'un for.
* Étude d'un algorithme usuel : calcul d'une suite récurrente assez difficile.
* Modélisation d'un problème issu des mathématiques.
Voici le fichier source :

### EXERCICE 13

Écrire un programme qui demande de saisir 10 entiers et qui affiche le nombre d'occurrences de la note la plus haute.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation d'un for.
* Étude d'un algorithme usuel de difficulté moyenne : calcul du nombre d’occurrence d'une valeur.
Voici le fichier source :

### EXERCICE 14

Écrire un programme qui demande de saisir un entier N et qui affiche N!.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation du for.
* Étude d'un algorithme usuel : calcul d'une factorielle.
* Modélisation d'un problème issu des mathématiques.
Voici le fichier source :

### EXERCICE 15

Écrire un programme qui demande de saisir un entier et qui indique si cet entier est premier ou non.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation d'une boucle while de difficulté moyenne.
* Étude d'un algorithme usuel assez difficile : primarité d'un entier.
* Modélisation d'un problème issu des mathématiques.
Voici le fichier source :

### EXERCICE 16

Écrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche le nombre de nombres premiers inférieurs ou égaux à N.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation des boucles for et while.
* Imbrication de boucles.
* Lire précisément un énoncé.
* Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :

### EXERCICE 17

Écrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche le N-ième nombre premier.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation des boucles for et while.
* Imbrication de boucles assez complexe.
* Lire précisément un énoncé.
* Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :

### EXERCICE 18

Écrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure suivante.
et ainsi de suite
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation des boucles for.
* Imbrication de boucles assez complexe.
Voici le fichier source :

### EXERCICE 19

Écrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure suivante.
et ainsi de suite
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation des boucles for.
* Imbrication de boucles.
* Voici le fichier source :

### EXERCICE 20

On considère la suite hongroise : u(0)=a (a entier) si u(n) pair alors u(n+1)=u(n)/2 sinon u(n+1)=3*u(n)+1
Pour toutes les valeurs a, il existe un entier N tel que u(N)=1 (conjecture admise).
a) Écrire un programme qui demande à l'utilisateur de taper a et qui affiche toutes les valeurs de u(n) de n=1 à n=N.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation du while.
* Lire précisément un énoncé.
* Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :
b) Écrire un programme qui demande à l'utilisateur de taper un entier M puis qui cherche la valeur de a comprise entre 2 et M qui maximise la valeur de N. On appelle A cette valeur. La programme doit afficher la valeur A et la valeur N correspondante.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation des boucles while et for.
* Imbrication de boucles.
* Lire précisément un énoncé.
* Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :

# Les tableaux
## Les tableaux
### EXERCICE 1

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau. Le programme doit afficher le nombre d'entiers supérieurs ou égaux à 10.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple de tableaux.
* Un algorithme simple sur un tableau : recherche du nombre d'éléments vérifiant une propriété.
Voici le fichier source :

### EXERCICE 2

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau ainsi qu'un entier V. Le programme doit rechercher si V se trouve dans le tableau et afficher "V se trouve dans le tableau" ou "V ne se trouve pas dans le tableau".
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple de tableaux.
* Un algorithme simple sur un tableau : recherche d'un élément dans un tableau.
Voici le fichier source :

### EXERCICE 3

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau. Le programme doit ensuite afficher l'indice du plus grand élément.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple de tableaux.
* Un algorithme simple sur un tableau : recherche de l'indice du plus grand élément.
Voici le fichier source :

### EXERCICE 4

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau ainsi qu'un entier V. Le programme doit rechercher si V se trouve dans le tableau et doit supprimer la valeur de V et doit afficher le tableau final.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple de tableaux.
* Un algorithme simple sur un tableau : suppression d'un élément avec décalage des suivants.
Voici le fichier source :

### EXERCICE 5

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau ainsi qu'un entier V et un entier i compris entre 0 et 9. Le programme doit décaler d'une case vers la droite tous les éléments à partir de l'indice i (en supprimant le dernier élément du tableau) et doit mettre la valeur V dans le tableau à l'indice i. Le programme doit ensuite afficher le tableau final.
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Un algorithme simple sur un tableau : insertion dans en tableau avec décalage.
* Voici le fichier source :

### EXERCICE 6

Écrire un programme qui demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit ensuite afficher soit "le tableau est croissant", soit "le tableau est décroissant", soit "le tableau est constant", soit "le tableau est quelconque".
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Un algorithme simple sur un tableau : vérifier si le tableau vérifie une propriété donnée.
* Voici le fichier source :
Solution 2:

### EXERCICE 7

Écrire un programme qui demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit trier le tableau par ordre croissant et doit afficher le tableau. Algorithme suggéré :
On cherche l'indice du plus petit élément parmi les indices de 0 à 9 et on échange cet élément avec t[0].
On cherche l'indice du plus petit élément parmi les indices de 1 à 9 et on échange cet élément avec t[1].
On cherche l'indice du plus petit élément parmi les indices de 2 à 9 et on échange cet élément avec t[2].
... On cherche l'indice du plus petit élément parmi les indices de 8 à 9 et on échange cet élément avec t[8].
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Un algorithme simple sur un tableau : tri d'un tableau.
* Voici le fichier source :
* Voici le fichier source :

### EXERCICE 8

Écrire un programme qui demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit trier le tableau par ordre croissant et doit afficher le tableau. Algorithme suggéré (tri bulle) :
On parcourt le tableau en comparant t[0] et t[1] et en échangeant ces éléments s'ils ne sont pas dans le bon ordre.
on recommence le processus en comparant t[1] et t[2],... et ainsi de suite jusqu'à t[8] et t[9].
On compte lors de ce parcours le nombre d'échanges effectués.
On fait autant de parcours que nécessaire jusqu'à ce que le nombre d'échanges soit nul : le tableau sera alors trié.
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Un algorithme simple sur un tableau : tri d'un tableau.
* Voici le fichier source :
* Voici le fichier source :

### EXERCICE 9

Écrire un programme qui saisit 2 tableaux de 10 entiers a et b. c est un tableau de 20 entiers. Le programme doit mettre dans c la fusion des tableaux a et b. On copiera dans les 10 premières cases de c le tableau a, dans les dix dernières le tableau b. Le programme affiche ensuite le tableau c.
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Un algorithme simple sur un tableau : fusion de 2 tableaux.
* Voici le fichier source :
Pour prévoir un usage futur, avec des tableaux de longueur différente, solution 2 :

### EXERCICE 10

Écrire un programme qui saisit 2 tableaux de 10 entiers a et b qui doivent être triés dans l'ordre croissant. Le programme devra tout d'abord vérifier que les deux tableaux sont triés. Le tableau c est un tableau de 20 entiers. Le programme doit mettre dans c la fusion des tableaux a et b. Le tableau c devra contenir les éléments de a et ceux de b et devra être trié. Le programme affiche ensuite le tableau c.

### EXERCICE 11

Écrire un programme qui gère une liste d'entiers grâce au menu suivant :
1. Ajouter un entier 2. Afficher la liste des entiers
3. Supprimer dernier entier de la liste.
4. Afficher la dernière note tapée 5. Quitter Il y aura au maximum 10 entiers. Lorsqu'on rajoute un entier, il sera rajouté à la fin de la liste.
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Gestion d'une liste simple grâce à un tableau statique.
* Voici le fichier source :

### EXERCICE 12

Écrire un programme qui gère une liste d'entiers grâce au menu suivant :
1. Ajouter un entier 2. Afficher la liste des entiers 3. Supprimer le premier entier ayant une valeur donnée. 4. Supprimer tous les entiers ayant une valeur donnée 5. Quitter Il y aura au maximum 10 entiers. La liste devra être en permanence triée : lorqu'on rajoute un entier, il sera inséré au bon endroit dans la liste pour que celle-ci reste triée.
* Cet exercice a pour but de vérifier les points techniques suivants :
** Utilisation simple de tableaux.
** Gestion d'une liste triée grâce à un tableau statique.
* Voici le fichier source :

### EXERCICE 13

Écrire un programme qui demande à l'utilisateur de taper un entier N<=20 et qui affiche la N-ième ligne du triangle de pascal. ligne 1 : 1 1 ligne 2 : 1 2 1 ligne 3 : 1 3 3 1 ligne 4 : 1 4 6 4 1 et ainsi de suite ...
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation simple de tableaux.
* Itération des éléments d'un tableau.
Voici le fichier source :

### EXERCICE 14

Écrire un programme qui demande à l'utilisateur de taper 10 entiers compris entre 0 et 20 qui seront stockés dans un tableau et qui affiche le nombre de fois qu'on a tapé un 0, le nombre de 1, le nombre de 2, ..., le nombre de 20.

### EXERCICE 15

Écrire un programme qui demande à l'utilisateur de taper le contenu d'un tableau de réels de 3 lignes et 3 colonnes et qui affiche ce tableau mais en affichant la moyenne des éléments de chaque ligne, de chaque colonne et la moyenne globale.
Cet exercice a pour but de vérifier les points techniques suivants :
* Utilisation de tableaux à 2 dimensions.
* Modélisation d'un problème mathématique basique.
Voici le fichier source :

# Les tableaux de char
## Les tableaux de caractères
### Exercice 1

Écrire une fonction qui a en paramètres une chaîne de caractères (paramètre en entrée) et un entier e (paramètre en sortie). Cette fonction renvoie un booléen. La fonction renvoie true si la chaîne de caractères est un entier écrit sous la forme d'une suite de chiffres qui ne commence pas par 0, elle renvoie false sinon. Si la chaîne est correcte, la fonction renvoie dans e la valeur de cet entier.
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* la validation d'une chaîne de caractères ;
* transformation d'une chaîne vers un autre type.
Voici le fichier source :

### Exercice 2

Écrire une fonction qui a en paramètre une chaîne de caractères (paramètre en entrée et en sortie) et qui transforme toutes les minuscules de la chaîne en majuscules.
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* transformation d'une chaîne de caractères ;
* majuscules et minuscules.
Voici le fichier source :

### Exercice 3

Écrire une fonction qui a en paramètre une chaîne de caractères (paramètre en entrée et en sortie) et qui supprime toutes les voyelles.
* y est une voyelle dans ce programme ;
* la phrase peut contenir des espaces mais doit avoir moins de 80 caractères incluant le '\0' ;
* Si une voyelle à un accent, elle sera traité comme une consonne (tout comme une voyelle majuscule) ;
* La voyelle est remplacée par un . pour afficher la suppression de la voyelle.

### Exercice 4

Écrire une fonction qui a en paramètres deux chaînes de caractères ch1 et ch2 (paramètres en entrée) et renvoie un booléen indiquant si la chaîne ch2 est contenue dans la chaîne ch1.
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* recherche d'une chaîne incluse dans une autre chaîne.
Voici le fichier source :

### Exercice 5

Écrire un programme qui demande à l’utilisateur de taper un verbe du premier groupe et qui le conjugue à l'indicatif présent.
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* la construction d'une chaîne à partir d'une autre.
Voici le fichier source :

### Exercice 6

Écrire un programme qui saisit une chaîne pouvant contenir des espaces et qui affiche chaque mot de la chaîne, le séparateur étant l’espace.
Exemple, on tape : je pense donc je suis Le programme affiche : mot 1 : je mot 2 : pense mot 3 : donc mot 4 : je mot 5 : suis
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* analyse syntaxique d'une chaîne de caractères.
Voici le fichier source :

### Exercice 7

Écrire un programme qui demande à l’utilisateur de taper une chaîne de caractères et qui indique si cette chaîne est un palindrome ou non.
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* validation d'une chaîne.
Voici le fichier source :

### Éxercice 8

Écrire un programme qui demande à l’utilisateur de taper une chaîne de caractères et qui affiche la lettre (minuscule ou majuscule) la plus fréquente.
Cet exercice a pour but de vérifier les points techniques suivants :
* La manipulation de chaînes de caractères ;
* manipulation sur les majuscules ou minuscules ;
Voici le fichier source :

# Les structures

Écrire un programme permettant de saisir les informations concernant N élèves sachant que :
* 10 < N < 30
* La structure contenant les informations de chaque élève doit comporter les champs suivants :
** nom : chaine[10]
** prenom : chaine[10]
** note_ds : réel
** coef_ds : entier
** note_ex : réel
** moyenne : réel
* on peut ranger ces structures d'informations dans un tableau.
* on doit afficher le nom,le prénom et la moyenne de chaque élève sachant que :

# Les fonctions
## 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 :

### 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 :

### 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 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 :

### 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 :

### 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 :

### 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 booléen 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 :
* Écriture 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 :

### 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 :

### 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 booléen b indiquant s'il existe une valeur comprise entre 1 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 :

### 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 :

### 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.
* Recherche d'un élément dans un tableau.
* Utilisation de return.
* Voici le fichier source :

# Les classes
## EXERCICE 1 : Rectangle

Écrire un programme utilisant une classe rectangle dont le constructeur prend deux paramètres, largeur et hauteur et qui offre les fonctions suivantes :
* calcul du périmètre,
* calcul de la surface,
* affichage,
* ainsi que les accesseurs et mutateurs triviaux (lecture et modification de la largeur et de la hauteur).
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 2 : Pile d'entiers (stack)

Une pile est un ensemble dynamique d’éléments où le retrait se fait d’une façon particulière. En effet, lorsque l’on désire enlever un élément de l’ensemble, ce sera toujours le dernier inséré qui sera retiré. Un objet pile doit répondre aux fonctions suivantes :
* Initialiser une pile,
* Empiler un élément sur la pile (push),
* Dépiler un élément de la pile (pop).
Pour cela nous allons supposer que les éléments à empiler sont de type int.
Le programme principal comprend la définition d'une classe pile et un programme de test qui crée deux piles p1 et p2, empile dessus des valeurs entières et les dépile pour vérifier les opérations push et pop.
* Découverte et travail des classes.
* Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 3 : Fichier

Imaginons une application qui traite des fichiers. Ces fichiers vont être lus en mémoire, traités puis sauvegardés. Une fois lu en mémoire, un fichier a deux caractéristiques, une adresse à partir de laquelle se situe le fichier et une longueur, ce qui se concrétisera par un pointeur et une longueur en nombre d’octets. Imaginons la classe "Fichier" avec un constructeur et un destructeur et les trois méthodes suivantes :
* la méthode "creation" qui va allouer un certain espace à partir du pointeur p,
* la méthode "remplit" qui va remplir arbitrairement cet espace (ces remplissages arbitraires sont la preuve de la bonne gestion mémoire car l’accès à une zone non déclarée provoque une violation d’accès),
* la méthode "affiche" qui va afficher la zone mémoire pointée par p.
Puis écrivons un programme maître qui instancie notre classe par new, appelle nos trois méthodes et détruit l’objet par delete.
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 4 : Point

Réaliser une classe point permettant de manipuler un point d'un plan. On prévoira :
* les coordonnées x et y du point en membres privés,
* un constructeur (vous pouvez également implémenter les trois types de constructeur),
* une fonction membre déplace effectuant une translation définie par ses deux arguments dx et dy (double),
* une fonction membre affiche affichant les coordonnées cartésiennes du point,
* une fonction membre saisir permettant de saisir les coordonnées cartésiennes du point,
* une fonction membre distance effectuant calculant la distance entre deux points,
* une fonction membre milieu donnant le milieu d'un segment.
On écrira séparément :
* un ficher source constituant la déclaration et la définition de la classe,
* un petit programme d'essai gérant la classe point.
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

## EXERCICE 5 : Compteur

On souhaite implémenter une classe représentant un compteur entier. Un tel objet se caractérise par :
* Une valeur entière, positive ou nulle, nulle à l'origine.
* Le fait qu'il ne peut varier que par pas de 1 (incrémentation ou décrémentation). On convient qu'une décrémentation d'un compteur nul est sans effet.
Il s'agit de créer une classe Compteur pour rendre le service demandé. On écrira en outre un petit programme de test qui :
* créera un compteur et affichera sa valeur ;
* l'incrémentera 10 fois, puis affichera à nouveau sa valeur ;
* le décrémentera 20 fois, puis affichera une troisième fois sa valeur.
La sortie de ce programme doit donner quelque chose comme :
* Découverte et travail des classes.
* Utilisation d'un constructeur et d'un destructeur.
Fichier Compteur.h : déclaration de la classe Compteur
Fichier Compteur.cpp : implémentation de la classe Compteur
Fichier testCompteur.cpp : implémentation de la classe Compteur

## EXERCICE 6 : Gestion d'étudiants

1/ On voudrait gérer les étudiants d’une institution à l’aide d’une classe Etudiant définie par :
les attributs suivants :
- nom : nom d’un étudiant
- prénom: prénom d’un étudiant
- tabnotes : tableau contenant les notes d’un étudiant, sachant qu’un étudiant a au total 10 notes.
les méthodes suivantes :
- void saisie, permettant la saisie d’un étudiant
- void affichage, permettant l’affichage d’un étudiant
- float moyenne, retourne comme résultat la moyenne des notes d’un étudiant.
- int admis, retourne comme résultat la valeur 1, si un étudiant est admis et la valeur 0, sinon. Un étudiant est considéré comme étant
admis lorsque la moyenne de ses notes est supérieure ou égale à 10.
- int exae_quo (Etudiant E), retourne comme résultat la valeur 1, si deux étudiants ont la même moyenne et la valeur 0, sinon.
Ecrire la classe Etudiant dans le langage C++.
2/ On voudrait maintenant représenter, à l’aide d’une nouvelle classe Etudiant_en_Maitrise, certains étudiants particuliers dans cette
institution qui sont les étudiants en dernière année d’études. Ces étudiants possèdent en effet un attribut supplémentaire : note_memoire,
qui représente la note de leur mémoire de fin d’études.
Les méthodes à associer à cette classe sont les suivantes :
- void saisie, permettant la saisie d’un étudiant en maîtrise
- void affichage, permettant l’affichage d’un étudiant en maîtrise
- float moyenne, retourne comme résultat la moyenne des notes d’un étudiant en maîtrise
- int admis, retourne comme résultat la valeur 1, si un étudiant est admis et la valeur 0, sinon. Un étudiant en maîtrise est considéré
comme étant admis lorsque, d’une part, la moyenne de ses notes est supérieure ou égale à 10 et d’autre part la note obtenue pour son mémoire
de fin d’études est supérieure ou égale à 10.
- int exae_quo (Etudiant_en_Maitrise E), retourne comme résultat la valeur 1, si deux étudiants ont d’une part la même moyenne et d’autre
part, la même note de mémoire et retourne la valeur 0, sinon.
a) Quelles sont les méthodes qui sont à redéfinir dans la classe Etudiant_en_Maitrise ?
b) Ecrire la classe Etudiant_en_Maitrise dans le langage C++.
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

# Les templates
## Exercice 1

[MOYEN]
Requis:
* manipulation de tableaux,
* savoir créer une fonction template.
Créez une fonction "trier" pour trier un tableau de 10 données avec un tri par sélection. Le tableau devra être de n'importe quel type. Cette fonction utilisera une autre fonction, "échanger", pour échanger les éléments du tableau.
Le tri par sélection scan un tableau et met sa valeur minimale au début. Il répète l'opération jusqu'à obtenir un tableau trié.

## Exercice 2 : Fonction Template

[FACILE] Requis : Savoir créer et utiliser une fonction Template
1) Créer une fonction Template qui permettra de faire une somme entre un int et un float,
2) faire une spécialisation de la fonction en std::string, qui retournera la somme de la taille des deux chaînes.

## Exercice 3 : Classe Template

[FACILE-MOYEN] Requis : Savoir créer une classe Template
1) Créer une classe Template "Rectangle" prenant en paramètre les coordonnées de celui-ci sur un graphique(x,y). Évidemment, le type des attributs et des méthodes renvoyant une valeur (si il y en a) dépendront donc du paramètre Template rentré au préalable.
2) Créer une méthode retournant sa hauteur et son aire.
---AIDE :---
Voici comment déclarer votre Objet Rectangle dans le main : Rectangle<float> myRectangle(1.2, 2.6, 1.5, 4.1);

## Exercice 4

[MOYEN-DIFFICILE]
Requis:
* savoir utiliser les pointeurs et l'allocation dynamique de mémoire,
* savoir créer une classe template,
* savoir créer une structure.
Créez une classe liste simplement chaînée, avec une classe liste. Cette classe a un pointeur sur le premier élément de la liste. Elle a une méthode pour ajouter ou supprimer un élément au début de la liste et une pour afficher la liste en entier. Évitez toute fuite mémoire. Les éléments de la liste seront contenu dans la structure element.
Utilisez l'instruction new et delete pour supprimer et créer de nouveaux éléments. Une liste simplement chaînée est une structure de donnée. Elle est constituée de blocs où chaque bloc pointe sur le bloc suivant. Chaque bloc contient une donnée. Il est conseillé de réviser les pointeurs.
Voici le fichier source décomposé pour plus de lisibilité:

# La STL
## La STL
### EXERCICE 1 : La classe string

Soit une chaîne de caractères contenant une date (JJ/MM/AAAA) et une heure (HH:NN) sous la forme JJMMAAAAHHNN. Par exemple 010920091123 représente la date du 1er septembre 2009 à 11h23.
Créer un programme permettant d'extraire les différents champs et de les afficher.
Cet exercice a pour but de vérifier les points techniques suivants :
* Manipulation des chaînes de caractères.
Voici le fichier source :

# Les fichiers
## Les fichiers : Lecture et écriture en mode texte
### EXERCICE 1

Écrire un programme qui écrit dans le fichier example.txt le texte:
Cet exercice a pour but de vérifier les points techniques suivants :
* L'ouverture d'un fichier en écriture
* Tester si un fichier est ouvert (en particulier si vous avez les droits d'écriture sur le fichier)
* Fermer le fichier une fois l'écriture terminée
Voici le fichier source :

### EXERCICE 2

Écrire un programme qui lit le fichier example.txt définit dans l'exemple précédent et affiche son contenu : Vous devriez obtenir :
Cet exercice a pour but de vérifier les points techniques suivants :
* L'ouverture d'un fichier en lecture
* Tester si un fichier est ouvert (en particulier si vous avez les droits de lecture sur le fichier)
* Parcourir dans son intégralité un fichier
* Fermer le fichier une fois la lecture terminée
Voici le fichier source :

## Les fichiers : Lecture et écriture en mode binaire
### EXERCICE 1

Proposez un programme qui écrit en binaire une chaîne de caractère suivant de la liste des entiers de 0 à 1000 :
Cet exercice a pour but de vérifier les points techniques suivants :
* L'ouverture d'un fichier en écriture en mode binaire
* Tester si un fichier est ouvert (en particulier si vous avez les droits d'écriture sur le fichier)
* Écrire des données en binaire
* Fermer le fichier une fois l'écriture terminée
Voici le fichier source :

### EXERCICE 2

Proposez un programme qui lit le fichier écrit en binaire de l'exercice précédent et affiche son contenu. Vous devriez obtenir :
Cet exercice a pour but de vérifier les points techniques suivants :
* L'ouverture d'un fichier en lecture en mode binaire
* Tester si un fichier est ouvert (en particulier si vous avez les droits de lecture sur le fichier)
* Lecture des données écrites en binaire
* Fermer le fichier une fois la lecture terminée
Voici le fichier source :

## Liens Externes

* (anglais) La page dont on s'est inspirée pour écrire les exercices