Algorithmique & programmation



Documents pareils
Algorithmique & programmation

Génie Logiciel avec Ada. 4 février 2013

Algorithmique et programmation : les bases (VBA) Corrigé

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

ACTIVITÉ DE PROGRAMMATION

Bernard HAMM, Évelyne LAVOISIER

Cours Bases de données 2ème année IUT

SYSTÈME DE GESTION DE FICHIERS

Cours 14 Les fichiers

Le service FTP. M.BOUABID, Page 1 sur 5

Initiation à la Programmation en Logique avec SISCtus Prolog

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Bases de programmation. Cours 5. Structurer les données

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Arbres binaires de recherche

Système de Gestion de Fichiers

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Programmation système I Les entrées/sorties

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Examen Médian - 1 heure 30

Chapitre 1 : Introduction aux bases de données

Diagramme de classes

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cours Informatique Master STEP

Le langage VHDL. Eduardo Sanchez EPFL

1 Lecture de fichiers

Le Langage De Description De Données(LDD)

Gestion d utilisateurs et stratégie systèmes.

Fascicule u7.05 : Impression de résultat pour visualisation

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Programmation impérative

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

L informatique en BCPST

Java Licence professionnelle CISII,

Cours de Programmation 2

Bases de données avancées

Introduction à MATLAB R

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

4. Groupement d objets

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Module Communication - Messagerie V6. Infostance. Messagerie

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Créer le schéma relationnel d une base de données ACCESS

OCL - Object Constraint Language

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Logical Volume Manager (LVM)

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Compilation (INF 564)

UML et les Bases de Données

Algorithmique et Programmation, IMA

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Recherche dans un tableau

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Les structures. Chapitre 3

//////////////////////////////////////////////////////////////////// Administration bases de données

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Licence Sciences et Technologies Examen janvier 2010

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programmation par les Objets en Java

Système clients serveur Kwartz Vulgarisation, identification, dossier personnel

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

IUT BREST UN LOGICIEL SCADA : PC VUE 2010 DEP.GMP

Conception de circuits numériques et architecture des ordinateurs

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Remote Method Invocation (RMI)

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

La mémoire. Un ordinateur. L'octet. Le bit

Équipe Académique Mathématiques

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Configurer la supervision pour une base MS SQL Server Viadéis Services

RMI le langage Java XII-1 JMF

Plan du cours. Historique du langage Nouveautés de Java 7

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

UE Programmation Impérative Licence 2ème Année

Chapitre VI- La validation de la composition.

Structure fonctionnelle d un SGBD

Cyberclasse L'interface web pas à pas

Manipulation 4 : Application de «Change».

Transcription:

Algorithmique & programmation Chapitre 3 : Fichiers séquentiels Entrées/Sorties Fichiers Binaires à Accès Séquentiel Fichiers et Ada!! En Ada les entrées/sorties sont supportées par des paquetages standards du langage!! Les déclarations de ces paquetages sont écrites entièrement en Ada!! Chaque représentation/mode d accès utilise un paquetage particulier qui peut être importé en utilisant une clause with 2

Fichiers texte à accès séquentiel!! On a utilisé jusqu alors le paquetage P_Esiut, qui n'est pas standard mais spécifique à l IUT.!! Le paquetage standard d Ada pour les fichiers texte est Text_io "! Le paquetage P_Esiut est d ailleurs construit à partir du paquetage Text_io (cf poly Ada) "! Le paquetage Text_io est également utilisé pour les E/S textuelles sur des fichiers autres que le clavier et l écran 3 Fichiers binaires à accès séquentiel!! On utilise le paquetage Sequential_io!! Ce paquetage est générique, c'est-à-dire applicable à plusieurs types de données!! Toute utilisation de ce paquetage passe par une phase d instanciation précisant le type des éléments que l'on manipule : package P_Montype_Io is new Sequential_Io(T_Montype); 4

