:: Enseignements :: Licence :: L1 :: 2011-2012 :: Programmation 2 ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | TP5: Manipulation de fichiers et allocation de mémoire |
Ce TP permet de voir quelques opérations de base sur les fichiers en C et d'utiliser les fonction d'allocation de mémoire.
Sujet de TP5 à télécharger:
Exercice 1 -
Écrire dans un fichier nommé "tp5.c" le programme suivant et exécuter le.
int main()
{
FILE* fichier;
char c;
fichier=fopen("tp5.c","r");
if(fichier==NULL)
{
fprintf(stderr,"erreur ouverture\n");
return 1;
}
while(fscanf(fichier,"%c",&c)!=-1)
printf("%c",c);
fclose(fichier);
return 0;
}
- Que fait le programme?
- Écrire une fonction int afficherFichier(char* nom) qui prend en paramètre un nom de fichier texte nom et affiche le contenu de ce fichier dans le terminal. La fonction doit renvoyer -1 si le fichier nom n'existe pas et 0 sinon.
Exercice 2 -
Écrire une fonction int somme(char* nom) fait la somme des nombre écrit dans le fichier nom. Le fichier nom pourra être écrit avec un éditeur de texte ordinaire. Il doit contenir des nombres entiers séparés par des espaces. On pourra récupérer chaque nombre grâce à fscanf(fichier,"%d",&i)
Exercice 3 -
Écrire un programme qui demande à l'utilisateur d'entrer une suite de nombre qu'il doit valider avec la touche ENTREE . Le programme doit enregistrer cette suite de nombre dans un fichier (grâce à fprintf(fichier,"%d",i)) dont le nom a préalablement été donné par l'utilisateur. Les nombre doivent être séparés par des espaces.
Exercice 4 -
Écrire une fonction int enregistrer(int T[],char* nom) qui alloue de la place pour un tableau et enregistre dans ce tableau une liste d'entiers contenus dans un fichier texte nom. On suppose que le fichier texte contient un premier entier séparé des autres par une virgule qui donne le nombre d'entiers qui suivent. Ainsi la liste des 9 nombres suivants : 12 -1 4 1 17 -3 0 6 0 sera exprimé dans le fichier par :
9,12 -1 4 1 17 -3 0 6 0
La fonction doit retourner le nombre d'entier dans la liste. Pour réserver de la place on doit utiliser la fonction malloc() défnie dans stdlib.h.
Écrire une fonction void liberer(int T[]) qui libère la place allouée par la fonction enregistrer.
Exercice 5 -
Écrire une fonction int trie(char* fichierSource,char* fichierCible) qui écrit dans un fichier cible fichierCible les nombres contenu dans fichierSource dans l'ordre croissant. Pour trier les nombres on pourra utiliser un des algorithmes du tp précédent. Les nombres du fichier source doivent être séparés par des espaces. La fonction doit renvoyer −1 en cas de problème ou le nombre d'entiers lus dans fichierSource.
Parce que le nombre d'entier contenus dans fichierSource n'est pas connue à l'avance on devra utiliser la fonction realloc. La place allouée par realloc et malloc doit être multiple d'au moins 40 octets (afin de ne pas faire constamment appel à realloc. Attention à libérer la place que vous aurez utilisé avec malloc ou realloc.
© Université de Marne-la-Vallée