Vous êtes sur la page 1sur 10

Algo

La variable enregistrement : Lenregistrement est une variable qui ressemble a un tableau (lenregistrement possde plusieurs cases) mais chaque case de lenregistrement peut avoir un type different (pas comme les tableau la ou les cases ont toutes le meme type) donc ; -lenregistrement est une variable qui peut avoir plusieur cases et chaque case peut avoir un type diffrent . -la representation des information dun eleve doit se faire dans une varible enregistrement . -la representation des information dun produit doit se faire dans une varible enregistrement . -la representation des information dun employ doit se faire dans une varible enregistrement . E Donn 1 Type1

Donn2 type2

Donne3

..

Donne N type N

type3

*remarque -un enregistrement est compos de plusieur champs (cases).chanque champ peut avoir un type different Si E est une variable denregistrement alors : E Donne1 Donne2 Donne3 .. Donne N Type1 type2 type3 type N

Exemple : Si E est une variable denregistrement eleve alors Nom prenom date deNaissance Cheboutti Amine 22 08 1990 Chaine[36] chaine[26]

Matricule section 115446 informatique longint chaine[30]

tableau[1..3]entier

*comment declarer une variable enregistrement : Il faut dabord cre un type enregistrement Type nom du type enregistrement =enregistrement Nom du champ1 :type1 ; Nom du champ2 :type2 ;

Nom du champN :typeN ; Fin ; Variable E :=type enregistrement ;

Exemple : Type Eleve =enregistrement Nom,prenom :chaine[26] ; Mat :entierlong ; DN :tableau [1..3]entier ; Section :chaine[40] ; Fin ; Var E :eleve ; Comment affecter une valeur a un champ denregistrement ? 1/pr le programmeur : Nom de la variable enregistrement .nom du champ :=valeur ; E.nom :=cheboutti ; 2/par lutilisateur : Write (saisir le nom) ; Read(E.nom) ; Write (saisir le matricule) Read(E.mat) ; Exercice : Realiser le programme suivant : Gestion eleve 1-crer un tableau denregistrement 2-ajouter un enregistrement 3-consulter un enregistrement 4-modifier un enregistrement 5-supprimer un enregistrement 6-trier le tableau denregistrement 7-afficher le tableau denregistrement 8-quitter

Taper vore choix :

Solution en application ALGO.etudesla RAMest une mmoire volatile. Zoooooo Remarque concernant le programme prcdant : Le programme prcdant gre les enregistrement mais a larrt dexcution du programme tous les enregistrements seront innaccessible meme sil ne sont pas effacs. a la mise a larret du PC les enregistrements seront perdus . Pourquoi ? Parceque le tableau denregistrements est une variable dont lespace est reserv dans la RAM et RAM est une mmoire volatile. Solution : Le stockage des donnes des enregistrements doit se faire dans une mmoire permanante et non pas volatile.

La mmoire permanente qui se trouve en permanence dans un PC est le disque dur ,donc le stockage se fait dans le disque dur. -les donnes sur le disque dur sont stocks sous forme de fichier -donc,le stockage des enregistrements doit se faire dans un fichier denregistrements. Les fichiers denregistrements : -un fichier denregistrement est compos de plusieurs enregistrements -un enregistrement est compos de plusieurs champs. champs -un champ denregistrement a un nom et un type. -le champ dun enregistrement contiendra la donne donn Exemple : Fichier denregistrement employ NSS Nom Prnom DN LN Adresse Poste Situation Occup Etudiant Clibataire Enseignat Mari Directeur Mari

5895195 Cheboutti Amine 4851245 Belaidi Nassim 345105 Meziane Hamid

22/8/90 Ainbenian Alger 11/3/1950 Alger 5 avenu.. 11/8/1970 Alger Lot c ,12..

Enregistrement Remarque : -les descripteur dun fichier est le nom du fichier+la liste des nom de tous ses champs et lindication du champ cl ou lindex -avec un champ index ,on peut identifier un enregistrement de manire unique. le descripteur du fichier employ est : employ(NSS ,Nom ,Prenom ,DN ,LN ,Adresse ,PosteOccup ,Situation)

champ cl *remarque : -Louverture dun fichier implique le chargement de son contenu dans la RAM -lcriture dun enregistrement dans un fichier passe dabord par la RAM Donc lorsquon stock les informations sur le disque (fichier), il faudra utiliser la RAM ou pour tre plus prcis , utiliser une variable dans la RAM qui contiendra le contenu du fichier denregistrements. *si on utilise une variable qui contient le contenu du fichier alors cela implique une dclaration de la variable . Quel est le type de cette variable ? Rponse : Type fichier denregistrement logique. *un fichier denregistrement logique est une variable qui a une correspondance ou un lien avec le fichier denregistrement qui se trouve dans le disque dur (fichier physique) *dans un programme qui utilise les fichiers denregistrements, toutes les operations sur les enregistrements dun fichier denregistrement doivent se faire sur la variable logique *dans un programme qui utilise un fichier denregistrement ,le nom du fichier physique doit apparaitre ou tre manipul une seul fois au dbut du programme pour indiquer la correspondance ou lassignation du fichier logique au fichier physique *Comment dclarer la variable logique fichier ? 1/dclarer le type enregistrement