Fichiers binaire à accès direct!! On utilise le paquetage Direct_io!! Ce paquetage est lui aussi générique et devra être instancié avant tout usage. package P_Montype_Direct_Io is new Direct_Io(T_Montype);!! Les éléments d un tel fichier sont lus et écrits dans n importe quel ordre en spécifiant le rang de l élément à lire ou écrire 5 Fichiers et Exceptions!! Les E/S sont effectuées par des appels ordinaires à des procédures et/ou fonctions définies dans les paquetages cités!! Pour toute erreur dans une opération d E/S, une exception est déclenchée!! Le nom de l exception varie selon l erreur (cf poly Ada) 6

Identification d'un fichier!! Toute opération d E/S doit identifier le fichier sur lequel les traitements sont exécutés!! Un fichier a un nom unique et permanent appelé nom externe comme par exemple : /users/pub/1a/ada/tp8.adb!! Le système d'exploitation maintient un catalogue qui associe à chaque fichier : sa localisation physique, ses droits d'accès, sa date de création...!! Sous Unix, on peut les visualiser par : ls l --rw-r--r Dupont 2705 Nov 22 2007 tp8.adb droits propriétaire taille date nom externe 7 Nom Interne d'un fichier!! Dans un programme, un fichier est identifié pas un nom interne (ou variable fichier)!! Ce nom interne est déclaré comme une variable du type file_type "! type exporté par les paquetages Ada d E/S!! Le nom interne a une durée de vie qui est celle du programme!! C'est en utilisant un nom interne que l'on manipulera un fichier lors d'opérations d'e/s 8

Exemple de déclaration!! fichier binaire séquentiel type TR_Personne is record Nom : String(1..10) ; Age : Integer range 0..120 ; end record; -- instanciation du paquetage générique Sequential_io -- pour des E/S d'éléments du type TR_Personne package P_Personne_Io is new Sequential_Io(TR_Personne) ; use P_Personne_Io ; -- Exemple de déclaration d'un fichier de TR_Personne Fpersonne : P_Personne_Io.File_Type ; 9 Ouverture d'un fichier!! L association entre nom externe et nom interne se fait lors de l'ouverture du fichier, par une instruction open (ou create) qui : "! recherche le fichier par son nom externe dans le catalogue du système "! détermine la localisation physique du fichier "! détermine les droits d accès "! associe l identificateur interne Ada et le nom externe du système!! Cette opération d initialisation par l usager du nom interne est à réaliser une seule fois avant de commencer les traitements 10

Mode d utilisation d un fichier!! Lors de l ouverture d un fichier, il faut indiquer le mode d utilisation de ce fichier!! Ce mode d utilisation du fichier est décrit par un paramètre du type file_mode exporté par tout paquetage d E/S!! file_mode est un type énuméré ayant les valeurs : "! in_file : lecture seule "! out_file : écriture seule "! inout_file : lecture et écriture (uniquement avec Direct_io) 11 Exemple : ouvertures, création de fichiers create(fpersonne, Out_File, "fpers.dat"); -- le fichier "fpers.dat" n'existait pas dans -- le répertoire open(fpersonne, In_File, "fpers.dat"); -- ouverture en lecture seule open(fpersonne, Out_File, "fpers.dat"); -- l'ancien contenu est détruit, écriture seule open(fpersonne, Inout_File, "fpers.dat"); -- ouverture en lecture écriture (Direct_io) 12

Fermeture d'un fichier!! La dissociation entre nom interne et nom externe se fait par l opération close!! Après avoir fermé un fichier, on ne peut plus l'utiliser à moins de le ré-ouvrir close(fpersonne) -- on ne peut plus manipuler Fpersonne après cette instruction!! Si le programmeur oublie de fermer explicitement un fichier, le système s'en chargera à la fin du programme 13 E/S sur fichiers binaires séquentiels!! Les opérations de manipulation d un fichier utilisent le nom interne sans jamais plus faire référence au nom de fichier externe!! Se positionner en début du fichier (relire ou récrire en algo) reset(fpersonne); reset(fpersonne, In_File); -- changement du mode d'ouverture -- au moment du reset 14

