La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble.

Présentations similaires


Présentation au sujet: "1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble."— Transcription de la présentation:

1 1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble des passagers attendant la montée dans lavion

2 2 Caractéristiques dun fichier séquentiel - Ensemble de places totalement ordonnés : Chaque place est occupée par un élément dun même ensemble On peut détecter la fin de fichier On peut définir une correspondance entre lordre dans le fichier et lensemble des éléments classés dans le fichier : il y a une règle de rangement

3 3 Principe de parcours dun fichier séquentiel Fin de fichier Tête de lecture/écriture Partie déjà lue Partie restant à lire x1x2xixn Elément courant

4 4 Primitives daccès (1) eof(fichier) : Fin de fichier vrai si la tête de lecture/écriture est en face de la marque de fin de fichier ouvrir(fichier) : Accès au premier élément positionne la tête de lecture/écriture sur le premier élément du fichier ou sur la marque de fin de fichier sil est vide lire(fichier,val) : Accès à lélément courant copie lélément courant dans val et avance la tête dune position

5 5 Primitives daccès (2) créer(fichier) : crée un fichier vide (ou détruit le contenu) écrire(fichier,val) : – recopie en fin de fichier la valeul du variable val – avance le ruban dune position (sur la fin de fichier) – possible si lon est en fin de fichier uniquement association entre un nom de fichier physique et un identificateur de fichier interne au programme

6 6 Somme des éléments dun fichier F non vide de nb entiers fonction somme (Données: F:fichier) : entier; Intérmédiaire : s,c :entier; Début s 0; ouvrir(F); tantque non eof(F) faire début_tq lire(F,c); s s+c; fin_tq retourner(s) Fin; Complexité : O(n) où n est la taille du fichier

7 7 Accès au k-ième élément dun fichier séquentiel Procedure acces( Données F : fichier; k : entier, Résultats: trouvé:booléen; val: élément); Intermédiare : i:entier; c:élément; début ouvrir(F); trouvé faux; i 1; tantque i<k et non eof(F) faire début_tq lire(F,c); i i+1; fin_tq; si non eof(F) alors début_si trouvé vrai; lire(F,val); finsi Fin;

8 8 Accès associatif à un élément du fichier Procedure rech_val(Données F :fichier ; val:élément Résultats: trouvé:booléen); Intermédiare : c:élément; début ouvrir(F); si eof(F) alors trouvé faux Sinon début_sinon lire(F,c); tantque non eof(F) et (c<>val) faire lire(F,c); trouvé c=val; finsinon Fin;

9 9 Éclatement dun fichier en deux Principe : on suppose que le fichier F comprend des entiers naturels On construit deux fichiers : – lun Fpair contenant les nbs pairs – lautre Fimpair les nombres impairs Méthodologie : - Création de deux nouveaux fichiers; - ouverture de F en lecture et Fpair, Fimpair en écriture - traitement de lélément courant pour déterminer sa destination.

10 10 Éclatement dun fichier en deux Procedure eclat(Données F :fichier Résultats: Fpair, Fimpair : fichier); Intermédiare : c:élément; début ouvrir(F); créer(Fpair); créer(Fimpair); tantque non eof(F) faire début_tq lire(F,c); si c mod 2 = 0 alors écrire(Fpair,c); sinon écrire(Fimpair,c); fin_tq; Fin;

11 11 Insertion dun élément à la place k dans un fichier F Principe : on suppose que le fichier F comprend des entiers naturels et on doit ajouter un élément à la place k. Attention : on ne peut pas décaler le reste des éléments car louverture en écriture efface tous le fichier. Méthodologie : On construit un fichier g par concaténation de : – (k-1) premiers éléments de f – lélément à ajouter – (n-k+1) derniers éléments de f

12 12 Insertion dun élément e à la place k dans un fichier F Procedure insert(Données F :fichier; e, k : entier Résultats: g : fichier; possible : booléen); Intermédiare : c, i :entier; Début ouvrir(f); créer(g); i 1; possible faux; tantque non eof(F) et (i<k) faire début-tq lire(F,c); écrire(g,c); i i+1; fintantque;

13 13 Insertion dun élément e à la place k dans un fichier F si i = k alors début_si écrire(g,e); tantque non eof(F) faire début_tq lire(F,c); écrire(g,c); fintantque; possible vrai; finsi Fin;

14 14 Remarques sur les fichiers séquentiels - Tous les accès sont séquentiels - Le coût de lalgorithme est proportionnel à la taille du fichier - La mise à jour nécessite (presque toujours) la construction dun nouveau fichier

15 15 les fichiers séquentiels en C File *fopen(const char *filename, const char *mode) /* ouvre le fichier indiqué et retourne un flot, ou NULL si la tentative échoue. */ Les valeurs autorisées pour mode sont : « r » : ouvre un fichier texte en lecture « w » : ouvre un fichier texte en écriture (écrase le contenu si existe) « a » : ouvre ou crée un fichier texte en écriture et se positionne en écriture à la fin du fichier Int fclose (File *stream) /* fermeture du fichier. Elle retourne EOF pour une erreur décriture, zéro sinon)

16 16 les fichiers séquentiels en C Exemple : # include Void main () {.... File *fp /* pointeur vers une zone de type file*/.... fp=fopen("données", "r") ; if (fp == NULL) printf (" impossible douvrir le fichier données ") else.... fclose(fp); }

17 17 les fichiers séquentiels en C Int feof(FILE *stream) /* test si la tête de lecture est positionnée en fin de fichier. Elle retourne une valeur non nulle si vrai, zéro sinon*/ Int getc (File *stream) /* lecture dun élément*/ Int putc (char c ; File *stream) /* écriture dun élément*/ Int fgets (char L[max]; int max; File *stream) /* lecture dun élément*/ Int fputs (char L[max]; int max; File *stream) /* écriture dun élément*/

18 18 les fichiers séquentiels en C Exemple : # include Void main () {.... int c; File *fp; File *fr; fp=fopen("données","r"); fr=fopen("données1", "w"); if (fp == NULL).... c = getc(fp); while (c != feof(fp)) {.... putc(c,fr); c=getc(fp);... } fclose(fp); fclose(fr); }


Télécharger ppt "1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble."

Présentations similaires


Annonces Google