• Aucun résultat trouvé

I3:StructuresdedonnéesLectureetécrituredansdesfichiers TPn 5

N/A
N/A
Protected

Academic year: 2022

Partager "I3:StructuresdedonnéesLectureetécrituredansdesfichiers TPn 5"

Copied!
3
0
0

Texte intégral

(1)

IUT de Villetaneuse - Département R&T RT1 - 2011-2012

TP n

o

5

I3 : Structures de données

Lecture et écriture dans des fichiers

Exercice 1 [Les étudiants de l’IUT]

Vous avez vu dans le TD n˚5 la conception d’une bibliothèque de gestion des étudiants de l’IUT.

1. Implémentez les fonctions creerEtudiant(), copierEtudiant(), libererEtudiant() et afficheEtu- diant() dans la bibliothèque libmanipEtudiant.so, en utilisant l’outil make pour la compilation, comme vu dans le TD n˚5.

2. Écrivez un programme de test qui fait appel aux fonctions de la bibliothèque libmanipEtudiant.so 3. Dans la bibliothèque, écrivez une procédure qui remplit un tableau d’étudiants (une dizaine

d’étudiants) passé en paramètre.

4. Dans la bibliothèque, écrivez une procédure en C qui sépare le tableau en deux autres tableaux : les étudiants de première année et les étudiants de deuxième année. Les pointeurs vers les trois tableaux (un tableau d’entrée et deux tableaux de sortie), le nombre total d’étudiants et un pointeur vers le nombre d’étudiants dans chaque tableau de sortie sont passés en paramètres de la procédure.

5. Dans la bibliothèque, écrivez une procédure en C qui affiche tous les étudiants contenus dans un tableau. Le tableau et le nombre d’étudiants sont passés en paramètres.

6. Dans le programme en C, créer un tableau de

pointeurs sur etudiant_t. Remplissez-le avec des

pointeurs vers des etudiant_t (par exemple, ceux du tableau que vous avez rempli plus tôt avec la fonction idoine). Prévoyez une case supplémentaire à la fin de votre tableau, qui contiendra le pointeur NULL.

7. Jusqu’à maintenant, les manipulations de tableau ont toujours nécessité de connaitre le nombre d’éléments dans un tableau. Écrivez une fonction dans la bibliothèque qui retourne le nombre d’éléments dans un tableau de pointeurs sur etudiant_t terminé par NULL. Attention : le tableau peut-être mal formé. L’utilisateur de la bibliothèque peut lui passer un tableau qui ne se termine pas par NULL. Par mesure de sécurité, vous prévoirez une limite à ne pas dépasser.

Exercice 2 [Les étudiants enchaînés]

Les fonctions de cet exercice sont à ajouter à la bibliothèque que vous avez écrite à la question précédente. Les prototypes (à ajouter dans le fichier d’en-têtes) sont indiqués à la fin de l’énnoncé.

1. Écrivez une structure de données qui représente un étudiant et contient un pointeur vers un autre élément du type de cette structure de données, de telle sortie que l’on puisse l’utiliser pour former une liste chaînée.

2. Ecrivez une fonction qui permet de remplir un élement de la liste avec les champs d’un étudiant.

3. Ecrivez une fonction qui permet de remplir un étudiant avec les champs d’un élément de la liste.

4. Écrivez une fonction qui permet de créer une liste chaînée vide.

5. Écrivez une fonction qui permet d’ajouter un étudiant au début de la liste.

6. En utilisant la fonction

strncmp()

, écrivez une fonction qui compare deux étudiants en fonction de leur nom de famille. Si ils portent le même nom de famille, on regardera leurs prénoms. Si les prénoms sont identiques, on regarde leurs dates de naissance (année puis mois puis jour).

La fonction retourne un nombre positif si le premier étudiant est supérieur selon ces critères au second, négatif si le premier étudiant est inférieur au second, zéro si ils sont identiques.

Camille Coti – camille.coti@iutv.univ-paris13.fr

1/3

(2)

IUT de Villetaneuse - Département R&T RT1 - 2011-2012

7. Écrivez une fonction qui compare de la même façon deux éléments d’une liste. Vous pourrez utiliser la fonction précédente.

8. Écrivez une fonction qui enliste un étudiant dans la liste chaînée de telle sorte que les étudiants de la liste soient triés selon l’ordre défini dans les questions précédentes.

9. Écrivez une fonction qui permet de convertir un tableau de pointeurs vers des étudiants en une liste chaînée triée par noms.

10. Écrivez une fonction qui retourne le nombre d’éléments dans la liste chaînée.

11. Écrivez une fonction qui affiche tous les éléments de la liste chaînée.

12. Écrivez une fonction qui cherche un étudiant dans la liste. Cette fonction prend en paramètres son nom, son prénom (chaînes de caractères) et un pointeur vers la liste. Elle retourne un pointeur vers cet élément. Si l’étudiant n’a pas été trouvé, la fonction retourne NULL.

13. Écrivez une fonction qui supprime un élément de la liste. Un pointeur vers cet élément est passé en paramètre. La fonction retourne NULL si l’élément n’a pas été trouvé. Pourquoi doit-on retourner le pointeur vers le début de liste ?

14. Écrivez une fonction qui surrpime un par un tous les éléments d’une liste.

