Chapitre 2 : Structures de données linéaires

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

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

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

STAGE IREM 0- Premiers pas en Python

Cours 1 : La compilation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Indications pour une progression au CM1 et au CM2

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Chapitre 2. Eléments pour comprendre un énoncé

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Évaluation et implémentation des langages

Initiation à la Programmation en Logique avec SISCtus Prolog

LES TYPES DE DONNÉES DU LANGAGE PASCAL

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

OCL - Object Constraint Language

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Université de Bangui. Modélisons en UML

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

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

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

Intelligence Artificielle Planification

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Chapitre VI- La validation de la composition.

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

Cours 1 : Qu est-ce que la programmation?

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

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

Cours d initiation à la programmation en C++ Johann Cuenin

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

Le chiffre est le signe, le nombre est la valeur.

Rappels Entrées -Sorties

Nom de l application

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

Cours Composant 2. Qualité logicielle et spécications algébriques

Les structures de données. Rajae El Ouazzani

Initiation à l algorithmique

Cours Informatique Master STEP

Chap III : Les tableaux

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

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

Représentation d un entier en base b

Tâche complexe produite par l académie de Clermont-Ferrand. Mai 2012 LE TIR A L ARC. (d après une idée du collège des Portes du Midi de Maurs)

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Python - introduction à la programmation et calcul scientifique

TP 1. Prise en main du langage Python

Utilisation des tableaux sémantiques dans les logiques de description

Aide : publication de décisions VS

ACTIVITÉ DE PROGRAMMATION

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

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

Générer du code à partir d une description de haut niveau

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Vérification formelle de la plate-forme Java Card

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

Formula Negator, Outil de négation de formule.

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

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

Les structures. Chapitre 3

TD3: tableaux avancées, première classe et chaînes

Introduction à la B.I. Avec SQL Server 2008


Cours de Programmation 2

SECTION 5 BANQUE DE PROJETS

Structurer ses données : les tableaux. Introduction à la programmation

Glossaire des nombres

Bases de Données. Plan

Les diagrammes de modélisation

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

Brique BDL Gestion de Projet Logiciel

Organigramme / Algorigramme Dossier élève 1 SI

Le code à barres EAN 13 mes premiers pas...

Chapitre 1 Qu est-ce qu une expression régulière?

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

Quelques algorithmes simples dont l analyse n est pas si simple

ALGORITHMIQUE ET PROGRAMMATION En C

Informatique Générale