E/S sur fichiers binaires séquentiels!! Lire ou écrire (selon le mode d utilisation spécifié lors de l ouverture ou du reset) -- UnePersonne doit être une variable -- déclarée de type TR_Pers read(fpersonne,unepersonne); -- équivalent au lire(f,c) de l'algo write(fpersonne,unepersonne); -- équivalent au écrire(f,c) de l'algo 15 E/S sur fichiers binaires séquentiels!! Prédicat de détection de la fin de fichier if end_of_file(fpersonne) then -- équivalent au fdf(f) de l'algo 16

Exemple Complet.ads -- Importer le module générique Sequential_io -- La clause use est inutile dans ce cas with Sequential_Io; package P_Personne is -- Déclarer le type des éléments contenus dans le fichier type Tr_Personne is record Nom, Prenom : String(1..30); end record; -- Instancier le paquetage Sequential_Io -- Pour manipuler des fichiers de Tr_Personne package P_Personne_Io is new Sequential_Io(Tr_Personne); use P_Personne_Io; -- Exemple de procédure manipulant un fichier de Personnes procedure Affiche (F : in out P_Personne_Io.File_Type ); end P_Personne; 17 Exemple Complet adb with P_Esiut; use P_Esiut; package body P_Personne is procedure Affiche (F : in out P_Personne_Io.File_Type) is -- variable pour lire un élément du fichier Personne : TR_Personne; begin reset(f); -- on se positionne en début de fichier while not End_Of_File(F) loop -- tant que la fin de fichier n'est pas atteinte -- on lit un nouvel élément dans le fichier read(f, Personne); Ecrire_ligne(Personne.nom & ' ' & Personne.prenom); end loop; end Affiche; end P_Personne; 18

Exemple Complet procédure principale with P_Personne; use P_Personne; use P_Personne.P_Personne_Io; -- P_Personne_Io est considéré comme un paquetage -- faisant partie du paquetage P_Personne procedure Test_Personne is -- déclaration d un fichier de personne personne : P_Personne_Io.File_Type; begin -- ouverture du fichier en lecture -- le fichier fpersonne.dat devra être présent -- dans le même répertoire que le programme test_personne Open(Fpersonne, In_File, "fpersonne.dat"); -- parcours et affichage du contenu du fichier Affiche(Fpersonne); Close(Fpersonne); -- fermeture du fichier après usage end Test_Personne; 19 Conventions!! Préfixer avec le nom du paquetage lorsqu il y a risque d ambiguïté!! Dans l exemple ci-dessus, l utilisation de la clause use P_Personne.P_Personne_Io permet de ne pas préfixer les objets exportés par ce module!! C est ce qui permet d écrire Close(Fpers) au lieu de P_Personne.P_Personne_Io.close(Fpers)!! Cette même clause use pourrait permettre de ne pas préfixer le type File_Type comme on le fait pourtant : Fpersonne : P_Personne_Io.File_Type;!! C est pour la lisibilité du programme que l on préfixe ici : cela permet de connaître d un seul coup d œil le type des éléments contenus dans le fichier Fpers!! Ce préfixage sera plus indispensable si, dans un même programme, vous manipulez deux types de fichiers différents en ayant donc instancié deux paquetages d E/S différents qui définiront tous les deux un type File_Type 20

Conventions!! Faire bien attention à ne pas confondre : "! le paquetage d E/S instancié défini par :!! package P_Personne_Io is new Sequential_Io(Tr_Personne) "! avec la variable fichier, de type File_Type, défini par ce paquetage :!! Fpersonne : P_Personne_Io.File_Type; "! ou le nom externe, nom du fichier reconnu par Unix, qui est une chaîne de caractère (de type String)!! "fpersonne.dat"!! Pour cela, utiliser systématiquement les conventions de nommage suivantes : "! le type des éléments d un fichier : T_Elem (avec T pour type, ou TR pour type record) "! le module instancié : P_Elem_IO (avec P pour package et IO pour Input/Out) "! le nom interne (objet fichier) : Felem (avec F comme fichier) "! le nom externe (fichier disque) : "felem.dat" 21