15. Écrivez une fonction qui supprime un étudiant de la liste chaînée. Cette fonction prend en pa- ramètre le nom de famille et le prenom de l’étudiant (chaîne de caractères) et un pointeur vers la liste chaînée et retourne un pointeur vers la liste chaînée ou NULL si l’étudiant n’a pas été trouvé.

16. Écrivez une fonction qui permet de convertir une liste chaînée en un tableau d’étudiants.

Les fonctions et procédures à ajouter dans la biliothèque ont les prototypes suivants ; 1 s t r u c t l i s t e _ e t u d i a n t

n o u v e l l e _ l i s t e ( ) ;

2 s t r u c t l i s t e _ e t u d i a n t

a j o u t e r _ d e b u t ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ,

3 e t u d i a n t _ t e t ) ;

4 i n t c o m p a r e r E t u d i a n t s ( e t u d i a n t _ t e t 1 , e t u d i a n t _ t e t 2 ) ;

5 s t r u c t l i s t e _ e t u d i a n t

a j o u t e r ( s t r u c t l i s t e _ e t u d i a n t

l i s t e , e t u d i a n t _ t e t ) ; 6 s t r u c t l i s t e _ e t u d i a n t

t a b 2 c h a i n ( e t u d i a n t _ t

∗∗

t a b l e a u ) ;

7 e t u d i a n t _ t

c h a i n 2 t a b ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ) ; 8 e t u d i a n t _ t e l e m 2 e t u ( s t r u c t l i s t e _ e t u d i a n t

elem ) ; 9 s t r u c t l i s t e _ e t u d i a n t

e t u 2 e l e m ( e t u d i a n t _ t e t ) ; 10 i n t nbElem ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ) ;

11 void a f f i c h e L i s t e ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ) ;

12 s t r u c t l i s t e _ e t u d i a n t

c h e r c h e E t u d ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ,

13 char∗ nom , char∗ prenom ) ;

14 s t r u c t l i s t e _ e t u d i a n t

suprElem ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ,

15 s t r u c t l i s t e _ e t u d i a n t

elem ) ;

16 s t r u c t l i s t e _ e t u d i a n t

s u p r E t u d i a n t ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ,

17 char∗ nom , char∗ prenom ) ;

18 void e f f a c e r L i s t e ( s t r u c t l i s t e _ e t u d i a n t

l i s t e ) ;

Exercice 3 [Les étudiants persistents]

On souhaite conserver la liste des étudiants dans un fichier afin de pouvoir récupérer les données même après avoir quitté l’application. Pour cela, nous allons écrire ces données dans un fichier, et les charger depuis un fichier.

Cet exercice fait suite aux deux précédents. Vous ajouterez les fonctions écrites ici dans la biblio- thèque que vous avez écrite dans les exercices précédents.

Camille Coti – camille.coti@iutv.univ-paris13.fr

2/3

(3)

IUT de Villetaneuse - Département R&T RT1 - 2011-2012

1. Écrivez une fonction qui prend en paramètre un nom de fichier (chaîne de caractères) et un pointeur vers une liste chaînée et écrit dans le fichier, en mode caractères, les informations sur les étudiants. Chaque étudiant est écrit sur une ligne. Les informations sont séparées par des tabulations (caractère \t). La fonction retourne le nombre d’octets écrits (-1 en cas de problème).

N’oubliez pas d’ouvrir et de fermer votre fichier... Si le fichier existe déjà, il est écrasé.

2. Écrivez une fonction qui charge les données depuis un fichier. Les données sont contenues dans le fichier au format décrit dans la question précédente. La fonction prend en paramètre un nom de fichier (chaîne de caractères) et retourne un pointeur vers le début d’une liste chaînée contenant les données des étudiants, ou NULL si un problème a été rencontré. La liste doit être triée.

Les fonctions et procédures à ajouter dans la biliothèque ont les prototypes suivants ; 1 i n t e c r i r e L i s t e ( char∗ n om Fi c hi er , s t r u c t l i s t e _ e t u d i a n t

l i s t e ) ; 2 s t r u c t l i s t e _ e t u d i a n t

l i r e L i s t e ( char∗ n o m F i c h i e r ) ;

Camille Coti – camille.coti@iutv.univ-paris13.fr

3/3

Références

Documents relatifs

Erire une fontion strCompare qui prend en param etre deux ha^ nes de arat eres s1..

Écrivez un constructeur de la classe Liste qui, à partir d’un tableau dynamique d’éléments, crée la liste contenant les mêmes éléments dans le même ordre.. Donnez un

Le programme identifie les nombres comme étant des suites de chiffres successives, séparées par le reste du contenu du fichier par des espaces, des virgules, des point-virgule ou

Returns the index in this list of the first occurrence of the specified element, or -1 if the List does not contain this element. Retourner l’indice de la première occurence

FICHIERS FICHIERS Mémoire de masse découpée en blocs Fichier : liste chaînée de blocs, ou.. arbre de blocs (répertoires

Écrire une fonction relecture qui prend comme paramètre un nom de fichier (chaîne de caractères), un tableau de réels, puis qui place dans le tableau les valeurs présentes dans

Créer une fonction Lecture1 qui prend comme paramètres un nom de fichier (chaîne de caractères) nom et qui renvoie la liste des valeurs lues dans le fichier2. (on suppose que le

Écrire une fonction Lecture qui prend comme paramètre un nom de fichier (chaîne de caractères) et renvoie la liste des valeurs présentes dans le fichier (à raison d’une valeur