Vous êtes sur la page 1sur 6

République Algérienne Démocratique et Populaire

Ministère de l’Enseignement Supérieur et de la Recherche


Scientifique
Université Dr Tahar Moulay de Saida

Faculté : Technologie Niveau : 1ère année licence informatique


Semestre : 02 Module : ASD -2 -

T.D. N° 03
Les fichiers

Exercice n°01

Écrire un programme C permettant d’afficher le contenu d’un fichier texte en numérotant les lignes. Ces
lignes ne devront jamais comporter plus de 60 caractères.

#include <stdio.h>

int main()
{

FILE * entree ;
int num = 1 ; /* numéro de ligne */
char ligne [60] ; /* tampon d’une ligne */
entree = fopen ("d:\cours.txt", "r") ;
printf (" **** Contenu du fichier cours.txt ****\n" ) ;
while ( !feof(entree))
{
fgets (ligne, 60, entree) ;
printf ("%5d ", num) ;
printf ("%s", ligne) ;
num=num+1;
}
return 0;
}

Année universitaire 2022-2023 1/2


Exercice n°02
Écrire un programme C permettant de créer séquentiellement un fichier « employ.txt » comportant pour
chaque employé :
●Matricule (10 caractères maximum) ;
● nom (20 caractères maximum) ;
● prénom (15 caractères maximum) ;
● âge (entier) ;
● sexe (1caractère M/F).
Les informations relatives aux employés personnes seront lues au clavier.

#include <stdio.h>
#include <string.h>
main()
{
FILE * sortie ;
char mat [10];
char nom [20] ;
char prenom [15] ;
int age ;
char sexe ;
sortie = fopen ("d://employ.txt", "w") ;
printf (" --- pour finir la saisie, tapez age 0 ---\n") ;
do{
printf ("Matricule : ");scanf ("%s", &mat);
printf ("nom : "); scanf ("%s", &nom);
printf ("prénom : ") ; scanf ("%s", &prenom) ;
printf ("sexe (f:femini : m:masculin) :") ;scanf ("%s", &sexe) ;
printf ("age : ") ; scanf ("%d", &age);
if (age!=0)fprintf(sortie,"%s\t%s\t%s\t%d\t%c\n" ,mat,nom,prenom,age,sexe); /* \t : tabulation entre les
champs */
} while (age!=0);
fclose (sortie) ;
}

Année universitaire 2022-2023 2/2


Exercice n°03

Écrire un programme permettant, à partir du fichier créé par l’exercice précédent, de retrouver les
informations correspondant à un employé de nom donné.

#include <stdio.h>
#include <string.h>
main()
{
FILE * fich ;
char mat [10];
char nom [20] ;
char prenom [15] ;
int age ;
char sexe ;
char nomcher[20]; /* nom a rechercher*/
int trouve; /* indicateur prends 1 si le nom recherché existe , 0 sinon */
fich = fopen ("d://employ.txt", "r") ; /*** ouverture du fichier en mode lecture*/
printf (" Quel nom recherchez-vous : ") ;
scanf("%s",&nomcher) ;
trouve = 0 ;
do{
fscanf(fich,"%s\t%s\t%s\t%d\t%c\n" ,&mat,&nom,&prenom,&age,&sexe);
if ( strcmp (nomcher,nom)==0 ) trouve = 1 ; /***stcrmp : compare entre 2 chaine , elle retourne
0 si egaux***/
} while ( (!trouve) && (!feof(fich)) ) ; /*** feof : fin de fichier : retrourne vrai si la fin est atteinte
***/

if (trouve==1)
{
printf("le nom %s existe :\n",nomcher);
printf ("nom : %s\n", nom) ;
printf ("prénom : %s\n", prenom) ;
printf ("age : %d\n", age) ;
printf ("sexe : %c\n", sexe) ;
}
fclose (fich) ;
}

Année universitaire 2022-2023 3/2


Exercice n°04
Écrire un programme permettant, à partir du fichier créé dans l’exercice 2, de créer deux fichiers, le
premier contient les informations des femmes et le deuxième pour les hommes.

#include <stdio.h>
#include <string.h>
main()
{
FILE * fich ;
FILE * fhomme ; /* fichier dans lequel on va stocker les employés masculin*/
FILE * ffemme ; /* fichier dans lequel on va stocker les employés feminin*/
char mat [10];
char nom [20] ;
char prenom [15] ;
int age ;
char sexe ;
char nomcher[20]; /* nom a rechercher*/
int trouve; /* indicateur prends 1 si le nom recherché existe , 0 sinon */
fich = fopen ("d://employ.txt", "r") ; /*** ouverture du fichier en mode lecture*/
fhomme = fopen ("d://homme.txt", "w") ; /*** ouverture du fichier homme en mode ecriture*/
ffemme = fopen ("d://femme.txt", "w") ; /*** ouverture du fichier femme mode ecriture*/

trouve = 0 ;
do{
fscanf(fich,"%s\t%s\t%s\t%d\t%c\n" ,&mat,&nom,&prenom,&age,&sexe);

if (sexe=='f') fprintf(ffemme,"%s\t%s\t%s\t%d\t%c\n" ,mat,nom,prenom,age,sexe);


else if (sexe=='m') fprintf(fhomme,"%s\t%s\t%s\t%d\t%c\n" ,mat,nom,prenom,age,sexe);
} while ( !feof(fich) ) ; /*** feof : fin de fichier : retrourne vrai si la fin est atteinte ***/
printf("Creation termine!!!!!");

fclose (fich) ;
}