Type

nom type enregistrement = record Nom champ1 : type1 ; Nom champ2 : type2 ;

Nom champ N : type N ; End ; 2/declarer le type fichier denregistrement logique nom du type fichier enregistrement logique = file of nom type enregistrement ; 3/declarer la variable logique fichier VAR Nom variable :nom du type fichier denregistrement logique ; Exemple : Type Employe = record NSS :longint; Nom : string [26] ; Prenom : string[26] ; DN :array [1..3]of integer ; LN :string [50] ; Adresse: string [50]; P O: string [26]; Situation: string [26]; End; FE=file of Employee; Var Fe : Fichemp; Nom de la variable logique. *Comment assigner un fichier (faire le lien entre le fichier physique et logique) ? ASSIGN(Nom variable logique fichier , chemin du fichier physique) ; Chemin :Nom du fichier + son emplacement -un ficher denregistrements a lexention (.DAT) 1. -le chemin est une chaine. Exemple : ASSiGN (Fe , c:\employe.dat) ; *remarque : -Avant de lire une information dun fichier il faudra ouvrir se fichier -avant decrire une information dans un fichier ,il faudra ouvrir ce fichier *comment ouvrir un fichier qui existe dj ? RESET( nvlf) ; Nvlf=nom variable fichier logique Exemple : Reset(FE) ; *comment crer un nouveau fichier denregistrement ? -rewrite (nvlf) ; *remarque : -Apres un certain nombre doperations appliques sur un fichier ,il faudra le fermer. *comment fermer un fichier ? Close(nvlf) ; *comment avoir le nombre denregistrement contenu dans le fichier ?

Il faut utiliser la fonction filesize(nvlf) ; *la fonction E O F (nvlf) : E O F end of file Cette fonction est un fonction boolenne .ELLE donne si oui ou non on a atteint la fin du fichier. *remarque : -on peut utiliser cette fonction pour parcourir un fichier tant quon a pas atteint la fin du fichier : While not EOF(Fe) do begin Actions; End; *Remarque: Lorsquon ouvre ou on cre un fichier denregitremnt le pointeur denregistrement pointe le premier enregistrement Exemple : Position=0 Position=1 Position=2 Position=3 enregistrement n1 enregistrement n2 enregistrement n3 enregistrement n4

donc ,position= enregistrement-1 *Remarque : Le premier enregistrement se trouve a la position 0 *comment placer le pointeur denregistrement a la position i ? Seek (nvlf,i) ; *pourquoi pointer un enregistrement ? On pointe lenregistrement pour le lire ou le modifier ou le supprimer On pointe une position pour ecrire un enregistrement. *COMMENT SUPPRIMER UN FICHIER ? Erase(nvlf) ; *comment lire un enregistrement a partire dun fichier ? 1/pointer lenregistrement 2/read(nvlf, nom de la variable enregistrement) ; Exemple : Read(Fe,E) ; *comment ecrire un enregistrement dans un fichier ? 1/pointer la position 2/write(nvlf, nom de la variable enregistrement) ; Exemple : Write(Fe,E) ; *remarque : Si on utilise un read(Fe,e) ou un write(FE,e) alors le pointeur denregistrement passe a la position suivante automatiquement . Un fichier est toujours parametr en entre/sortie

Exercice :

Realiser le programme suivant : Gestion eleve 1-crer un fichier denregistrement 2-ajouter un enregistrement 3-consulter un enregistrement 4-modifier un enregistrement 5-supprimer un enregistrement 6-trier le fichier denregistrement 7-afficher tous les enregistrements 8-quitter

Taper vore choix :

la trace Procedure tri : reset(fe) tq F1 non rempli lire E de fe suposer le 1er de fe dans min tq non fin fe lire E de Fe rechercher le min ecrire le min dans F1 fermer Fe ouvrir Fe crer Fe tq non fin Fe lire lenregistrement E si E nest pas min alors envoyer vers F2 fermer Fe supprimer Fe recrer Fe (vide) fermer F2 ouvrir F2 tq non fin F2 lire lenregistrement de Fe ecrire lenregistrement dans Fe fermer Fe ; ouvrire Fe ; fermer F2 ; supprimer F2 ; fin fermer F1 ; ouvrir F1 ; tq non fin F1 lireE de F1 ; ecrire E dans Fe ; fermer F1,F2 ; ecraser F1 ;