Réaliser la fiche de lecture du document distribué en suivant les différentes étapes de la méthodologie (consulter le support du TD!

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Algorithme. Table des matières

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Introduction à MATLAB R

Chapitre I Notions de base et outils de travail

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

COURS EULER: PROGRAMME DE LA PREMIÈRE ANNÉE

UML (Diagramme de classes) Unified Modeling Language

Définitions. Numéro à préciser. (Durée : )

Cours d Informatique

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

TP1 : Initiation à Java et Eclipse

Cégep de Saint Laurent Direction des communications et Direction des ressources technologiques. Projet WebCSL : Guide de rédaction web

OPTION SCIENCES BELLE-ISLE-EN-TERRE

Document d aide au suivi scolaire

STAGE D INITIATION RAPPORT DE. Elaboré par. Prénom NOM. Encadré par : Mr Prénom NOM (Société) Société d accueil :. (Sigle de la société d accueil)

Guide No.2 de la Recommandation Rec (2009).. du Comité des Ministres aux États membres sur la démocratie électronique

Transcription:

Cours Structures de Données Avancées Option G.L. Semestre 3 Chapitre 2 : Structures de données linéaires 1. Les types abstraits de données Un Type Abstrait de Données (TAD) est une notation pour décrire les types de données utilisés dans un algorithme, ainsi que l ensemble des opérations qu on peut leur appliquer et les propriétés de ces opérations. La conception de l algorithme se fait en utilisant les opérations du TAD. Donc, un type de données n est pas seulement un ensemble de valeurs mais un ensemble de valeurs muni d un ensemble d opérations (de même qu en mathématiques un groupe est un ensemble muni d une opération, un anneau est un ensemble muni de deux opérations, etc.). On peut même aller plus loin en disant qu il suffit pour décrire un type de données, de décrire très précisément ses opérations, sans donner explicitement l ensemble de ses valeurs. On parle dans ce cas de type abstrait. L avantage de la définition abstraite est qu elle se concentre sur ce qu on peut faire avec des objets de ce type, indépendamment de la manière dont ces objets sont représentés. Par exemple, dans la définition abstraite d un type date on n a pas besoin de spécifier si les dates sont représentées par des entiers, des triplets (jour, mois, année) ou des chaînes de caractères. Ce n est qu au moment de l implémentation concrète que l on choisira une représentation en fonction de critères tels que la performance, l économie de place mémoire, la simplicité de programmation, etc. 1.1 Définition d un TAD Un type abstrait de données est donc caractérisé par : Son nom, Les sortes qu il manipule, Les opérations sur les données, Les propriétés de ces opérations. Les trois premières notions définissent la signature d un TAD, les propriétés sont exprimées généralement sous forme d axiomes dans un TAD. Signature: La signature d un type abstrait est la donnée de son nom, les sortes qu il utilise et les différentes opérations sur les données. Sortes: Les sortes ne sont rien d autre que des noms servant à représenter des ensembles de valeurs sur lesquels vont porter les opérations. Par exemple naturel, booleen, entier, etc. Profil d une opération: Chaque opération est définie par son profil : les sortes de ses paramètres et la sorte du résultat. La forme générale du profil d une opérations n-aire est: Nom-opération : sorte 1, sorte 2,..., sorte n sorte r.

Remarques: 1. Pour éviter les notations trop lourdes des opérations (préfixée: trop d imbrications de parenthéses) nous indiquons à la place des arguments des tirets, nous retrouvons donc les notations habituelles mixfixée, postfixée. Par exemple: i + j (pour éviter + (i, j)). 2. Une opération qui n a pas d argument est une opération constante. 1.2 Exemples de signatures Les signatures suivantes sont extraites des TADs BOOLEEN et NATUREL: TAD BOOLEEN Sorte booléen vrai : booléen faux : booléen _ et _ : booléen, booléen booléen _ ou _ : booléen, booléen booléen TAD NATUREL 0 : nat succ : nat nat _ + _ : nat, nat nat _ - _ : nat, nat nat _ * _ : nat, nat nat _ ^_ : nat, nat nat 1.3 Réutilisation des TADs Il serait peu pratique d avoir à donner toute la signature et toutes les propriétés des entiers (par exemple) quand on définit les vecteurs (où les entiers servent à numéroter les éléments). On se donne donc la possibilité quand on définit un type de réutiliser les types déjà définis. Dans ce cas, la signature du type vecteur est l union des signatures des types utilisés, enrichie de nouveaux noms de sortes et d opérations. On introduit par cette construction une hiérarchie entre les types qui permet d introduire une classification importante entre les sortes et les opérations d un type de données. Dans une signature, on appelle sorte(s) définie(s) la ou les sortes correspondant aux noms de sortes nouveaux. On appelle sorte(s) prédéfinie(s) la ou les sortes provenant des TADs utilisés. Une opération est dite interne constructeur si elle rend un résultat d une sorte définie. Ces opérations servent à construire les valeurs d une sorte. Par exemple, l opération succ dans le TAD NATUREL, permet de construire tous les entiers. Une opération est dite interne non constructeur si elle rend un résultat d une sorte définie mais ne construit pas de nouvelles valeurs pour cette sorte. Par exemple, l opération _+_ dans le TAD NATUREL. Enfin, une opération est dite observateur sur une sorte définie si elle rend un résultat d une sorte prédéfinie et possède au moins un argument de sorte définie. Par exemple, l opération _=_ dans le TAD NATUREL1 ci dessous, TAD NATUREL1 Utilise BOOLEEN 0 : nat succ : nat nat _ + _ : nat, nat nat _ - _ : nat, nat nat _ * _ : nat, nat nat _ ^_ : nat, nat nat Internes constructeurs Internes non constructeurs

_=_: nat, nat booléen observateur 1.4 Les axiomes Le problème est de donner une signification (une sémantique) aux noms de la signature, c.à.d. aux sortes et opérations. Si on veut définir un TAD indépendamment de ses implémentations possibles, la méthode la plus connue consiste à énoncer les propriétés des opérations sous forme d axiomes. La forme générale de l écriture des axiomes est: terme g terme d Le symbole doit se lire comme est équivalent à, il n a pas de direction privilégiée et signifie qu on peut remplacer ce qui est à gauche par ce qui est à droite et réciproquement. Cette forme peut s étendre à l expression des axiomes conditionnels comme suit: terme g si condition alors terme d1 sinon terme d2 Choix d écriture des axiomes Généralement, il faut écrire des axiomes pour définir le résultat de la composition des opérations observateurs et internes non constructeurs avec toutes les opérations internes constructeurs. Pour cela, le nombre d axiomes nécessaires pour définir les propriétés d une telle opération dépend de son nombre d arguments et les opérations constructeurs associées aux sortes de ces arguments. Dans le cas ou certaines opérations constructuers restent indéfinies, il faut écrire des axiomes pour les définir au moyen d autres opérations internes. Exemple Si on veut complèter le TAD NATUREL par des axiomes, Il faut écrire pour chaque opération observateur ou interne non constructeur autant d axiomes que d opérations internes constructeurs: 0 et succ, combinées avec les arguments associés, c.-à-d. quatre axiomes pour l opération _+_. 0 + 0 0; 0 + succ(y) succ(y); succ( X) + 0 succ(x); succ(x) + succ(y) succ(x + succ(y)); qui sont combinés deux à deux pour donner les axiomes 1 et 2 du TAD en question suivant. TAD NATUREL Sorte Nat 0 : nat; succ : nat nat; _+_ : nat, nat nat; _-_ : nat, nat nat; _*_ : nat, nat nat; _^_ : nat, nat nat; Axiomes 1- X + 0 X; 2- X + succ(y) succ(x + Y); 3-0 - X 0; convention pour éviter de sortir des entiers naturels 4- X - 0 X; 5- succ(x) - succ(y) X - Y; 6- X * 0 0; 7- X * succ(y) X + (X * Y); 8- X ^0 succ(0); 9- X ^succ(y) X * (X ^Y); Variables X, Y : nat;

Remarque: Ils existent des types de données où certaines opérations sont des fonctions partielles, non définies partout. Les préconditions sont destinées à restreindre l utilisation des opérations à des opérandes appartenant au domaine de définition de cette opération. La syntaxe des préconditions est : pré(nom_opération(arguments)) définie ssi < condition > Lorsqu une opération n a pas de précondition, le domaine de définition de cette opération est toute la sorte. Lorsqu on écrit des axiomes d un TAD, on est amené a se poser les questions suivantes: 1. N y a t-il pas d axiomes contradictoires (consistance)? 2. A t-on donné un nombre suffisant d axiomes pour décrire toutes les propriétés du TAD (complétude)? 1.5 Implémentation d un TAD A l issue d une conception descendante on veut obtenir l algorithme dans un langage de programmation. Dans ce cours, il s agit du langage JAVA. Il faut donc établir une correspondence entre les types abstraits utilisés pour concevoir l algorithme, et les types (élémentaires ou objets) du langage JAVA. La réalisation d un TAD consiste donc à: Pour chaque sorte définie, choisir une structure interne de données construite à partir des types simples (primitifs) ou complexes (objets) du langage et/ou des types déjà définis. La programmation des opérations internes, en tenant compte de la structure choisie, par des fonctions du langage de programmation (méthodes de classes dans le cas de JAVA). La programmation des opérations observateurs ou internes non constructeurs par des fonctions du langage de programmation (méthodes de classes dans le cas de JAVA) en utilisant leurs axiomes. Exemple: On se propose d abord d écrire le TAD DISQUE décrivant la structure de donnée disque formée à partir des coordonnées du centre et de son rayon. Prévoir l opération Surface qui calcule la surface d un disque. Ensuite, on propose une implémentation pour ce TAD en JAVA. TAD DISQUE Utilise REEL Sortes Disque : nouveau_disque : Réel, Réel, Réel Disque x_du_centre : Disque Réel y_du_centre : Disque Réel rayon : Disque Réel surface : Disque Reel Variables : u,v,r : Réels ; d : disque Préconditions : Pré(nouveau-disque(u,v,r)) définie ssi r > 0 Axiomes : Rayon(nouveau _disque(u, v, r))= r x_ du_centre(nouveau _disque(u, v, r)) = u y_du_centre(nouveau _disque(u, v, r)) = v surface(d) = rayon(d) * rayon(d) * 3.14

Une implémentation possible en JAVA : public class Disque private double rayon ; private double x_du_centre ; private double y_du_centre ; public Disque() System.out.println("Création d'un disque!"); rayon = 0; x_du_centre = 0; y_du_centre = 0; public Disque(double prayon, double pxcentre, double pycentre) System.out.println("Création d'un disque avec des paramètres!"); rayon = prayon; x_du_centre = pxcentre; y_du_centre = pycentre; public double rayon() return rayon; public double x_du_centre () Return x_du_centre; public double y_du_centre () return y_du_centre; public double surface () return rayon* rayon * 3.14 ;