Vous êtes sur la page 1sur 18

UMMTO - Département MI

Module : ASD2
Chargée de cours : S. ILTACHE 1/18
Série et corrigé : Les fichiers
___________________________________________________________________________

Série et corrigé : Les fichiers

Exercice 1

Soit le fichier étudiant possédant les renseignements suivants :


- numéro
- nom

1/ Ecrire un programme qui recherche un étudiant en connaissant son nom


2/ Ecrire un programme qui recherche un étudiant en connaissant son numéro d’ordre dans la liste de
la section.

Exercice 2

Ecrire un programme qui :


- Insère tous les nombres multiples de 5 compris entre 1 et 1000 dans un fichier.
- Affiche le contenu de ce fichier.

Exercice 3

Ecrire un programme qui permet de trier un fichier contenant N entiers. Utiliser des procédures pour
les différents traitements.

Exercice 4
On souhaite gérer différentes informations concernant un certain nombre de cartes de recharge
téléphonique. Pour cela, un fichier d’enregistrements 'c:\exo1\cartes.dat' est utilisé.
Une carte de recharge est caractérisée par :
Numéro de série (12 caractères)
Montant (entier)
Date d’expiration
Opérateur (code (entier), nom (10 caractères))

Écrire un programme Pascal qui intègre toutes les fonctionnalités suivantes :


1-Une procédure paramétrée creation qui crée le fichier contenant les informations des différentes
cartes. La saisie s’arrête selon la réponse de l’utilisateur à la question "voulez-vous saisir une autre
carte (O :Oui / N :Non )" ;
3- Une fonction paramétrée M2020 qui retourne le nombre de cartes de montant 1000 DA et qui
expireront durant l’année 2020 ;
4- Une procédure paramétrée extraire qui crée, à partir du fichier créé dans la question 1, un fichier
d’enregistrements qui contiendra uniquement les cartes qui appartiennent à
l’opérateur Mobilis.
5- Une procédure paramétrée Affichage qui affiche le contenu du fichier contenant les cartes Mobilis.
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 2/18
Série et corrigé : Les fichiers
___________________________________________________________________________

Exercice 5
Nous considérons un magasin qui commercialise des chaussures. Nous avons les informations
suivantes
- Il y’a 50 modèles de chaussures dans le magasin.
- Pour chaque modèle, il y’a 4 pointures différentes.
- Chaque chaussure est représentée par les informations suivantes :
- Son code permettant de désigner de façon unique un modèle de chaussure
- Une désignation (nom du modèle)
- Les pointures disponibles pour chaque modèle de chaussure et les quantités disponibles en
stock pour chaque pointure.

Nous représentons les articles de ce magasin par un fichier Mag illustré par le schéma suivant.

Code : 3020 Code : 3021


Desg : chxx Desg : chst
Pt Pt
37 38 39 40 35 36 37 38
10 20 15 33 10 20 15 33

La quantité pour Les pointures


chaque pointure

Questions :
Écrire un programme Pascal qui intègre toutes les fonctionnalités suivantes :

1/ Une procédure paramétrée qui permet de créer le fichier Mag relatif à ce magasin.
2/ Une procédure paramétrée qui donne les codes des chaussures dont la pointure 38 existe et le
nombre total de chaussures de pointure 38.
3/ Une procédure paramétrée qui permet de modifier le code d’une chaussure choisi par l’utilisateur.
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 3/18
Série et corrigé : Les fichiers
___________________________________________________________________________
Corrigé Exercice 1

Program fichetudiants ;
Type
Etudiant = record
Num :integer ;
Nom :string[15] ;
End ;
Var
ET : Etudiant ;
Fet : file of etudiant ;
NomEt :string[15 ] ;
Numet,i :integer ;
Trouve :boolean ;
Rep :char ;

Begin
{Création du fichier Fet}
Assign (Fet, ‘D:\Fetudiant’) ;
Rewrite(Fet) ;
Repeat
Writeln(‘introduire le numéro de l étudiant ‘) ;
Readln(Et.num) ;
Writeln(‘introduire le nom de l étudiant ‘) ;
Readln(Et.nom) ;
Write(Fet, Et) ;
Writeln(‘saisir les information d un autre étudiant O/N ?’) ;
Readln(rep) ;
Until (upcase(rep)=’N’) ;

{Recherche d’un étudiant par son nom}