exercice : on suppose quun fichier denregistrement employe.DAT existe sur le disque dans la racine D : -on suppose aussi que le descripteur de ce fichier est le suivant : Employ(NSS,Nom,Pren,DN,LN,Adr,statut,poste-oc,salaire,DDD,situation) Questions : 1/ecrire la procedure qui a partir du fichier employe.DAT cre deux fichiers perma .dat et vac.DAT.le premier contient les enregistrements employs permanents et lautre les vacataires 2/ecrire une procedure qui affiche tous les enregistrements employ maris 3/ecrire une fonction qui donne le nombre demploys dont le salaire est inferieur a 20000DA 4/ecrire une fonction qui donne le nombre demploy dont lexperience est 20ans Note : DDD :date de debut dembauche Solution : Type employe=record ; NSS :longint; Nom,pren:string[26]; DN:array [1..3]of integer; LN:string; Adr:string; Stat:string; Pooc:string; Sal:real; DDD:array[1..3]of integer; Sit:string; End; Fichemp=file of employe; Procedure crefichs ( var fe,f1,f2:fichemp); Var E:employe; Begin Assign(fe,d:\employe.dat); Assign(f1,D:\perma.DAt); Assign(f2,D:\vacc.Dat); Reset(fe); Rewrite(f1); While not EOF (fe) do begin Read(fe,e); If E.stat = perm then write (f1,E); Else write (f2,e); End; Close(fe); Close(f1); Close(f2); End;

3/ Procedure affE (E:employe); Begin Writeln(num SS:,E.NSS); Writeln(nom : ,E.nom); Writeln(prenom:E.pren); Writeln(date de naissance :,E.DN*1+,/,E.DN*2+,/,E.DN*3+) ; Writeln (adresse : ,E.ard); Writeln(statut:,E.stat); Writeln(salaire:,E.sal); Writeln(situation: ,E.sit); End; Procedure affich(var fe:fichemp); Var E:emplye; Begin Assign(fe,d:\employe.dat); Reset(fe); While not eof (fe) do begin Read(fe,E); If E.sit=mari then affE(E); End; Close(fe); End; 3/ (fe, Function nb(var fe:fichemp):integer; Var X:integer; E:employe; Begin Assign(fe,D:\employe.dat); Reset(fe); X:=0; While not EOF (fe) do begin Read E); If E.sal <20000 then x:=x+1; End; Nb:=x; Close (fe); End; 4/ Function nomb1(var fe:fichemp):integer; Var X:integer; E:employe; Begin Assign(fe,D:\employe.dat); Reset(fe);

X:=0; While not EOF (fe) do begin Read (fe,E); If 2012-E.DDD[3] =20 then x:=x+1; End; Nomb1:=x; Close(fe); End; Exercice 2: on suppose quun fichier denregistrement employe.DAT existe sur le disque dans la racine c : -on suppose aussi que le descripteur de ce fichier est le suivant : Produit(codeP,designation,prix unitaire, date fabri, date de peremption , quantit stock) Question : 1/ecrire la procedure qui a partir du fichier produit.dataffiche la quantit le stock du produit paracetamol 2/crire la procedure qui a partir du fichier produit.dat cr un nouveau fichier perim.datcontenant tous les enregistrements des produits prim. 3/crire une fonction qui donne le nombre des boites dont le prix unitaire dpasse 3000DA et la date de premption est janvier 2013. Solution : Type media =record codeP :longint ; desi :string[50] ; PU :real ; DF :array [1..3]of integer ; DP :array[1..3]of integer ; QTTE :integer ; End ; Fichemed = file of medica ; Procedure quant(var fe : fichemed ;) ; Var E:medica; Q:integer; While not EOF (fe) do begin Read(fe,e); If E.desi =paracetamole then Q:=Q+E.QTTE; End; Close(fe); Write(la quantit est ,Q) ; End ; Procedure perim (var fe,f1:fichmed); Var E:medica; Begin Assign(fe,C:\produit.dat);

Assign(f1,C:\perim.dat) ; Reset(fe); Rewrite(f1); While not EOF (fe) do begin Read (fe,e); If E.DP[3] < 2012 then write(f1,e); If E.DP[3] =2012) and (E.DP[2] <10) then write( f1,e); End; Close(fe); Close(f1); End; Function nb(var fe : fichemed); Var X:integer; E : medica; Begin Assign(fe,C:\produit.dat); Reset(fe) ; X :=0 ; While not EOF(fe) do begin Read(fe, e); If (E.pu>3000)and(E.DP[3]=2013)and (E.dp[2] =01)then x:=x+E.QUT; End; Close(fe); Nb:=x; End;