:: Enseignements :: ESIPE :: E3INFO :: 2008-2009 :: Programmation C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Listes chaînées avec allocation dynamique |
Dans ce TD, nous reprenons le
TD 2. Il s'agira encore d'implémenter des listes chaînées de nombres complexes, mais en utilisant l'allocation dynamique.
Exercice 1 - Nombres complexes
- Ecrire, dans un fichier complex.h, la définition d'un nombre complexe sous la forme d'un type structuré.
Déclarer également les prototypes des fonctions suivantes :
-
new_complex qui crée, avec allocation dynamique, un nombre complexe en prenant les parties réelle et imaginaire comme paramètres ;
-
print_complex qui affiche, sur la sortie standard, un nombre complexe de la façon suivante : la partie réelle suivie d'un espace puis de la partie imaginaire ;
-
free_complex qui libère la mémoire d'un nombre complexe ;
-
sum qui calcule la somme de deux nombres complexes ;
-
conjugate qui calcule le conjugué d'un nombre complexe ;
-
norm qui calcule la norme d'un nombre complexe.
-
Implémenter dans un fichier complex.c, les fonctions précédentes.
Tester votre code en créant un fichier main.c où seront implémentés des tests.
Ne pas oublier de faire un Makefile pour compiler vos sources.
Vérifier le nombre de malloc et de free de votre programme avec valgrind.
Exercice 2 - Listes chaînées de nombres complexes
- Ecrire, dans un fichier list.h, la définition d'une liste chaînée de nombres complexes.
Une liste chaînée est définie comme un pointeur sur une cellule.
Une cellule est formée d'un nombre complexe et d'un pointeur vers la cellule suivante.
Déclarer également les prototypes des fonctions suivantes :
-
add qui ajoute un nombre complexe en tête d'une liste ;
-
free_list qui libère la mémoire d'une liste ;
-
print_list qui affiche une liste sur la sortie standard (un nombre complexe par ligne) ;
-
Implémenter ces fonctions dans un fichier list.c.
Indication : écrire une fonction qui crée une cellule et une fonction qui libère une cellule !
Ecrire des tests dans le fichier main.c.
Ne pas oublier de modifier votre Makefile.
-
Ecrire un programme qui crée une liste chaînée de 10000 nombres complexes tirés aléatoirement,
puis, l'affiche et, enfin, la libère.
Les parties réelles et imaginaires devront être comprises entre 0.0 et 20.0.
Vérifier qu'il y a le même nombre de malloc et de free.
-
Ecrire un programme qui calcule la somme des conjugués des nombres complexes d'une liste.
-
Ecrire un programme qui calcule la norme de la somme des nombres complexes dont la norme est supérieure à 10.
© Université de Marne-la-Vallée