Writeln(‘introduire le nom de l étudiant recherché’) ;
Readln(Nomet) ;
Reset (Fet) ;
Trouve :=false ;
While (not EOF(Fet)) and (trouve=false) do
Begin
Read (Fet,Et) ; {accès à un étudiant}
If (Et.nom=NomEt) then
Begin
Trouve :=true ;
Writeln(‘ numéro de l étudiant ‘, Et.num) ;
Writeln(‘nom de l étudiant ‘, Et.nom) ;
End ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 4/18
Série et corrigé : Les fichiers
___________________________________________________________________________

{Recherche d’un étudiant par son numéro d’ordre dans la liste}


Writeln(‘introduire le numéro d ordre de l étudiant recherché’) ;
Readln(Numet) ;
Seek (Fet, Numet-1) ; {positionne le pointeur sur l’enregistrement Numet-1, car la numérotation
commence à zéro}
Read (Fet ,Et) ; {accès à l’étudiant se trouvant à la position Numet-1, }
Writeln(‘ numéro de l étudiant ‘, Et.num) ;
Writeln(‘nom de l étudiant ‘, Et.nom) ;
Close (Fet) ;
End.

Corrigé Exercice 2

Program Multiples5 ;
Var
Fmul5 : file of integer ;
Mul,i :integer ;

Begin
{Création du fichier Fmul5}
Assign (Fmul5, ‘D:\Fichmul5’) ;
Rewrite(Fmul5) ;
i :=1 ;
Repeat
Mul :=i*5 ;
Write(Fmul5, Mul) ;
I :=i+1 ;
Until (Mul >=1000) ;

{Affichage du fichier Fmul5}


Reset(Fmul5) ;
Writeln(‘Les multiples de 5 contenus dans le fichier sont :’) ;
While (not EOF(Fmul5)) do
Begin
Read(Fmul5, Mul) ;
Writeln(Mul) ;
End ;

Close(Fmul5) ;

End.
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 5/18
Série et corrigé : Les fichiers
___________________________________________________________________________

Corrigé Exercice 3

Program triefichier ;
Const
N=20 ;
Type
Fich = file of integer ;
Tab= array[1..N] of integer ;
Var
F : Fich ;
E,i,j,x :integer ;
A :Tab ;

Procedure creation (Var F1 : fich) ; {Création du fichier F}


Var
E,i :integer ;
Begin
Assign (F1, ‘D:\FichF1’) ;
Rewrite(F1) ;
For i :=1 to N do
Begin
Writeln(‘introduire un entier’);
Readln(E) ;
Write(F1, E) ;
End ;
Close(F1) ;
End ;
Procedure Affichage (Var F1 : fich) ; {Affichage du fichier F1}
Var
E :integer ;
Begin
Assign (F1, 'D:\FichF1') ;
Reset(F1) ;
While (not EOF(F1)) do
Begin
Read(F1, E) ;
Writeln(E) ;
End ;

Close(F1) ;

End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 6/18
Série et corrigé : Les fichiers
___________________________________________________________________________
Procedure AffectationF1_to_T (var F1 : fich ; var T :Tab ) ; {Affectation du contenu de F1 au vecteur T}
Var
E,i :integer ;
Begin
Assign (F1, ‘D:\FichF1’) ;
Reset(F1) ;
i :=1 ;
While (not EOF(F1)) do
Begin
Read(F1, E) ;
T[i] :=E ;
I :=i+1 ;
End ;
Close(F1) ;
End ;
Procedure trievecteur (Var T : Tab) ; { tri du vecteur T}
Var
i,j,x :integer ;
Begin
For i :=1 to N-1 do
For j := i+1 to N do
If (T[i]> T[j]) then
Begin
X :=T[i] ;
T[i] :=T[j] ;
T[j]:=X ;
End ;
End ;

Procedure AffectationT_To_F1 (T :Tab ;Var F1 : fich) ; {Affectation du contenu trié du vecteur


T au fichier F1}
Var
i :integer ;
Begin
Assign (F1, ‘D:\FichF1’) ;
Reset(F1) ;
For i :=1 to N do
Write(F1, T[i]) ;

Close(F1) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 7/18
Série et corrigé : Les fichiers
___________________________________________________________________________
Begin {programme principal}

Creation (F) ; {Création du fichier F}


