Exercice 1 :
Créer sur disquette puis afficher à l'écran le fichier
INFORM.TXT dont les informations sont structurées de la manière suivante:
Numéro de matricule (entier)
Nom (chaîne de caractères)
Prénom (chaîne de caractères)
Le nombre d'enregistrements à créer est à entrer au
clavier par l'utilisateur.
Solution :
#include <stdio.h>
#include <stdlib.h>
main()
{
/* Déclarations : */
/* Nom du fichier et pointeur de référence */
char NOM_FICH[] = "A:\\INFORM.TXT";
FILE *FICHIER;
/* Autres variables */
char NOM[30], PRENOM[30];
int MATRICULE;
int I,N_ENR;
/* Ouverture du nouveau fichier en écriture */
FICHIER = fopen(NOM_FICH, "w");
if (!FICHIER)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOM_FICH);
exit(-1);
}
/* Saisie des données et création du fichier */
printf("*** Création du fichier %s ***\n", NOM_FICH);
printf("Nombre d'enregistrements à créer : ");
scanf("%d",&N_ENR);
for (I=1; I<=N_ENR; I++)
{
printf("Enregistrement No: %d \n", I);
printf("Numéro de matricule : ");
scanf("%d",&MATRICULE);
printf("Nom : ");
scanf("%s",NOM);
printf("Prénom : ");
scanf("%s",PRENOM);
fprintf(FICHIER, "%d\n%s\n%s\n", MATRICULE, NOM, PRENOM);
}
/* Fermeture du fichier */
fclose(FICHIER);
/* Ouverture du fichier en lecture */
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOM_FICH);
exit(-1);
}
/* Affichage du fichier */
printf("*** Contenu du fichier %s ***\n", NOM_FICH);
while (!feof(FICHIER))
{
fscanf(FICHIER, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
printf("Matricule : %d\t", MATRICULE);
printf("Nom et prénom : %s %s\n", NOM, PRENOM);
}
/* Fermeture du fichier */
fclose(FICHIER);
return 0;
}
Exercice 2 :
Ecrire un programme qui
crée sur disquette un fichier INFBIS.TXT qui est la copie exacte
(enregistrement par enregistrement) du fichier INFORM.TXT.
Solution :
#include <stdio.h>
#include <stdlib.h>
main()
{
/* Déclarations : */
/* Noms des fichiers et pointeurs de référence */
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
/* Autres variables */
char NOM[30], PRENOM[30];
int MATRICULE;
/* Ouverture de l'ancien fichier en lecture */
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", ANCIEN);
exit(-1);
}
/* Ouverture du nouveau fichier en écriture */
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOUVEAU);
exit(-1);
}
/* Copie de tous les enregistrements */
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, NOM, PRENOM);
}
/* Fermeture des fichiers */
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
Exercice 3 :
Ajouter un nouvel
enregistrement (entré au clavier) à la fin de INFORM.TXT et sauver le nouveau
fichier sous le nom INFBIS.TXT.
Solution :
#include <stdio.h>
#include <stdlib.h>
main()
{
/* Déclarations : */
/* Noms des fichiers et pointeurs de référence */
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
/* Autres variables */
char NOM[30], PRENOM[30];
int MATRICULE;
char NOM_NOUV[30], PRE_NOUV[30];
int MATRI_NOUV;
/* Ouverture de l'ancien fichier en lecture */
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", ANCIEN);
exit(-1);
}
/* Ouverture du nouveau fichier en écriture */
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOUVEAU);
exit(-1);
}
/* Saisie de l'enregistrement à ajouter */
printf("Enregistrement à ajouter : \n");
printf("Numéro de matricule : ");
scanf("%d",&MATRI_NOUV);
printf("Nom : ");
scanf("%s",NOM_NOUV);
printf("Prénom : ");
scanf("%s",PRE_NOUV);
/* Copie des enregistrements de l'ancien fichier */
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, NOM, PRENOM);
}
/* Ecriture du nouvel enregistrement à la fin du fichier */
fprintf(OUTFILE,"%d\n%s\n%s\n",MATRI_NOUV,NOM_NOUV,PRE_NOUV);
/* Fermeture des fichiers */
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
Exercice 4 :
Insérer un nouvel
enregistrement dans INFORM.TXT en supposant que le fichier est trié
relativement à la rubrique NOM et sauver le nouveau fichier sous le nom
INFBIS.TXT.
Solution :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
/* Déclarations : */
/* Noms des fichiers et pointeurs de référence */
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
/* Autres variables */
char NOM[30], PRENOM[30];
int MATRICULE;
char NOM_NOUV[30], PRE_NOUV[30];
int MATRI_NOUV;
int TROUVE;
/* Ouverture de l'ancien fichier en lecture */
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", ANCIEN);
exit(-1);
}
/* Ouverture du nouveau fichier en écriture */
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOUVEAU);
exit(-1);
}
/* Saisie de l'enregistrement à insérer */
printf("Enregistrement à ajouter : \n");
printf("Numéro de matricule : ");
scanf("%d",&MATRI_NOUV);
printf("Nom : ");
scanf("%s",NOM_NOUV);
printf("Prénom : ");
scanf("%s",PRE_NOUV);
/* Copie des enregistrements dont le nom */
/* précéde lexicogr. celui à insérer. */
TROUVE = 0;
while (!feof(INFILE) && !TROUVE)
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
if (strcmp(NOM, NOM_NOUV) > 0)
TROUVE = 1;
else
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
}
/* Ecriture du nouvel enregistrement, */
fprintf(OUTFILE,"%d\n%s\n%s\n",MATRI_NOUV,NOM_NOUV,PRE_NOUV);
/* et du dernier enregistrement lu. */
if (TROUVE)
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, NOM, PRENOM);
/* Copie du reste des enregistrements */
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, NOM, PRENOM);
}
/* Fermeture des fichiers */
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
Exercice 5 :
Supprimer dans INFORM.TXT tous les enregistrements:
a) dont le numéro de matricule se termine par 8
b) dont le prénom est "Paul"
(utiliser strcmp)
c) dont le nom est un palindrome. Définir une
fonction d'aide PALI qui fournit le résultat 1 si la chaîne transmise comme
paramètre est un palindrome, sinon la valeur zéro.
Sauver le nouveau fichier à chaque fois sous le nom
INFBIS.TXT.
Solution :
a) Supprimer les enregistrements, dont le
numéro de matricule se termine par 8
#include <stdio.h>
#include <stdlib.h>
main()
{
/* Déclarations : */
/* Noms des fichiers et pointeurs de référence */
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
/* Autres variables */
char NOM[30], PRENOM[30];
int MATRICULE;
/* Ouverture de l'ancien fichier en lecture */
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", ANCIEN);
exit(-1);
}
/* Ouverture du nouveau fichier en écriture */
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOUVEAU);
exit(-1);
}
/* Copie de tous les enregistrements à l'exception */
/* de ceux dont le numéro de matricule se termine */
/* par 8. */
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
if (MATRICULE%10 != 8)
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
}
/* Fermeture des fichiers */
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
b) Supprimer les enregistrements, dont le
prénom est "Paul" (utiliser strcmp)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
/* Déclarations */
. . .
/* Ouverture de l'ancien fichier en lecture */
. . .
/* Ouverture du nouveau fichier en écriture */
. . .
/* Copie de tous les enregistrements à l'exception */
/* de ceux dont le prénom est 'Paul'. */
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
if (strcmp(PRENOM,"Paul") != 0)
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
}
/* Fermeture des fichiers */
. . .
}
c) Supprimer les enregistrements, dont le nom
est un palindrome. Définir une fonction d'aide PALI qui fournit le résultat 1
si la chaîne transmise comme paramètre est un palindrome, sinon la valeur zéro.
#include <stdio.h>
#include <stdlib.h>
main()
{
/* Prototype de la fonction PALI */
int PALI(char *CH);
/* Déclarations */
. . .
/* Ouverture de l'ancien fichier en lecture */
. . .
/* Ouverture du nouveau fichier en écriture */
. . .
/* Copie de tous les enregistrements à l'exception */
/* des palindromes. */
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
if (!PALI(NOM))
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
}
/* Fermeture des fichiers */
. . .
}
int PALI(char *CH)
{
/* Variable locale */
char *CH2;
/* Placer CH2 à la fin de la chaîne */
for (CH2=CH; *CH2; CH2++)
;
CH2--;
/* Contrôler si la chaîne désignée par CH est un palindrome */
for (; CH<CH2; CH++,CH2--)
if (*CH != *CH2) return 0;
return 1;
}
merciiiii bcp <3
RépondreSupprimerje vous en prie
SupprimerJe respecte bien ce que vous faites ! et je vous encourage !! :)
RépondreSupprimerCe commentaire a été supprimé par l'auteur.
RépondreSupprimer