Revenir au sommaire des exercices

Pointeurs et allocations dynamiques

Objectif : Les allocations dynamiques, et plus généralement les pointeurs sont souvent la plus grosse difficulté à comprendre et à maitriser lorsqu'on apprend le C. Cet ensemble d'exercices a donc pour but de vous familiariser avec ces notions, tout en sachant que, comme pour toi, c'est en pratiquant encore et encore qu'on parvient à bien maitriser une notion!

Tableau à deux dimensions

int** creer_tab_2D (int nb_lignes, int nb_colonnes);

Ecrire une fonction qui prend en paramètre deux entiers nb_lignes et nb_colonnes et renvoie un tableaux d'entiers à deux dimensions de nb_lignes, composées chacune de nb_colonnes d'entiers.

Dictionnaire : Création

char** dico_init(void);

On cherche ici à implémenter un ensemble de fonctions permettant de gérer un dictionnaire de mots. La première fonction de cet ensemble consiste à créer et initialiser le-dit dictionnaire, qui sera modélisé par un tableau de caractères à deux dimensions, chaque ligne stockant un mot, de longueur variable.
A la création, le dictionnaire stocke uniquement les mot "Abécédaire".
La contrainte principale de ce dictionnaire est qu'il doit utiliser au mieux la mémoire : aucun octet ne doit être gâché !

Dictionnaire : Affichage

void dico_afficher (char **dico, int nb_mots);

Cette fonction parle d'elle-même: elle consiste à afficher la liste des mots contenus dans le tableau, dans l'ordre où ceux-ci sont stockés.

Dictionnaire : Ajout d'un mot

void dico_ajouter (char **dico, int *nb_mots, char *mot_ajoute);

Cette fonction ajoute un mot à la fin du dictionnaire (attention à la réallocation éventuellement nécessaire) et modifie directement le nombre de mots contenus dans le dictionnaire à l'aide du pointeur vers l'entier nb_mots.

Dictionnaire : Recherche d'un mot

int dico_rechercher (char **dico, int nb_mots, char *mot_cherche);

Cette fonction prend en paramètre le dictionnaire ainsi qu'une chaine de caractères contenant un mot à rechercher. Si le mot est présent dans le dictionnaire, la fonction renvoit l'indice auquel il est stocké, sinon elle renvoie -1.

Dictionnaire :Suppression

void dico_supprimer (char **dico, int nb_mots);

Cette fonction consiste simplement à libérer toute la mémoire allouée lors des différentes utilisations du dictionnaire.

Saisie d'une ligne au clavier

char* lire_ligne (void);

Ecrire une fonction de saisie de ligne de taille non déterminée à l'avance. La seule limite est la taille max de la mémoire disponible. Les fonctions utilisées sont fgetc() et realloc(), dont vous pourrez aisément trouver le prototype et les modalités d'utilisation en cherchant sur Google.
Merci à Emmanuel Delahaye pour cet exercice.

Revenir en haut

Revenir à la page d'accueil