Download as pdf
Download as pdf
You are on page 1of 57
1 — Introduction I - Mise a jour d'un fichier d'organisation séquentielle | | L — Edition sur imprimante IV — Appareillage de deux fichiers | V_ - Mise a jour d'un fichier organisation séquentielle indexée VI = Mise a jour d'un fichier dorganisation relative I | VIL - Application 1: Gestion de bibliothéque wion2:Gostionce | AS x - Apoications Gestion de fichiers 1 — Intreduction Toutes les structures de données qu stockées en mémoire, c'est-2 durée de vie d'une variable est égale au temps comprenons facilement que cette solution nous avons disquette, une ban Nous connaissons [es instructions pour changer -dire dang une zone vol utilisées jusqu’2 maintenant étaient jatile de la machine. En mémoire, la dexécution du programme. Nous ‘est pas envisageable pour Finfermatisation done entreprise. Les donnges concernant un employ’ contrat doivent Gre mémorisées plus longtemps que Ia durée dun pro valeurs (raitées doivent @tre recopies sur un support non volati roduit, un fournisseur ow un ramme. Les n disque, une un des valeurs entre Tu machine, a Taide du clavier et de I'écran : SAISTR ct AFFICHER, découvrons cell déchanges entre V'ordinaieur et le support non volatile ¢'informations : LIRB, ECRIRE, REECRIRE, SUPPRIMER, ... MEMOIRE DISQUE 1 ™ ~<—LIRE | ECRAN ~~ AFFICHER — ECRIRE - ‘ JZ | 1_-REECRIRE > | ICLAVIER SAISIR. ——— —[. SUPPRIMER >> 152 © ALGORITHMES » COURS ET EXERCICES Exempte 1 58) FONTAINE 49) DURAND 61, ABAR__38) ROLAND $5; Une instruction de lecture, LIRE EMPLOYE, copie du disque vers la mémoire les informations g'UN employ. Deux variables déclarées en mémoire ident fiants NOM et DATNAIS regoivent les informations lues. NOM DATNAISS, fire DUPONT 58 DUPONT 58 _, FONTAINE 49... <—_— Une instruction diécriture, ECRIRE EMPLOYE, copie les informations en mémoire sur tune place libre du support : NOM DATNAISS éorite — ..;ROLAND 55; FLEUR 62 FLEUR 62 oe Une instruction de réécriture, REECRIRE EMPLOYE. recopie les informations en mé- re 3 la place des derniéres informations Ives, Aprés [instruction de lecture amenant les tions de Temployé "DUPONT" en mémoire, si nous ajoutons "1" & sa date de nais- @:corrigeons lorthographe du nom en remplagant le "T"' par un "DB", nous obtenons : DATNAISS lise © DUPONT 58) FONTAINE 59, 58 =< affectation en mémoire des nouveaux contenus a régerice DUPOND 59 , FONTAINE 49, DUPOND 59 _— Une instruction de suppression, SUPPRIMER EMPLOYE, met a jour un indicateur devant les detnigtes informations lues, pour indiquer que, logiquement, ces valeurs ne sont plus traitées. Nous parlons de suppression logique et non physique. La suppression physique nécessite deffectuer un décalaye de toutes les informations vers ta gauche, mais ¢¢ traitement risque diéire tres jong ! Apres fa lecture des données concernant lempioyé "PONTAINE”, une instruction de suppression provoque cect NOM DATNAISS lire DUPOND 59 | FONTAINE 49 |... FONTAINE 49 ~—. FONTAINE: 49 supprimer DUPOND 59)* FONTAINE 49 |... ~~ a . (le caractire "*" est supposé tre Tindicateur de suppression) LES FICHIERS 155 DEFINITION Nous nommons ENREGISTREMENT (anicle ou enregistrement togique} la collection diinformations mémorisées pour deéfinir UN des objets taités, Nous appelons FICHIER la colleetion des enregistrements. FICHIER FIC-EMPLOYE ENREGISTREMENT rubriques : nom-employé, date-de-naissance valeurs > DUPOND,59 FONTAINE, 49 DURAND .. Il - Mise & jour d'un fichier d'organisation sequentielle DEFINITION Une premiére solution pour implanter les enregistrements sur le support est lorganisation séquentielle. Les entegistrements sont éerits les uns & la sue des autres, Ia lecture commence toujours par Je premier, puis le second, son suivant et som suivant jusqu‘au dernier. DECLARATION ET INSTRUCTIONS Nous déclarons un fichier ainsi ; FICHIER (ORGANISATION SEQVENTIELLE) ENREGISTAEMENT «rubrigue-1> : : ¢rubrique-3> + PIN-ENRECTSTREMENT La premiére instruction du programme est ouverture du fichier, elle indique si le fichier va éire lu (L) ou écrit (E), ou lu, éerit et mis a jour (LYE). OUVRIR (LI tE) {LJE} La dernitre instruction du programme est Ja fermetute du fichier. ““s PERMER 154 ALGORITHMES - COURS ET EXERCICES Les autres instructions ne concernent pas globalement le fichier mais un de ses enregistrement, nous les notons ECRIRE LIRE SE FIN-FICHISR ALORS SINON FST La lecture nécessite un test, car les lectures séquentielles se terminent lorsque tous les enregistrements ont été lus un 4 un. Un indicateur dooléen du systtme de gestion de fichier nous permet d'identifier Ic fait quill n'y a plus d'enregistrement & lire, nous le nommons FIN-FICHIER. REECRIRE nom-eriregiatrement-fichier SUPPRIMER nom-enregist rement-fichier Les deux derniéres instructions ne peuvent étre exécutées qu'aprés la lecture d'un enzegistrement. C'est lenregistrement le plus recemment lu qui est concerné par Topération de régcriture ou de suppression. Seuls les supports adressables (disques et disquettes) permettent Texécution de ces deux demiers ordres. @ Algorithme — exercice 1 CREATION d'un fichier séquentie! sur disque des employés d'une entreprise, contenant le nom, le prénom, la date de naissence et la fonction de 'employé. METHODE — Déclaration du fichier employé. — Saisie des valeurs et stockage en mémoire, ~ Validation des informations saisies. ~ Ecriture des données de la mémoire sur le support. — Question 2 l'utilisateur pour recommencer ou non le waitement de saisie. programme création fichier employé (organisation séquentielle} enregistrenent enr-employé e-nen cazactéres e-prénom caractéres: e-datnais entier e-fonction = caractéres fin-enregictrement (* nocons la présence di préfixe e- pour différencier Jes rubriques ces fichiers et les variables mitcires. La lettze "e" est sinplenent Atinitiale da non du fichier *) var réponse, valid : caractéres LES FIGHIERS: 156 début (* ouverture du fichier *) ouvrir employé (B) répéter afficher “donner le nom et le préncm" saigiy c-nom, e-prénon afficner “donner la date de saissance” gaigir e-datnais afficher "donner la fonction de L'employé” saisir e-fenction afficher "velidez-vons Leg informations saisies {o/n) 2" saisix valid si valid = "o" alore (* éceiture sur disque ~) ecrire enr-cmployé isi (* question & ltutilisabeur "1 afficher “autre employ a saisir (e/ab 2" saisir réponse 4qa zéponse = "a" (* fermeture du fichier *) Fermex employe fin @ Algorithme — exercice 2 AFEICHAGE sur !'6cran de toutes les informations contenues dans le fichier. ‘METHODE ‘Nous prenons Mhabitude d'effectuer une premidre lecture du fichier, pour différencier le ‘cas d'un fichier vide (fin de fichier dés Ia premiére lecture), et le cas de I fin du traitement des enregistrements d'un fichier (fin de fichier rencontrée dans une boucle}. ~ Premitre lecture. ~ Boucle de lecture séquentielle et @affichage (nous faisons attention & traiter le premier enregistrement lu, avant deffectucr une nouvelle, lecture). programe affiche fichicy employé (organisation séquentielle) enregistrement enz-employé ene caractéres e-prénom =: caractézes e-datnais entier e-fonction : caractéres fin-enzegist rement début (* ouverture du fichier *) ouvrir employe ¢L) (* premigze lecture *) Lire enr-employé si fin-fichier 156 ALGORITHMES - COURS ET EXERCICES alars afficher “le fichicr des employés est vide" sinon afficher "affichage du fichier des enployés” afficher “ nom prénem date naiss. fonetion * rapeter afficher e-nom, e-prénom, e-datnaiss, e-fonetion lire enr-enployé jqa fin-fichier fsi fermer employé fin B Algorithme - exercice 3 CONSULTATION des informations stockées sur un employé de lentreprise, nous le s6lectionnens par son nom. METHODE ~ Saisie du nom recherehé. — Lecture du premier enregistrement. = Lecture du suivant jusqu’’3 ce que la recherche aboutisse ou échoue. ~ Affichage des informations a consulter. 5 programme consultation fichier employé (organisation séquentielley enregistrement enr-employé e-non : caractéres e-prénom ceractéres e-datnais entier e-fonction : caractéres fin-enregi st rement var nom : caracteres trouvé : beolées début (* ouverture du fichier *) ouvrix enploye (L} afficher "donner le nom recherche" saisir nom (* premiave lecture *) ire enr-cmpioyé Si fin-fichier alors afficher "le fichier des amployés est vide" sinon (* recherche de L'enregistrement de l'employé *) recherche (employé, nom, trouvé) (* affichage du résultat de la recherche +) si non trouvé alors afficher nom, " n'est pas dans cette entreprise" sinon afficher e-nom, e-prénom, "mG le ", o-datnaiss afficher “travaille dans cette entreprise " afficher “avec la fonction de *, e-fanction fsi fsi (* fermeture du fichier *) fermer employs fin LES FICHIERS 157 procédure recherche (dontées : enployé, élément resultat : trouvé) var fini : booléen début fini & .faur. trouvé —e-non = élément (* recherche séquentielle *) tant que nen trouvé et non fini lire enz-employé si fin-fichter alors finie vrai sinon trouvé Ce-nom ~ élément tsi fq fin REMARQUE Nous devons utiliser une boucle itérative et non sépétitive, car le premier enregistrement déja lu peut ire celui techerché. Ceci nous oblige & utiliser un booléen (fini) pour repérer Ja fin de fichier, car le booléen du sysiéme (fin-fichier) ne peut éire testé qu'une seule fois et juste aprés T'instruction de lecture, Nous utiliserons le booléen “fini” de nombreuses fois par la suite, & Algorithme - exercice 4 MODIFICATION de la fonction d'un employé, désigné par son nom. METHODE — Saisie du nom de I'employé concemé par la modification. — Recherche de l'enregistrement de cet employé dans le fichier (ce waitemem est identique a celui effectué pour 1a consultation), ~ Saisie de la nouvelle fonction. — Mise & jour de Nenregistrement du disque. programe nodif igat Lor fichier employé (organisation sequent ielle) enregistrement enr-anplayé } Caracténes caraczercs bo entier fin-cnregistrenent var nom : caTactéres rrowmé + hooleer put ouvric employe (u/B) afficher "dennez le som de Ltomployé qui change de fonction 7 saisir non ( recherche *} kecherche (employs, now, Lrouvé) (* traitenent #} si trouvé 158 ALGORITHMES - COURS £T EXERCICES alors afficher "modification de “, e-nom, ¢-prénom afficher “fonction de", e-fonetion afficher “doaner la nouvelle fonction " saisir e-fonetion is rééceiture sur le disque *) reéerire enr-employé sinon afficher nem, “ne travaille pas dans cette entreprise |" fei fermer employs fin @ Algorithme — exercice 5 SUPPRESSION diun employé de lentreprise. METHODE Nous prenons I’habitude de demander une validation a l'utilisateur avant d’exécuter liinstruction de suppression logique dans le fichier. Un enregistrement peut contenir des informations ts importantes et difficiles & reeonstituer, et leur suppression par erreur nest pas toujours réparable. — Saisie du nom de 'employé qui quite 'entreprise. — Recherche de lenregistrement concemant cet employé dans le fichier (ce traitement est identique 4 celui effectué pour Ta consultation ou la modification). — Affichage de lenregistrement et saisie de 1a validation de la suppression. — Suppression logique de l'enregistrement. progranme suppression fichier employé (organisation séquentielle) enregistrement enr-enployé e-nom : caractéres e-prénom ©: caractéres e-dstnais : entier e-fonction : caractéres fin-envegisrrement var nom, réponse : caractéres trouvé : boolten début ouvriy employe (L/E) afficher “donner le nom de L'employé qui part “ saisir nom (* recherche *) zachexche (employé, nom, trouvé) (* traitement *) si trouvé alors (* demande de validation *) afficher "validez-vous la suppression de ", e-nom, e-prénom afificher "né le ", e-datnaiss afgichar “romplissant la fonction de", e-foretion, " (0/N) 2" saisir réponse LES FICHIERS 159 si réponse = "0" alors (* suppression sur disque *} supprimer eny-employé tsi ginonafficher nom, "ne travaille pas dans cette entreprise” esi fermer enployé tin lil - Edition sur imprimante ‘1- EDITION SIMPLE Nous différengons l'affichage 4 l'écran des informations d'un fichier et l'édition & l'imprimante de ces mémes données, Nous constatons que chaque utilisateur posséde toujours un écran individuel, mais raement une imprimante personnelle, il ne peut pas “imprimer quand il le désire. Nous effeciuons des IMPRESSIONS DIFFEREES en constituant une copie de l'état désiré dans un fichier stocké sur le disque, et en demandant par la suite au systéme d'exploitation déditer ce fichier intermédiaire. L“imprimante n'est pas Tetardée par les calcufs contenus dans le programme, ni par le temps de recherche des cenregisirements, elle ne risque pas d'éire mise hors service par un programme qui se termine de fagon anormale. Le fichier intermédiaire doit Gwe déclaré, i] est toujours organisé en séquentiel, ses enregistrements sont de Ja taille du papier d'impression (40, 80 ow 132 caractéres). Nous différengons plusicurs types denregistrement : un ou plusieurs d'en-téte, un ou plusieurs de détail, un ou plusieurs de tolaux. Nous mumérotons séquentiellement chaque ligne distincte en la préfixant par le mot “ligne”. Exemple ; Etat 'édition des employés de le société. Nous remarquons importance de dater tous les listings. entée: ligne] : ETAT DES EMPLOYES. ligne 2 AU \ igne3 | NOM PRENOM DATNAISS. FONCTION detail ligne# | —— ——— ee —_— i ee ie _— ae total ligne 5 NOMBRE TOTAL DEMPLOYES ; —— NO 160 ALGOAITHMES - COURS ET EXERCICES Nous déclarons chaque type de tigne, soit en constante, soit en variable, Dans le second cas, nous déclarons autant de variables que de rubriques non fixes & l'édition (nous prenons I'habitude de ies préfixer par fa lettre “I” et le numére de ligne of elles se touvent). Cas denoteexemple: ligne 1 constante ligne 2 ung variable : date-du-jour 12-date ligne 3 constante ligne 4 quatre variables : nom-employé 14-nom prénom-employé — 14-prénom date-de-naissance — 14-date fonction I4-fonetion ligne § une variable + total-employé 1S.tot DECLARATION ET INSTRUCTION Le fichier d'édition est déclaré comme suit : FICHIFR (ORGANISATION SEQUENTIELLE) ENREGISTREMENT : ceractares P IN-ENRESI STREMENT Linstruction d'€criture dams ce fichier indique la ligne concernée par l'action d'ecriture, ECRIRE {ligne-x, apréy savt de pagel SCRIRE (Ligne-x, aprés saut a lignes) & Algorithme - exercice 7 Edition du fichier des employes. wi¢ par ordre décroissant sur la date de maissance. Livtlitaire de wi du systtme Pexploitation permet Gordoaner les enregisirements sur ce critére, et l'algorithme d’édition utilise le fichier résultat du ti. Nous possédons des feuilles de 50 lignes imprimables et désirons Ja présentation suivante. LES FICHIERS: 163 en-téte : ligne 1 L ETAT DES EMPLOYES PAR AGE. PAGE : — 2 ligne2 3. AU 4 3 ligne3 6 =| DAT.NAISS. FONCTION NOM PRENOM 7 detail: Hignes 8 | py — 9 i] + — TL 12 — METHODE ~ Déelaration des fichiers employé et érat ~ Déclaration des lignes, ~ Premitre lecture du fichier employé. = Initialisation du compteur de page. = Eeriture des lignes d'en-iéte, inerément du compteur de page et initialisation du compteur de lignes, = Boucle ~ comparaison du compteur de ligne et du maximum de lignes par page — en eas de dépassement, éeriture des lignes d'en-téte inerément du compteur de page et réinitialisation du compteur de lignes = Gcriture de la ligne détail — incrément du compteur de lignes — lecture de lemployé suivant. Liécriture des lignes d'en-ttte apparaissant deux fois dans la méthode, les instructions correspondantes forment un sous-programmie. REMARQUE Le test de dépassement de capacité de page est fait au début de la répétitive et non Bi la fin de celle-ci, pour éviter de préparer l'en-téte sur une nouvelle page, alors que nous venons de waiter le dernier enregistrement ! progranme éditicn fichier employe (organisation saquentiellep enregistrement. enr-empioyé e-non : garacteres eeprénom caractéres, e-datnais ; cntier e-fonetien +: earactéres fin-enregistrement fichier etat (organisation séquentielle! enregistrement enr-étar 164 ALGORITHMES - COURS ET ENERCIGES ligne: caractéres fin-enregist rament sonst Ligne? var 11-page,12-date, 14-date,numpage,nblione ; entiers 14-nom,14-prénom, 14-fonet ion : caractéres début cuveir employé (LI état ie) Lire enr-omploye si fin-fichier alors afficher "fichier employé vide, édition impossible” sinon nompage = 0 l2-date © datsyst gnctéie (ligne2, ligne3, lignel, état, numpage, nbligne) répéter Si nbligne >= 30 aloes sores (Ligne?, ligne}, lignel, tat, mpage, eblisre) fst 14-nom < e-nom J4-prénom © e~prénom idedare « e-datnais Id-fonceion + e-fonction écrire enr-etat (lignes, apeés saut 1 ligne} nbligne nbligne + 2 lize enr-enployé qa fin-£ichier fai fermer employe, état fin procédure ennéte (données + ligne2, 1igne3 données modifiées : lignel, état, munpage résuitat : nbligne) début rumpage € mutipage ~ 1 Li-page @ numpage gerire enr-état (lignel, aprés saut de page) Scrire enr-état (ligne?, aprés saut 1 Lisne) écxire enr-état (ligne3, aprés saut 2 lignes) nbligne + 6 fin p - EDITION AVEC RUPTURES m Algorithme - exercice Edition des employés regroupés par fonctions. L'algorithme est écrit en supposant que le ui des enregisirements a t€ effectué précécemment par un tilitaire du systéme exploitation, seule la mise en page est 4 prévoir. LES FICHIERS 165 OS en-téte ligne 1 ETAT DES EMPLOYES PAR FONCTION ligne 2 AU SiI— en-t@te-fonction ligne 3 FONCTION :. ligne 4 NOM PRENOM DATE DE NAISSANCE dgtail ligne 5 a Se se a total-fonction ligne 6 NOMBRE EMPLOYES : — ce o de nouveau des lignes 336 total ligne7 | NOMBRE TOTAL DIEMPLOYES : — NN METHODE ~ Déclaration des fichiers employe et &at. — Déclaration des lignes d'€dition, — Premitre lecture du fichier employé. — Ecriture des lignes d'en-téte, Initialisation du total-enireprise, —Boucle — écriture des lignes den-téte-fonetion initialisation du total-fonction = boucle — éerituse de fa ligne détail inerément du toral-fonction = lecture de l'employé suivant — Goriture de la ligne total-fonction ajout du totat-fonetion su total-entreprise ~~ Ecriture de la ligne total-entreprise. REMARQUE La difficuleé est de trouver les conditions d'arrér des deux boucles utilisées : La premitre attend lq fin de fichier pour se terminer, elle utilise un booléen du pro- gramme FINI et non fe booléen du sysitme FIN-FICHIER, car le test darrét ne se trouve pas immédiatement aprés la lecture séquentietle du fichler. (Rappel : le test du booiéen du systéme n'est réalisable qu'une seule fois et immédiatement apris instruction de lecture !) — La seconde boucle attend, soit le changement de fonction du prochain employé a traiter, it la fin du fichier. Le changement de fonction, appelé rupture, est difficile & détecter, ar il n'y a.en mémoire, 2 un moment donné, qu'un enregistrement. IL est done impossible de comparer fe contenu de la tubrique “fonction” actueliement en mémoire avec le contenu gui s'y trouvait précédemment | Pour toute rupture, nous devons stocker le contenu de la variable servant A Ja déceler dans une case mémoire particuliére, nous Yappelons "nom-variable-TRAITEE”. 166 ALGORITHMES - COURS ET EXERCICES programme édition-ruptace fichier amployé (organisation séquentielley enregistrement: enr-emp_oys e-nom, > caractéres exprénon =: caractéres e-datnais extier e-fonction : carectéres fineenregistrenent, fichier état (organisation styuenticlle) enregistroment enr-état ligne : caracteres fin-onregistrencent const. lignel, Ligned var i2-date, 15-date, Lé-tat, 1?-Lot : entiers 13-fonez in, 1S-nom, 1S-prénon : caractéres tot-fonetion, tet-entreprise : entiers fonction-traitée : caractéres fini : booléen début. ouvelr employe (L) état (E) lire ent-amployé ai fln-fichle: alors afficher “fichier employe vice, sdition impossible “ sinon fini © faux. La-date @ datsyst ( contraction de deux instructions @'écriture édition «) é@crire enr-gtat «ignel, vigne2) tot-entreprise = C reépéter L3efonct ion @ aefonet ion @erire enz-état (ligne?, Ligned) Fonet ion-trainée + e-fonet ion tot+tonction = 0 repérer Ib-non + e-non 15-prénom © er prénon IS-date # c-astnais écrire enr-état (Ligne) tot-fanecion + tot-fonction + 1 lecture suivant *) fine enr-employs si fin-ficnier alors fini © vrai Esi jaa fini ou fonction-traitée <> e=fonction 16-rot — vot—ferction écrire enr-état (lignes) totventreprise € tot-entreprise + tot-fonction jqa fini Li-tot & tot-entreprise écrire enr-état (ligne?) fei Sermar employé, état fin LES FIGHERS. @ Algorithme — exercice 9 167 Novs voulons obtenir l'état suivant. & partir du fichier RESULTAT contenant un article par bureau de vote et tré sur département, ville et burest, Fichier RESUETAT organisation séquentietie — numéro de département rep: — nom de ville rvil ~ numéro de bureau de vote r-bur — nombre diinserits ins — nombre de votants rvot nombre de suffrages par lise list (E:3) tableau — a — I RESULTAT DE VOTE 2 3 pu a 4 3 6 DEPARTEMENT — 1 & VILLE 9 10 BUREAU INSCRITS VOTANTS EXPRIMES LISTE! LISTE2 LISTE3 u 12) — —> Ss — —— — 13 14] 18) VILLE(EN%) — —%* —% 16 17. reprise des lignes 8 & 15 pour les autres villes du méme département... 18 19 DEPARTEMENT (EN %) :_ —#% —% ——% —% 20) 21) ...reprise des lignes 6 & 19 pour les autres départements 22). 23) PAYS: — INSCRITS VOTANTS EXPRIMBS LISTEL LISTE2 LISTE3 24) 25, TOTAUX, ——— — —— — —_ — — — 26 i 27,/BN POURCENTAGE = ——% —%& —& _% Ye NB : nous affichons les pourcentages en valeurs entires. 168 ALGORITHMES - COURS £T EXEACICES TRAVAIL A FAIRE 1) Numéroter les lignes d'édition (lignel, ligne?, ete.), 2) Regrouper les lignes den-téte, de détails et de toraux. 3) Définir les variables nécessaires pour les totaux intermédiaires. 4) Ecrire le programme principal de l’édition (chaque traitement den-téte, de détail ou de total formera un sous-programme). 5) Ecrire les différents sous-programmes. 6) Simplifier l'écriture des sous-programmes, en regroupant les instructions communes 2, plusieurs d’entre eux. REPONSES 1) Associons les numeéros écrits en marge gauche de Itat et ies différents noms de lignes (voir ci-dessous}. 2) Trois blocs d’en-téte, un bloc de détail et trois blocs de totaux existent. 3) Le pourcentage de votants est le toxal du nombre de votants, divisé par le nombee total dlinscrits (voir ci-dessous). Le pourcentage de suffrages pour chacune des trois listes est égal au total des suffrages de la liste, divisé par le total des suffrages exprimés (total des bulletins pour les trois listes et non total des votants qui contient la somme des bulletins blancs ow nuls). Pour tous Jes calculs d'un niveau de rupture, cing variables de stockage suffisent ! a8) 2 3) neo 1 lignel )— en-téte pays ne 3 ligne? ) a6 ligne3 en-téte département n? 8 lignes 2 entée ville nm 10 lignes ne 1 ligne6 dgiail-bureau ne 15 ligne? total-ville vil-ins, vil-vot, vil-list(3) ne 19 lignes total-dépantement dep-ins, dep-vor, dep-list(3) n 23 ligne9 ne 25—stignelO. d total-pays pay-ins, pay-vor. pay-list(3) mn? 27 lignell } 4) METHODE = Déclaration des fichiers résultat et état. ~ Déclaration des lignes d'édition, ~ Premiére lecture du fichier résultat. 3 boucles imbriquées gérant les trois blocs d'en-tétes, le bloc détail contenant la lecture ‘du fichier résultat et les trois blocs de totaux. programme édition-rupture fichier vésultat (organisation séquentielle} enregistrement. enr-résultat redep: eftier LES FICHIERS: 169 revil: caractéves r-bur: entier veins: entiey revot : entier relist (1:3) + tableau dtentiers Fin-enregistrement, fichier état (organisation séquentiells) enregistrement enr-état ligne: earactéres fin-enregistrement const lignel, lignes, lignes var (* dition *) 12-date, 13-dep, 16-bur, 16-ins, 16-vot,é-exp : entiers Ud-vil : caractéres. ET-2vet, 18-%vot, 110-ins, 1L0-exp,110-vat, 1li-tvot : entiers Lé-List (1:3),L7-4Lisc (1:3), 18-$1ist (2:3) : tableau dtentiers 1LO-ligt (1:4), ]11-#1ist (1:3) : tableau dtentiers (* cunuls +) vil-ins, dep-ins, pay-ins, vil-vet , dep-vet,pay-vot_: entiers vil-List (1:3) dep-List (1:3) pay-Lisc (i:3) : tablea d'entiers (* rapture *) vil-traité,dep-traité ; entiess fini + pooléen aout ouvtir résultat (L) emat (8) Lire anr-résultat si fin-fichier alors afficher "fichier résultat sinon fini + . faux gortéte-pays (Lignet, :igre?, Stat. pay-ins, pay-vot, pay-List) répéter soctitesdépartement (résultat, lignes, état, dep- ins, dep-vot,, dep- List, dep-traitéi de, édition impossible * repéter sactétesville (resultat, lignes, Ligne 4, cat, vil-ins, vil-vot, vil-list,vil-traité repeter Setailpuresn (résultat, lignes, état, vil- ins, vil-ven, vil-List) lire enr-résultar si fin-fichier alors fini & .vrai fst jee fini ou vil-traite <> r-vil / Tetal-ville (vil-ins, vil-vot, vil-list, ligne?, Stat, dep-ins,dep-vet, dep-1 ist) jaa fini ou dep-traité <> r-den Aotalodepartemert (cep-ins,depevot, dep-List, lignes, tat, Pay-ins, pay-vot,pay-List) jaa fini 7 170 ALGORITHITES - COURS ET EXEACICES kokal pave (pay-ins,pay-vobspay-list, lignes, Lignel0, lignell, étar) igi former résultat, é7at fin REMARQUE, Dans le cas od deux enregistrements consécutifs ont le méme nom de ville, bien que leurs numéros de déparement soient différents, la rupture sur département n'est pas détectée. Pour conserver 4 Valgorithme une certaine simplicité, nous avons éliminé ce cas peu probable, vu le nombre de villes twaitées et le wi par ordre alphabétique. Pour le gérer, nous devons changer le test d'arrét de la répétitive inteme ala structure : répéter répéter répéter jaa find ou vil-traité <> r-vil OU DEP-TRAITE <> SDP jqa fini cu dep-traité <> r-dep jaa find 5) METHODE — Un bloc en-téte a trois fonctions : + initialisation des totaux + écriture des lignes d'en-téte + sauvegarde de la variable de rupture — Un bloc de total a deux fonctions : + écriture des lignes de totaux + cumuls pour calculer les totaux de la rupture suivante — Le bloe détail est identique & un bloc de total, sa particularité est d'ére suivi par la lecture du fichier. procédure on-téte-pays. (données : lignel données modifiées : ligne2,état résultat : pay-ins,pay-vot, pay-list} var cpt : entier début (* initialisation *) pay-ins — 0 pay-vot — 0 pour cpt@1 jaa 3 a pay-listicpt) — 0 tpouwr (* éoriture *) 12-date & dateyst écrire enr-état (lignel, aprés saut de page) Sorire enr-état (ligne2, aprés saut 1 ligne) tin LES FIOMIERS: 171 procédure en-téte-département (données : résuleat données modifi¢es : ligne3, état séoultat 1 dep-ing-dep-vot dep list, dep-traité) var cpt : estier début (* initialisation *) dep-ins — 0 dep-vor — 0 pour cpt 1 jqe 3 dep-list (cpt) 0 fpour (* écriture *) a-dep © r-dep écrize enr-Gtat {Ligne}, aprés savt 2 lignes) (* sauvegarde *) dep-traité + r-der fin procédure en-téteville (données : résultat, lignes données modifiees : ligned,état résultat : vil-ins,wil-vot,vil-List, vil-traité) var opt + enticr débur (* initialisation *) vil-ins = 4 wil-vor — 0 pour opt el jga 3 vil-List (cpt) 0 fpoar . (* acritere +) Vwi @ r-vib écrize enr-état (ligne4, aprés saut 1 ligne) écrize enr-fhat tlignes, apris savt 1 ligne) (* sauvecarde *) vil-teaitee evil fin procédure détail-bureau (données : résultat données medifiées : lignes dtatwilnins,vil-vot,vil-List war nbexp,cpt : ertiers, aébut, a“ (* éeriture *) Lé-bur © r-bur L6-ins © r-ins pboup <0 pour cpt 1 jqa 3 1é-List cpt) © r-tist (ept) ALGORITHMES - COURS ET EXERCICES obexp Cnbexp + r-list (ept) . (* comul tableau ville *) vil-list (opt) © vil-list (opt) + r-List (ept) tpour Lé-vor & evo ié-exp © nbexp éerire enr-étet {lignes} (* comul inserite et vetants ville *) wil-ins @vil-ins + r-ins wil-vot Gvil-vot + ever Fin procédure tutal-ville (données : vil-ins,vil-vot, vil-ligt données modifites : ligne’, état,dep-ins, dep-vot, dep~list) var nbexp,cpt : entiers debut (* 6oriture *} rbexp @vilelist (1) + vil-list(2) # vi T-avot Gvil-vot / vil-ins pour ept 1 Jq3 3 )-slist (ope) @vil-List (opti / chexp (* cumul tableau désarnenest *) dep-List (cpt) Gdep-List (cpt) + vil-List (opt) Epour écrire enr-état (ligne?, aprés saut 1 ligne) (* cumul ingerits et votants département *) dep-ing @depsins + vil-ing dep-vot + dep-vor + vil-vor fio ist (3) procédure totat-départerent. (données i dep-ias, dep-vor dep-List, données modifiges : lignes, état, pay-ing, pay-vet, pay-list) var nbexp, cpt : entiers aeput abexp dep-list (1) + dep-list (2) + dep-list (3) LB-8vot < dep-vor / dep-ins pour eptcl jga a 18-SList (cpt) © dep-list (ept) / nbexp (* cumal tableau pays *) pay-list (cpt) © pay-list (cpt} = dep-list (opt) fpour écrire enr-état (lignes, aprés saut 1 Ligne) (* cumal inserite et vovants pays *) pay-ins < pay-ine + del pay~vot + pay-vot + dep-vot fin LES FICHIERS: 173 procédure total-pays (donntes : pay-ins,pay-vot pay-List, Ligne? données modifiges : lignei0, lignell,état) var nbexp,cpt + entiers débot (* écriture *) nbexp @ pay-list(2) + pay-list (2) + pay-list (3) 110-ins + pay-ins 1L10-vot. = pay-vot. Li0-exp © nbexp LLl-avot C pay-vot / pay-ins pour cpt 1 jqa 3 LL0-List (opt) pay-List (cpt) 111-list (ept Cpay-list (cpt) / nbexp: fpour écvire enr-état (ligne9, apras saut ] ligne) écxire enz-état (Lignel0, aprés seut 1 Ligne) @ovire eny-étaz (lignell, aprés saut 1 Ligne) fin 6) SIMPLIFICATION Les trois sous-programmes des en-tétes ou des tolaux sont si proches que nous pouvons séduire le nombre de lignes de l'algorithme. Les instructions communes aux trois sous-programmes “en-téte” sont les suivantes | procédure en-téte-paran (données + Lignes: données modifiées : état résultat : rup-ins, rup-vet, rup-1ist) var opt i entier début (* initialisation +} rup-ins © 0 rup-vot & 0 pour ept+l joa 2 rup-list (cpt) —90 fpour (* éeriture *) écrire enr-état. (lignes) fin Définissons maintenant les instructions spécifiques 4 chacun des sous-programmes “en- ite" : - procédure en-réte-pays {données + Ligne) données modifides : ligneZ,état résultat : pay-ins,pay-vot,pay-List) début I2-date — datsyst, 174 ALGORITHMES - COURS ET EXERSICES éerize enr-état (lisnel) enctéte-param (Zigne2,ébat, pay-ing,pay-vot,pay-list) fin procédure en-téte-cépartenent (données : résultat données modifiees : Ligne3, état zéoultat i dep-ins, dep-vot, dep-list,dep-traité) début 13-dep € r-dep dep-traité © v-dep enctite-param (ligne3, état, dep-ins, dep-vot, dep-list) fin procédure en-téte-ville (données > résultat, LigneS données modifiges : lignes, état xésultat : vil-ins, vil-vot, vil-list,wil-traite début. Dwi @revil écrire enr-état (Ligned) vil-traité © r= enoLéte-param (lignes, état, vil-ing, vil-vet,wil-list) fin Les instructions communes aux sous-programmes "total-ville" et “toral-dépantement" sont Jes suivantes : procédure total-paran (données : rup-ins, rup-wot, eup-list données modifiées : lignex, état, rup2-ins, rup?-vot, rup2-List) ver nbexp,cpt i entiers début nbexp © rup-list (1) + rup-list (2) + rup-list (3) da-bvot @ rup-vor f rup-ins pour cpt1 jga 3 Lx-BList (cpt) © rupelisttept) ¢ nbexp (* cum tableau pour préparer rupture suivante *) Tup2-list (cpt) © rup2-list (ept) + rup-list (ept) pour @crize enr-état (licnex) (* cumul inserits et votants pour rupture suivante *) rup2-ing @ rupg-ins + rupeins “ rup2-vet @ cup2-vot + rup-vot fin I n'eaiste aucune instruction spécifique & chacun des sous-programmes "total-ville” et “total-département” (leurs appels sont remplacés par ux appel de "total-param"), Les procédures “détail-bureau” et “total-pays” ne se prétent pas au regroupement, car leurs lignes ¢'€dition sont particulires. LES FICHIERS 175 IV - Appareillage de deux fichiers @ Algorithme — exercice 10 Soient les fichiers suivants produit org: seq support : disque numéro de produit. = p-num désignation pedesign squantité en stock pestock prix unitaire peprix commande-durjour org: sea. auméro de client ¢jenumeli numéro de produit ¢j-numpre: quantité commandée —_¢j-gtecom commande-en-attente org : seq idem au fichier commande-du-jour (ca-numeli, ca-numpro, ca-qtecom) sommande-livrable org : seq idem au fichier commande-du-jour (cl-numeli, cl-numpra, el-qteeom) CREATION des fichiers commande-en-attente et commande-livrable, & partir des fichiers produit et commande-du-jour, sachant qu'une commande n'est jamais liveée partiellement sila quantité en stock du produit est insuffisante. Les fichiers commande-du-jour et produit sont traités aprés avoir été TRIES tous les deux par numéro de produit, Expliquons le déroulement de lalgorithme & partir d'un exemple PRODUIT COMMANDE-DU-JOUR, n° désign stock — prix n° cli. n’pro, qte 001 TABLE O16 0320.00 1764 001 1 003 CHAISE 025 0078.50 6732 004 2 O04 TABOURET = 003 0045.00 1234 004 4 007 FAUTEUIL 000 0117.75, 8888 006, 2 013, LAMPE 100 -0250,00 1234 007 3 Un produit peut ne pas Gire commande, ex. : Ie 003. Unebroduit peut étre commande plusieurs fois. ex. : le 004. Un numéro de produit inexistant peut étre commande par erreur, ex. + 1e 006. Nous détectons tous les cas possibles par la comparaison des numéros de produit des deux fighiers, trois cas se réaliseat :<¢,>, =. 176 ALGORITHMES - COURS T EXEACICES produit n° prod. commandé comparateur actions > 001 > OOL = — Tau stock lecture commande suivante OL > ood < lecture produit suivant > 003 004 < lecture produit suivant > 08 004 = —2 au stock lecture commande suivante 004 004 = "stock insuffisant" lecture commande suivante OF + 006 < lecture produit suivant > 007 006 > " produit 006 inexistan lecture commande suivante, OF = 007 “stock insuffisant” lecture commande suivante > fin 2 arét du derreur ? (Solution : les enregi spécial nommé ERREUR.) — Nous ne pouvons effectuer qu'une réécriture sur le fichier produit pour une lecture, nous devons terminer la mise & jour de la variable p-stock avant d'effectuer linstruction de rééeriture ! — Que faire si Je fichier des produits se termine avant celui des commandes (ex. : un produit n* 016 a été commande par erreur) ? Solution | : petit programme en fin de traitement pour gérer ¢¢ cas particulier. Solution 2: modifier le contenu de la variable p-num pour que le programme se poursuive sans aucune lecture supplémentaire sur le fichier produit, pour cela p-num doit étre toujours supérieur & ¢-numpro (nous lui donnons la valeur HY, Haute Valeur ou High Value). METHODE — Definition des cing fichiers p: tt, comm-liv, erreur. duit, comm-jour, com: — Premire lecture du fichier comm-jour. — Premiére lecture du fichier produit, = Boucle~ comparaison des numéros de produit cas p-num < cj-numpro (produit p-num non command roduit suivant xistant) cas p-num > cj-numpro (commande dua produl + écriture dans le fichier erreur * lecture de la commande suivante —cas p-num = c-numpro {produit commandé trouv LES FICHIERS 7 + boucle de traitement dle toutes tes commandes de ce produit ~ décrément du stock, ou message insuffisamt ~ lecture de la commande suivante + réécriture du produit mis & jour + lecture du produit suivant REMARQUE, Ce programme s'arréte dés que le fichier des commandes est Iu dans sa totalité, programme appareillage fichier preduit (orcanisation séquentielle}) enregistrement enr-produit (* détail dans le texte de Ltexexcice ~p fichier comm—jour (organisation séquenziele) enregistrement. enr-comjour fichier commact (organisation séquentielle) enregistrement enr-comatt fichier conm-liv (organisation séquentielle) esregistrement enz-comliv fichier erreur (organisation séquentielle) enzegistrement enr-erreur e-nuncli: entier ecnumpro : entier e-gtecon : entier fin-enregistrement var fin-commande, probléme ; booléen début ouvriz comtjour (1) produit (L/E} comm-att, comm-liv, exreuz (E} probléme = .faux. lire enr-comjour si fin-fichier alors affichex "fichier commande du jour vide, pas de traitement” probleme = vrai. fsi Lire enr-produit si fin-fichier alors afficher “fichier produit vide, pas de traitement probléme @ vrai. tsi #4 nen probleme alors (* boucle *) “ fin-commande @ , faux. zopster (* comparaison *) si ponum < oj-numpro alors (* produit non commandé *) Litepred (produit) 178 ALGORITHMES - GOUAS ET EXEACICES sinon si p-aun > ¢j-numpro alors (* produit commandé inewistant *) (* ce test est toujours vrai lorsque le fichier produit a été Lotalement lu *} enr-erreur + ene-comjour ecrize errecr Lixecomm (commande, fin-commancie) sinon (* traitement de la commande *) Erait-comn (eoini-jour,preduit,, fin-commande, comm=att,commLiv) réécrire produit dizeprod (produicy isi fei jaa £in-commande fei fin procédure lirecom (données : commande résultat : fin-commands) début lire enr-comjour gi fin-fichier alors fin-commande « .vzal. eed fin procédure lirepred (données modifices : produit) début Lire produit . si fin-fichier alors p-num — HV tsi fin procédure trait-comn (connées = comm~Jjour données modifiges + prowult résultats : fin-commande, comm-att, commliv} var autre-prodult : kealées début. a“ répéter si cj-gtecom <= prstock alors pstock @p-stock - oj-gtecen enr-comLiv © enz—com jour écrire enr-conliv gingn enr-comatt © enr-comjour LES FICHIERS 179 écrire enr-comatt fsi dicecomm (commande, fin-commande) si Fin-commands alers — autre-produit @-vrat. sinon autrepxodwit © e-num = ej-numpro tsi Sa eutre-produic fin ® Algorithme — exercice 11 Solt le fichier suivant, pour effertwer la mise a jour du fichier des employés déja traité. mise-A-jour org : seq code maj n-miij © pour eréation M pour modification S_ pour suppression nom employé m-nom prénom, m-prénom valeur existe pour création date de naissance m-datnais valeur existe pour création fonction am-fonetion valeur existe pour eréation et modification Le fichier “employé" est préalablement trié sur fe nom des employés (nous supposons qu'il n'y a pas @homonymes dans la socigu), Le fichier "mise. jour” est trié sur le nom ae Teanployé et le code de mise. jour, car un enregistrement peut étre créé puis modifié, puis supprimé, dans Te miéine traitement. La création d'un enregistrement supplémentaire dans un fichier séquentiel s‘effectuant 4 ia fin du fichier, le crittre de tri ne sera plus respecté ct Ia suite de lappareillage impossible, nous alions done créer un nouveau fichier des emplayés mis & jour. METHODE ~ Declaration de quatre fichiers : employé, mise-i-jour, employé.anaj et erreur. — Premidres lectures des deux fichiers & appareilier. ~ Foucle —comparaison des aoms du fichier employé et du fichier mise-2-jour eas > et code "C" fichier mise-a-jour pris en compte traitement des modifications ou suppression éventuelles de ce nouvel employé et code "M" ou 'S" message derreur cas < employé non concerné par ia mise A jour a“ reoopi¢ sans modification dans le fichier employé.maj eas = et code et code "S' prise en compte de la nouvelle fonetion Ja suppression équivaut & la non-€criture dans le fi employé-maj ct code "C” message d'erreur 180 ALGORITHMES - COURS ET EXERGICES programme maj-exploye fichier employé (organisation séquentielle) enregistrenent enr-employé e-nom 1 caractéres e-prénom ; cavactéres . e-datnais : entier e-fonction + caractaves fin enregistrement fichier mise-a-jour {organisation séquentielle} enregistrement enc-maj nema} : caractéres m-20nes-communes m-nom : caractéres m-prénom + earacteres m-datnais ; entier m-fonction : caracteres fin-enregistrement fichier employé-maj (organisation sequentielle) enzegistrement enr-emgmaj en-nem 1 caracteres em-prénon + saractéres em-datnaigs : entier em-fonct ion = caractéres fin-envegistrement fichier erreur (organisation séquentielle) envegistrement ene-erreur er-non —: caractéres ex-maj : ecavactéree fin-enregistrement déht ouveix mise-a-jour, employé (1) erreuc, employé-may (E) liremai (mise-a-jour) Aizesmm (employs) gi m-nom = HV ou e-nom = HV alors afficher "problame de fichier (s) vide(s)" sinon répéter si e-nom > m-nom alors (+ soule la création est possible *) si mmaj = "oC" alors enr-enpmaj ¢ m-zones-communes Lixemaj (mise-a-jour) traitsompl Unise-a~jour-employé-e jrerzeur) sinon ecr-erreur (mise-a- jour, erreur) “a diremai (mise~a-jour) fsi, gingn gi e-nom < m-nom alors (* employ non concerné par la maj *} enr-espmaj < enr-employe écrire enr-empmat Aiccemp (employe) LES FIeMEAS rat sinon (* exployé existant a traiter *) enemempmaj @ enr-employé Lrait-enpl (mise-a-jour,employé-maj, erreur) irene temployé) fsi foi dga e-nom = HV et mnem = EY fei fin procédure Lireemp (données modifées : employé) aébur Lize enr-employé si fin-fichier alors e-nom HV isi fin procéduce lirema} (données modifiees : mise-a-jour) eébut, lize ent-naj si fin-fichier alors mnone Hv fst fin procédure ser-erreur (données ; mise-d-jour données modifiées ; erreur) début er-nom = m-nom ex-maj << mma4 écrire enr-errour fin procédure trait-empl (données : mise-a-jour Gonnées modifiées : omployé-maj, erreur) var supp + bealéea début, supe .foux, tant que mnom = em-nem a si memaj = "M" cu m-maj = "Ss" alors si mma} = “Mu” alors em-fonction © mfonet ion sinon supp © vrai. fsi sinon ECR-BRREUR (mige-a-jour-ezrour} 182 MES - COURS ET EXERCICES V —Mise a jour d'un fichier d’organisation séquentielle indexée DEFINITION Une seconde solution pour implamter les enreg) séquentielle indexée. Les enregistrem ements sur le support est organisation ents sont rangés en respectant Vordre croissant d'uae des rubriques, appelée de repérer de fagon unique un enregistrement. Le systéme de gestion de fichier correspondances entre la place d'un enregistrement sur le support et la valeur de sa clé dans une table nommés TABLE D'INDEX, Les seuls supports aptes & recevoir un fichier orga SUPPORTS ADRESSABLES (disques. disquettes), Va gistrement en séquenticl indexé sont les se est la place de Venre- | La clé peut @tre soit une rubrique, soit un avant tout assurer Vunie groupe de rubriques du fichier. Son choix doit, dun enregistrement pour une valeur de clé donnée. Loorganisation séquentielle indexée permet un ACCES DIRECT A un enregistrement précis, grGce & la table d'index mise 2 jour par le syst ACCES SEQUENTIEL, similaire & celui me de gestion de fichier, ou un fectué dans un fichier organisé en séquentiel ction d'ouverture et de fermeture. ide! séquentielle tiques 2 celles définies pour Vorganisation (* ACCES DIRECT *) C cre rubrique- (* lecture di LES FICHIERS 183 LIRE SI ERREUR-CLE ALORS (* enregistrement inexistant +) SINON FST (* ACCES SEQUENTIEL *) LIRE SI FIN-FICHIER ALORS SINON FST ECRIRE SI ERREUR-CLE ALORS [* clé en double *) SINON FST REECRIRE SI ERREUR-CLE ALORS (* problére réécriture sur le disque, clé fodifiée 4} SINON FSI SUPPRIMER SI BRREUR-CLE. ALORS ¢traitement-l> (* probléme réécriture booléen systéme, suppression legique *) SINON St ERREUR-CLE est un booléen du systéme de gestion de fichier. Le test de son contenu Goit etre effectud apres toutes les actions exécutées sur le fichier, sans exception, m Algorithme — exercice 13 CREATION dlun fichier sur disque des produits en vente dans un magasin de peinture, Chaque produit posséde un numéro qui l'identifie de fagon unigue, une désignation, une quantité en stock, un prix unitaire. METHODE ‘La méthode est identique & celle de création d'un fichier séquentic!, ~ Declaration du fienier produits, = Saisie des valeurs, ~ Validation de ta saisie, ~ Ecriture des informations de 12 mémoire sur le support. ~ Question et reprise conditionnelle du traitement. 184 ALGORITHMES » COURS £T EXERCICES programe création fichier produits (organisation indexée accés direct cle = ponun) enregigtrement enr-produits penun : entier pedesign ; cazactéres pesteck 9: ontier prprix entier Ein-enregistzement var réponse, valid : caractéres aébut ouveir produits () répéter aificher "donmax le numéro cle produit" saisir p=num afficher “donner la désignation" saisir p-design afficher “donner la quantité =n sLock" saisir p-stock afficher “donner le prix unitaire” saisir p-prin (* validation *) afficher “validez-vous les informations saisies (o/n) 2" saisir valid si valid =" alors (* Geriture sur disque *) écrire enr-produits si erreur-clé alors afficher “éeriro impossible, clé en double " fsi fsi afficher “autre produit 4 saisir (o/n 2" saisir réponse ia réponse = "ns" fermer produits fin REMARQUE Plusiewrs systémes de gestion de fichiers imposent & l'utilisateur de saisir les enregistrements dans Vordre croissant des cis, lors de Te création un fichier organisé en séquentie! indexé. Nous obtenons dans cv eas, V'affichage d'un snessage systéme ds qu'un enregistrement a une clé inférieure & la dernidre valeur de clé waitée. 5 Algo AFFICHAGE sur l'écran de toutes les informations contenues dans le fichier, Ce traitement nécessite un acts séquentiel, I'algerithme est done identique a V'affichage des données d'un fichier séquentiel, hme — exercice 14 LES FICHIERS 185 progtatme affichase fichier produits (organisation indexée seeds séquentiel sé = p-num enzegistrement enr-preauits Fineenregistrement débue cuvrir produits (L) Line enc-produits si fin-fichier alors efficher “le fichier des produits est vide" sinon afficher “ fichier des produits “ afficher “numéro désignation stock prix” ropérer afficher p-num, pedesign, p-stock, p-prix dire enr-greduits jaa fin-fichier tsi ferme: produits fin & Algorithme — exercice 15 CONSULTATION des informations stockées sur un produit du fichier. Ce trsitement est beaucoup plus rapide avee cette organisation, qui permet Yaccés direct. METHODE ~ Saisie du numéro de produit recherché. = Lecture directe de cet enregistrement, ~ Affichage des informations a consulter. programme consultation fichier produits (organisetion indexée accés direct clé = p-nun) enregistrement. enr-produits ponum 2 enter prdesion caractéres prstock entier peprix, : entier fin-enregistrement var numéro : entier début ouvrir produits (1) afficher “donner le numéro du produit recherché" saisir numero ~ (* transfert valeur de la clé et lecture *) pomun = numéro Lie enz-produits si erreur-cla alors afficher “le produit n° ",numero," n'existe pas" 166 ALQORITHMES - COURS ET EXEROICES sinonafficher "produit n° “,p-cum afficher "d¢signation *,pedesign afficher "quantité en stock ",p-stock afficher "prix unitaire — ")p-priz fsi fermer produits t fin i @ Algorithme — exercice 16 MODIFICATION du prix unitaire d'un produit du fichier. Ce traitement utilise [a méme méthode que pour la modification d'un enregistrement d'un fichier séquentiel Deux différences : — la procédure de recherche nul AT'accts direct); — un test est nécessaire aprés I'instruction de réécriture. ise pas ditérative (eile est plus rapide d'exécution, grace programme modification fichier produits (organisation indexée acces direct clé = poaust (* méme déclaration que précédemment ~) var numéro : entier trouvé : becléen début ouvrir produits (L/E) afficher "donner le numéro du produit qui change de prix " saisir numéro recherche (produits, numéro, trouvé) si trouvé alors afficher “modification du produit “,p-nun,p-design afficher “ancien prix “,p-priz, "nouveau prix ? ” saisir p-prix réGerire enr-produits si erreur-clé alors afficher “problame de réecrirure sur disque ! fei sinon afficher “numéro ; ";nunéro,” nen trouvé dans le fichier" fsi fermer produits fin prosédure recherche (données i produits, numéro résultat : trouvé) début “ prnun © numéro dire enr-produits si erreur clé alors trouvé @ . faux. singn trouvé @ vrai. fsi fin LES FICHIERS 187 La SUPPRESSION d'un enregistrement du fichier séquentiel index¢ utilise le tres simple sous programme de recherche qui précéde. Le programme principal. identique a celui de suppression dans un fichier séquentiel, effectue un test d'erreur de clé aprés la rééeriture. ‘Les problimes d'EDITIONS simples ou avec ruptures et d'APPAREILLAGES mani- pulant un fichier dorganisation séquemtielle indexée utilisent 'acc8s séquentiel. Les algo- rithmes wus aux paragraphes IIT et IV de ce chapitre sont done applicables @ tous les fichiers, quelles que soieat leurs organisations. VI -Mise a jour d'un fichier d'organisation relative DEFINITION ‘Une troisiéme solution pour implanter ies enregistremants sur le support est ‘organisation Girecte. Elle gére ‘emplacement d'un enregistrement, grave 2 un calcul d'adresse A partir d'une valeur numérique de clé. La difficult est dobtenir une rigle de calcul qui permette de gérer au mieux la place réservée sur Je support, c’est-2-dire qu'un grand poureentage de place doit tre occupé et qu'un ts faible pourcentage de valeurs de clé doit aboutir au miéme résultat dadresse. Ce demier cas est toyt de méme géré par le systéme de gestion de fichiers qui imptante les enregistrements dont la valeur calculée d'adresse est déja occupée, dans unc zone nommeée zone de débordement. Le chainage des enregistrements écrits en zone de débordement est alors mis 4 jour par le sysitme, Un des cas particuliers de organisation directe est l'erganisation relative, pour laquelle 1a ragle de calcul est ia plus simple de toutes, L'adzesse est en correspondance directe avec Ja valeur de clé, Ainsi, pour un fichier implanté a partir de 'adresse 1BC2 et dont Venregistrement a une longueur de 30 octets : 30 (en base 10)= 1E (en hexadécimal) clé = 0 le premier enregisteement est a Vadresse 1BC2 clé = 1 le second 1BC2+1E = 1BEO clé = 2 le oisitme 1BE0+1E = 1BFE organisation relative est intéressante pour des fichiers qui = possédent une clé numérique: ~ dont les valeurs de cette clé appartiennent & un petit intervalle; = dont la grande majorité dey entiers de cet intervalle existent comme valeurs de cit Genregistrement. -REMARQUE ~ Les supports qui permetteat organisation relative sont les supports adressables. ~ organisation relative permet dlutiliser les deux accés connus, séquentiel et direct, ~ La eld est une variable entidre non signée, elle n'appartient pas a la liste des rubriques de l'enregistrement, 188 ALGORITHMES - COURS ET EXERCICES DECLARATION ET INSTRUCTIONS FICHIER (GRGANISATION RELATIVE ACCES SEQUENTIEL DIRECT CLE + variable-mémoire} ENREGISTREMENT ‘IN-ENREGISTREMENT VAR : ENTIER Les instructions d’ouverture, de fermeture, de lecture, d'écriture, de réécriture et de suppression sont identiques 2 celles définies pour lorganisation séquentielle indexée, La suppression est toujours logique. ™ Algorithme — exercice 17 CREATION sur un support adressable d'un fichier dorganisation relative des représen- tants d'une sociéé de vente & domicile. Les représentants somt numérotés séquentiel- Jement, nous gérons pour chacun leur nom et prénom, leur adresse et leur date dentrée dans la société, ‘Comment atiribuer les numéros séquentiels des représentants ? Lors de la premiére exécution de notre algorithme, le premier numéro a attribuer est le numéro 1, puis le 2, le 3, etc. Lors de la seconde exécution, nous devons retrouver le demicr numéro utilisé, perdu a la fin de la premiére exéoution, car la mémoire est volatile. Nous devons done I'écrire dans un fichier, pour le seuvegarder de fagon durable. Le dernier numéro attribué a un représentant peut étre stocké, soit dans un petit fichier indépendant, nommé “pararnétre", soit dans un exregistrememt spécial du fichier auquel il se rapporte. Nous choisissons cette deaxigme solution. L'enregistrement de clé 0 va servir 4 mémoriser fe dernier numero attribué, par exemple dans Ia rubrique "r-datentr” Attention 2 me pas traiter cet enregistrement comme un autre lors de utilisation séquentielle du fichier | METHODE (identique & celle de ergation dun fichier séquentiel) — Dééclaration du fichier représentant. — Lecture de Tentegistrement de clé 0 et recherche du dernier numéro attribué ov initialisation de ce numéro x00. — Saisie des informations. — Validation des valeurs saisies. ~ Ecriture des données de la mémoire sur le support. — Question pour effectuer une autre saisie, — Lecture de l'enregistrement de clé 0 et mise 4 jour du dernier numéro attribué ou éeriture de cet enregistrement si inexistant programms création "Fichter représencant (organisation relative acces direct elé = numrepy enregistrenent anz-représ renompren caractéres zade : earactéyes: redatentr : entier LES FICHIERS 188 fin-enregistrement var numrep, compreur : entiers réponse, valid : cazacteres fichier-vide : booléen début ouvrir sepessentant (L/5) (* lecture du premier enregistrement "spécial" et recherche du dernier numéro attribué *) zech-dernum (représentant , numrep, compteur, fichier-vide) (* affectation de la rubrigue date d'entrée *) r-datentr « datsyst répeter (* calcul clé *) compteur © compteur + 1 mumrep © cempteur (* saisie “1 afficher "donner le nom et le prénem" saisir r-nompren afficher "donner ltadresse compléte" saisir c-adr afficher "validez-vous les informations saisies (e/n) 2" saisir valid si valid = "5" alors écrire enr-représ si erreur-clé alors afficher “probléme d'éeriture, cle +", rumzep fsi fei, afficher “autre représentant a saisir (o/n) 2" saisir réponse jaa réponse = “a” ( mise a jour do premier enregistrement *) figi-dermun (fichier-vide, compteur, représentant,, numrep) fermer représencant Fin procédure rech-dernun idennées : représentant données modifiées : mumrep résultat : compteur, fichier-vide) abut numrep + 0 lire cne-représ si erreur-cle a“ alors compteur ¢ 0 fichier-vide .vrai. sinon compteur = r-datentr fichier-vide — .fauz. 190 ALGORITHMES - COURS ET EXERCICES procédure maj-dernum, (données : fichier-vide, conpteur données nodifiées : représentant, nunrep) | début pumrep = 0 si fichier-vide alors y-datenty © compreur ecrire enz-reorés si erreur-clé alorsafficher “probleme d'écriture cl¢ 0" Esi sinon lire enr-représ si erreur-clé alors afficher "probléme seconde lecture clé o 11!" sinon r-datentr © compteur réécrize enr-représ si erreur-clé alors afficher “probléme réécriture caractéres r-datentr o: entier fin-enregistrement vay qumvep : entior début “a ouvriy veprésentant (1) afficher “donner le numéro de représentant recherché" Saisir fuihrep Lire enr-représ Bi ervour-clé alors afficher “le représentant n° ",numrcp," n'existe pas" 191 sinon affiche: “representant n° * mumzep afficher “nom et prénom ",renompren afficher "adresse "erage Afficher "date dlentrée ",r-datencr tsi fermer représentant Fin UAFFICHAGE, la MODIFICATION, ia SUPPRESSION, !EDITION et 'APPAREILLAGE utilisent des méthodes identiques aux taitements vus précédemment pour les fichiers d'organisation séquentielle indexée, Vil - Application 1 : gestion de bibliothéque Soient les fichiers LIVRE et AUTEUR suivants. livre ong : seq. ind. ¢lé = Lnuliv a? livre Lauliv nom auteur auteur titre Titre nombre exemplaires L-nbex nombre livres sortis Lnbsont auteur ong : seq.ind. clé = a-auteur nom auteur aauteur nombre Livres écrits anbliv numéro des livres a-nuliv (1:£0)tableau REMARQUE Un livre acheté en plusicurs exemplaires ne figure qu'une fois dans le tableau. m Algorithme - exercice 19 1E A JOUR des deux fichiers aprés 'achat de livres supplémentaires.. Dans le fichier "livre", nous pouvons augmenter le nombre d'exemplaires d'un livre existant, ov créer un enregistrement pour un nouveau livre. Dans le fichier "auteur", nous pouvons metre 4 jour le tableau des numéros de livres écrits Par un auteur, ou créer un enregistrement pour le premier livre d'un auteur 192 ALGORITHMES - COURS ET EXERGIGES METHODE, ~ Saisie du numero de livre et du nombre d'exempiaires achetés. ~ Lecture directe dans le fichier livre, — Si Tenregistrement existe Alors mise 8 jour du nombre d'exemplatres et réécriture livre Sinoa saisie des informations complémentaires et éeriture livre lecture directe dans le fichier auteur si lenregistrement existe alots mise & jour du tableau et réécriture auteur sinon écriture auteur. — Question & luritisateur pour effectuer une autre saisie. programme saisie-livre fichier livre organisation indexte accés direct cle = lenuliv J enregistrement, enr-livce i-nuliv : entier l-auteur: caractézes l-titre : caractéres iembex : entier Icnbsort: entier fin-enregistrement fichier auteur (organisation indexée accds direct GLé = a-auteur) enregistrement enr-autewr a-auteur : caractéres aenbliv + entier acnuliv(1il0) : tableau d'entiers fin-enregistrenent var numéro,nbexempl : enciers réponse : caractéres début ouvrir livre, auteur (L/E) répéter afficher "donner le numéro du livre" saisir ouméra afficher “donner le nombre d'exemplaires achetés" gaisir nbexempL (* lecture Live +) ienuliv © numéro lire enr-Livre si avveur-clé alors (4 ce livre atest pas enregistré. Création *} oréarionslivre (nbexempl, livre) a (* lecture auteur *) a-auteur + l-auteur dire enr-auteur si erreur-cl4 alors (* cet auteur n'est pas enregistré. Création *) Sréation-ayteus (numéro, auteur) LES FICHIERS 193 sinen (* cet auteur eet dé@ja enregistré. Mise a jour *) Mas-autour (numéro, auteur) Esi sinon {4 ce Livre est déja enregistré. Mise & jour “7 daj=livxe {abexempl, livre) fsi afficher “autre saisie (o/a) ? saisir réponse jaa réponse = "n' tener livre, auteur fin prooidure prdacion-lisre (domdes : rbexenpl domes modifies ¢ Lives) début (* salsie complémentaire *) afficher “donner Je nom de l*auteur et le titre" saisir l-autewr, I-titre L-nbe © abenenpl lenbsort — 0 (* éeviture lives +) écrixe enr-livre si ecreur-clé alors afficher *probléme ecriture livre” {7 la clé on double ast improbable, vz la construction de L'algorithme *) Esi, fin procédure cuéation-auteur (données : numéro Gennées moditiées : auteur) débot (* affectation rubrique et éeriture *) acmblive 1 a-nuliv(1) © numéro écrize enr-auteur si errear-elé alors afficher “probléme écriture auteur” fsi fin procédure maj-auteur (dennées : auméxe données nadifiées : auteur) début, (# mise a jour st régeriture *) si a-nbliv = 10 alors afficher "plus de place pour cet auteur sinon a-nbliv @a-nbliv + t

You might also like