Programmation C++/Les pointeurs/Exercices

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


Exercices[modifier | modifier le wikicode]

Exercice 1[modifier | modifier le wikicode]

Ecrire une fonction swap qui a comme paramètres deux pointeurs vers des entiers et qui échange le contenu des deux entiers pointés. Tester cette fonction en écrivant un programme qui échange le contenu de deux entiers a et b en appelant cette fonction.

Exercice 2[modifier | modifier le wikicode]

Ecrire une fonction qui a comme paramètres un tableau d'entiers de taille quelconque, la taille du tableau, et 2 pointeurs vers des entiers min et max. La fonction doit renvoyer dans les entiers pointés par min et max respectivement les plus petits et les plus grands entiers du tableau.

Exercice 3[modifier | modifier le wikicode]

Écrire une fonction qui a en paramètre une chaîne de caractères et qui renvoie par un return le nombre d'occurrences de la lettre 'A'. Cette fonction devra parcourir la chaîne en utilisant un pointeur. Tester cette fonction.

Exercice 4[modifier | modifier le wikicode]

Ecrire une fonction qui a comme prototype copy(char * ch1, char * & ch2). Cette fonction a comme paramètre en entrée une chaîne de caractères ch1 et une référence vers un pointeur ch2. Avant l'appel ch2 est un pointeur non initialisé. Après l'appel, ch2 pointe vers un nouveau tableau de char qui contient une copie de la chaîne ch1. Ce nouveau tableau de char aura la taille minimale nécessaire. Tester cette fonction.

Exercice 5[modifier | modifier le wikicode]

Réécrire la fonction du 5 et le programme principal mais cette fois-ci le pointeur ch2 sera non plus passé par référence mais par pointeur. La fonction copy aura donc comme prototype :

copy(char * ch1, char * * ch2)

Exercices 6[modifier | modifier le wikicode]

On veut écrire un programme qui permet de gérer une liste de notes grâce à un tableau de taille variable. Une note sera définie par un nom (chaîne de 9 caractères utiles), un prénom (chaîne de 9 caractères utiles) et une valeur (un réel). Notre structure listeNotes (qui contient une liste de notes) sera caractérisée par un pointeur vers une note qui sera en fait un tableau de taille variable de notes, un entier nbmax qui sera la taille réelle du tableau, par un entier nb qui sera le nombre d'éléments contenus dans la liste et un entier inc qui sera la taille initiale du tableau. Au départ, le tableau fait inc cases et la liste et vide. On peut alors rajouter des éléments dans la liste. Lorsque le tableau devient trop petit, on augmente la taille du tableau de inc cases. Pour cela , il faudra réallouer de la place pour un nouveau tableau de notes plus grand que l'ancien. Il faudra ensuite copier les notes de l'ancien tableau dans le nouveau, détruire l'ancien tableau et faire pointer le tableau de notes de notre vers notre nouveau tableau. Notre tableau verra donc sa taille augmenter de inc cases à la fois au fur et à mesure des besoins. Lorsqu'on supprimera des notes dans le tableau et dès qu'il y aura inc cases de vide dans le tableau on réduira de la même manière la taille du tableau. Notre nouvelle structure listeNotes aura une gestion de la mémoire nettement meilleure qu'avec un tableau statique.

Notre liste de notes sera gérée par le menu suivant :

1. Ajouter une note.
2. Afficher une liste de notes.
3. Supprimer une note en tapant son nom et son prénom.
4. Afficher la moyenne des notes.
5. Quitter.

Il faudra veiller à ce qu'il n'y ait pas 2 notes avec le même nom et le même prénom dans la liste et il faudra trier la liste de notes d'abord par rapport au nom, ensuite par rapport au prénom au fur et à mesure des ajouts et des suppressions de notes. On veillera à bien décomposer ce problème en différents modules et à mener une réflexion sur les fonctions nécessaires dans chaque module.