Année universitaire 2022-2023 4/2


Exercice n°05
Un fichier « resultat.txt » contient des descriptions de code étudiant et moyenne. Le code de l’étudiant est
une suite alphanumérique. Chaque ligne du fichier contient un code et une moyenne séparés par une
tabulation:
Code1 moy1
Code2 moy2
Le deuxième fichier « etudiants.txt » contient : le code étudiant, son nom, son prénom et sa spécialité.
Code1 nom1 prénom1 spe1
Code2 nom2 prénom2 spe2
-On suppose que vous disposez des deux fichiers.

a) Écrire une fonction qui donne la moyenne d’un étudiant à partir de son code.
b) Ecrire une fonction qui donne la moyenne d’un étudiant à partir de son nom et son prénom.
c) Ecrire une procédure qui permet de créer 3 nouveaux fichiers, chaque fichier contient le code ,
le nom, le prénom , la spécialité et la moyenne des étudiants de même spécialité.( Info , Eln, Tel)

#include <stdio.h>
#include <string.h>

//*************************** Question A*********************************//


float rechmoy(FILE *f,char mat[10])
{
char cod [10];
float moy ;
int trouve;
trouve = 0 ;
rewind(f);
do{
fscanf(f,"%s\t%f\n" ,&cod,&moy);
if ( strcmp(cod,mat)==0 ) trouve = 1 ;
} while ( (trouve==0) && (!feof(f)) ) ;
if (trouve==1) return moy;
else return -1;
}
//************************** Question B***********************************//
float rech(FILE *f,FILE *f1,char nom[20],char prenom[20])
{
char code[10],code1[10],name[20],pname[20],spe[20];
float moy ;
int trouve;
trouve = 0 ;
rewind(f1);
do{
fscanf(f1,"%s\t%s\t%s\t%s\n" ,&code,&name,&pname,&spe);
if( ( strcmp (nom,name)==0) &&(strcmp (prenom,pname)==0)) trouve = 1 ;
} while ( (!trouve) && (!feof(f1)) ) ;
if (trouve==1) return rechmoy(f,code); /*code1=code;*/

Année universitaire 2022-2023 5/2


//***************************Question C*************************************//
void divison(FILE *f,FILE *f1,FILE *finf,FILE *ftel,FILE *feln)
{
char code[10],code2[10],name[20],pname[20],spe[20];float moy;
rewind (f1);
do{
fscanf(f1,"%s\t%s\t%s\t%s\n" ,&code,&name,&pname,&spe);

moy=rechmoy(f,code);
if (strcmp (spe,"Info")==0) fprintf(finf,"%s\t%s\t%s\t%f\n" ,code,name,pname,moy);
else if (strcmp (spe,"Eln")==0) fprintf(feln,"%s\t%s\t%s\t%f\n" ,code,name,pname,moy);
else if (strcmp (spe,"Tel")==0) fprintf(ftel,"%s\t%s\t%s\t%f\n" ,code,name,pname,moy);
} while ( !feof(f1) ) ;

fclose(finf);fclose(ftel);fclose(feln);
}
//*******************************Le programme principal********************//
Int main()
{
FILE * fetud ,*finf,*feln,*ftel;
FILE * fres ;
char code[10],nom[20],prenom[20];
float m;
fetud = fopen ("d://etudiants.txt", "r") ; /*** ouverture du fichier en mode lecture*/
fres = fopen ("d://resultats.txt", "r") ; /*** ouverture du fichier en mode lecture*/
printf("tapez votre code :");scanf("%s",&code);
m=rechmoy(fres,code);
if (m!=-1) printf("votre moyenne est %f\n",m);
else printf("code innexistant!!!!\n");

printf("tapez votre nom :");scanf("%s",&nom);


printf("tapez votre prénom :");scanf("%s",&prenom);
m=rech(fres,fetud,nom,prenom);
if (m!=-1 )printf("votre moyenne est %f\n",m);
else printf("etudiant innexistant!!!!\n");
//******************************************
finf = fopen ("d://info.txt", "w");
feln = fopen ("d://eln.txt", "w");
ftel = fopen ("d://tec.txt", "w");
divison(fres,fetud,finf,ftel,feln); // appel de la procédure division
printf("3 fichiers crees!!!!!");

fclose (fetud) ;fclose (fres) ;


return 0 ;
}

Année universitaire 2022-2023 6/2

Vous aimerez peut-être aussi