:: Enseignements :: ESIPE :: E3INFO :: 2007-2008 :: Programmation C - Slot 1 ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Structures, listes chaînées et entrées-sorties |
Dans ce TD, nous aborderons les notions de structures, listes chaînées et entrées-sorties.
Plus précisément, nous allons travailler sur des listes chaînées de nombres complexes.
Exercice 1 - Nombres complexes
- Ecrire, dans un fichier complexe.h, la définition d'un nombre complexe sous la forme d'un type structuré.
Déclarer également les prototypes des fonctions suivantes :
-
creer_complexe qui crée un nombre complexe en prenant les parties réelle et imaginaire comme paramètres ;
-
affiche_complexe 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 ;
-
libere_complexe qui libère la mémoire d'un nombre complexe ;
-
somme qui calcule la somme de deux nombres complexes ;
-
conjugue qui calcule le conjugué d'un nombre complexe ;
-
norme qui calcule la norme d'un nombre complexe.
-
Implémenter dans un fichier complexe.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.
Exercice 2 - Listes chaînées de nombres complexes
- Ecrire, dans un fichier liste.h, la définition d'une liste chaînée de nombres complexes.
Déclarer également les prototypes des fonctions suivantes :
-
ajout qui ajoute un nombre complexe en tête d'une liste ;
-
libere_liste qui libère la mémoire d'une liste ;
-
affiche_liste qui affiche une liste sur la sortie standard (un nombre complexe par ligne) ;
-
Implémenter ces fonctions dans un fichier liste.c.
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.
Exercice 3 - Listes chaînées et entrées-sorties
-
Implémenter une fonction qui sauvegarde une liste de nombres complexes dans un fichier.
Reprendre le formatage d'un affichage sur la sortie standard.
-
Ecrire un programme qui prend comme argument un nom de fichier.
Le programme sauvegardera dans le fichier une liste de nombres complexes tirés aléatoirement.
Si l'argument est absent, le programme affichera la liste sur la sortie standard.
-
Implémenter une fonction qui charge une liste de nombres complexes en mémoire depuis un fichier.
-
Ecrire un programme qui prend comme argument un nom de fichier contenant une liste de nombres complexes au format défini ci-dessus.
Le programme chargera la liste en mémoire depuis ce fichier, puis affichera la moyenne des normes des nombres complexes de la liste.
Si l'argument est absent, le programme lira la liste sur l'entrée standard.
Penser à gérer les erreurs potentielles : en gros, le programme ne doit pas boguer quelque soit l'entrée !
-
A l'aide des deux programmes précédents qui seront combinés à l'aide d'un pipe,
générer aléatoirement une liste de nombres complexes
puis afficher la moyenne des normes.
Exercice 4 - Liste chaînée triée de nombres complexes
On souhaite maintenant travailler sur une liste chaînée triée de nombres complexes.
On trie les nombres complexes selon leur norme.
-
Ecrire une fonction ajoute_trie qui ajoute un nombre complexe dans une liste triée.
Tester.
-
Ecrire une fonction appartient qui indique si un nombre complexe appartient à la liste.
-
Ecrire une fonction extrait qui extrait d'une liste de nombres complexes la liste des nombres dont la norme est compris dans un intervalle passé en paramètre.
-
Ecrire une fonction supprime_trie qui supprime tous les nombres complexes d'une liste qui ont une certaine norme.
-
Ecrire une fonction qui supprime d'une liste tous les nombres complexes dont la norme est supérieure à 10.
© Université de Marne-la-Vallée