writeln('Affichage du fichier F avant le tri');
Affichage (F) ; {Affichage du fichier F avant le tri}
AffectationF1_to_T (F, A ) ; {Affectation du contenu de F au vecteur A }
trievecteur (A) ;
AffectationT_To_F1 (A, F) ;
writeln('Affichage du fichier F après le tri');
Affichage (F) ; {Affichage du fichier F après le tri}
End.
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers 8/18
___________________________________________________________________________
Corrigé Exercice 4

Program Carte_tel ;
Type
Date= record
J,M,A :integer ;
End ;
Top= record
CodeOp :integer ;
NomOp :string[15] ;
End ;
Carte= record
Num,Mont :integer ;
DateExp :date ;
Op :Top ;
End ;
Tfcarte= file of carte ;
Chaine= string[15] ;

Var
Fmobilis, Fc :Tfcarte ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE 9/18
Série et corrigé : Les fichiers
___________________________________________________________________________
Procedure creation (var F : Tfcarte) ;
Var
C :carte ;
Rep :char ;
Begin
Assign (F , ‘D:\Fichecarte’) ;
Rewrite(F) ;
Repeat
With C do
Begin
Writeln (‘Numéro de la carte’) ;
Readln(Num ) ;
Writeln (‘Montant de la carte’) ;
Readln(Mont) ;
Writeln (‘Date d expirationde la carte : jour, mois et année’) ;
With DateExp do
Readln(J, M, A ) ;
With Op do
Begin
Writeln (‘Code opérateur’) ;
Readln(CodeOp) ;
Writeln (‘Nom opérateur’) ;
Readln(NomOp) ;
End ;
End ;
Write(F,C) ;
Writeln (‘Saisie des informations d une autre carte O/N ?’) ;
Readln(Rep) ;
Until (upcase(rep) = ‘N’) ;
Close (F) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
10/18
___________________________________________________________________________

Function M2020 (var F :Tfcarte) : integer ;


Var
C :carte ;
Nbc :integer ;
Begin
Nbc :=0 ;
Assign (F , ‘D:\Fichecarte’) ;
Reset(F) ;
While (not EOF(F)) do
Begin
Read(F ,C) ;
If (C.Mont=1000) and (C.dateExp.A=2020) then
Nbc :=Nbc+1 ;
End ;
M2020 :=Nbc ;
Close (F) ;
End ;

Function Majuscule (S:chaine) : Chaine ;


Var
i :integer ;

Begin
For i := 1 to Length (S) do
S[i] :=Upcase (S[i]) ;

Majuscule := S ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
11/18
___________________________________________________________________________

Procedure Extraire (var F :tfcarte ; var FichMobilis : Tfcarte) ;


Var
C :carte;

Begin
Assign (F , ‘D:\Fichecarte’) ;
Reset(F) ;
Assign (FichMobilis, ‘D:\ carteMobilis’) ;
Rewrite(FichMobilis) ;
While (not EOF(F)) do
Begin
Read(F,C) ;
If (Majuscule (C.Op.NomOp) = ‘MOBILIS’) then
Write(FichMobilis, C) ;
End ;
Close (F) ;
Close (FichMobilis) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
12/18
___________________________________________________________________________

Procedure Affichage (var F : Tfcarte) ;


Var
C :carte;

Begin
Assign (F, ‘D:\ carteMobilis’) ;
Reset(F) ;
While (not EOF(F)) do
Begin
Read(F,C) ;
With C do
Begin
Writeln (‘Numéro de la carte ’,Num) ;
Writeln (‘Montant de la carte ’,Mont) ;
Writeln (‘Date d expiration de la carte : jour, mois et année ’) ;
With DateExp do
Writeln(J, ‘/’, M, ‘ /’, A ) ;
With Op do
Begin
Writeln (‘Code opérateur ’, CodeOp) ;
Writeln (‘Nom opérateur ’, NomOp) ;
End ;
End ;
Writeln ;
End ;
Close(F) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
13/18
___________________________________________________________________________

Begin {Programme principal}


Creation (FC) ;
Writeln (‘le nombre de cartes répondant aux conditions est : ‘, M2020(FC)) ;
Extraire (Fc, FMobilis) ;
Writeln (‘Informations du fichier contenant les cartes Mobilis’) ;
Affichage (Fmobilis) ;
End.
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
14/18
___________________________________________________________________________
Corrigé Exercice 5
Program magasin ;

Const

N=50 ; Nbp=4 ; {N= Nombre de chaussure, Nbp=nombre de pointure par chaussure}

Type
Chaussure = record
Code :integer ;
Desig :string[30] ;
Pt :array[1..2,1..4] of integer ;
End ;
Fich =file of chaussure ;
Fich38 = file of integer ;

Var
Mag :fich ;
Ch :chaussure ;
Mag38 :fich38 ;
Cd,cdnew, Tot :integer ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
15/18
___________________________________________________________________________

Procedure creation (var Mg :fich) ;


Var
Ch :chaussure ;
i,j :integer ;
Begin
Assign (Mg, ‘c:\ fichierMg’) ;
Rewrite(Mg) ;
For i :=1 to N do
Begin
With ch do
Begin
Writeln(‘Code chaussure’) ;
Readln (Code) ;
Writeln(‘Désignation chaussure’) ;
Readln (desig) ;
For j :=1 to Nbp do
begin
Writeln(‘pointure chaussure ’, j) ;
Readln (Pt[1,j]) ;
Writeln(‘Quantité chaussure ’, j) ;
Readln (Pt[2,j]) ;
End ;
End ;
Write(Mg,ch) ;
End ;
Close(Mg) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
16/18
___________________________________________________________________________

Procedure recherche (var Mg :fich ; var F38 :Fich38 ; var Nb :integer) ;


Var
Ch :chaussure ;
Trouve :boolean ;
i :integer ;
Begin
Assign (Mg, ‘c:\ fichierMg’) ;
Reset (Mg) ;
Assign (F38, ‘c:\ fichierF38’) ;
Rewrite(F38) ;
Nb :=0 ;
While (not EOF(Mg)) do
Begin
Read(Mg, ch) ;
Trouve :=false ;
i :=1 ;
While (i˂= Nbp) and (trouve=false) do
Begin
If (Ch.Pt[1,i]=38) then
Begin
Trouve := true ;
Nb :=nb+ Ch.Pt[2,i] ;
Write(F38,Ch.code) ;
End ;
I :=i+1 ;
End ;
End ;
Close(F38) ;
Close(Mg) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
17/18
___________________________________________________________________________
Procedure Affichage (var F38 :fich38) ;
Var
Cd :integer ;
Begin
Assign (F38, ‘c:\ fichierF38’) ;
Reset (F38) ;
While (not EOF(F38)) do
Begin
Read(F38, Cd) ;
Writeln (‘code chaussure de pointure 38 est : ‘, Cd) ;
End ;
Close(F38) ;
End ;
Procedure modification (Cd1,Cd2 :integer ; var Mg : fich) ;
Var
Ch :chaussure ; trouve : boolean ;
Begin
Assign (Mg, ‘c:\ fichierMg’) ;
Reset (Mg) ;
Trouve :=false ;
While (not EOF(Mg)) and (trouve=false) do
Begin
Read(Mg, ch) ;
If (Ch.code=Cd1) then
Begin
Trouve :=true ;
Seek (Mg, Filepos(Mg)-1) ;{repositionne le pointeur un pas en arrière car
Read(Mg, ch) fait avancer automatiquement le pointeur d’un pas}
Ch.Code := Cd2 ;
Write(Mg,ch) ;
End
Else
Writeln(‘le code de la chaussure n existe pas dans le fichier’) ;
End ;
Close (Mg) ;
End ;
UMMTO - Département MI
Module : ASD2
Chargée de cours : S. ILTACHE Série et corrigé : Les fichiers
18/18
___________________________________________________________________________

Procedure Affichage2 (var Mg :fich) ;


Var
Ch :chaussure;
Begin
Assign (Mg, ‘c:\ fichierMg’) ;
Reset(Mg) ;
Writeln (‘codes des chaussures et leur désignation’) ;
While (not EOF(Mg)) do
Begin
Read(Mg, Ch) ;
Writeln (ch.code, ‘ ‘, ch.desig) ;
End ;
Close(Mg) ;
End ;

Begin {programme principal}


Creation(Mag) ;
Recherche (Mag, Mag38,Tot) ;
Writeln (‘le nombre total de chaussures de pointure 38 est : ‘, Tot) ;
Affichage(Mag38) ;
Writeln (‘donnez le code de la chaussure à modifier’) ;
Readln (Cd) ;
Writeln (‘donnez le nouveau code de la chaussure à modifier’) ;
Readln (Cdnew) ;
Modification (Cd, Cdnew,Mag) ;
Affichage2 (Mag) ;
End.