1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle...

40
1 Révisions

Transcript of 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle...

Page 1: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

1

Révisions

Page 2: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

2

Tableaux non contraints

Déclaration du type :

type Tvecteur = tableau ( intervalle d’entiers) de entiers

type Tvecteur is array (integer range <>) of integer;

Le vecteur doit être contraint avant toute utilisation donc lors de la déclaration des variables du programme principal:

vect : Tvecteur ( 1 .. 8);

mais grande utilité des tableaux non contraints lors du passage de paramètres dans les procédures ou les fonctions

Page 3: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

3

Tableaux non contraints

Chercher une valeur dans un tableau se traduit par une procédure dont les instructions restent les mêmes que le tableau contienne 10, 20 ou 1000 valeurs.

Ce qui sera modifié, sera le nombre d’itérations, suivant la position de cette valeur cherchée dans le tableau.

Type Telement is private;

type Tvecteur is array (integer range <>) of Telement;

Page 4: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

4

Tableaux non contraints

procedure RECHERCHE ( {D}vect : Tvecteur; {D} element_cherche : Telement;

{R} position : entier ; {R} trouve : booléen)

pré-requis : aucun

action : S’il existe la valeur element_cherche, dans le tableau vect, alors met trouve à vrai et position prend la valeur du premier indice où element_cherche est rangé, sinon met trouve à faux et position reste indéterminé

stratégie : parcours partiel de vect

Page 5: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

5

Tableaux non contraints

procedure RECHERCHE ( {D}vect : Tvecteur; {D} element_cherche : Telement ;

{R} position : entier ; {R} trouve : booléen)

I : entier

début

I premier indice de vect

tant que I <= dernier indice de vect et alors non ( vect(I) = element_cherche)

faire I I + 1

fin tant que

trouve I <= dernier indice de vect

position Ifin RECHERCHE;

Page 6: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

6

procedure RECHERCHE ( {D}vect : Tvecteur; {D} element_cherche : caractere ;

{R} position : entier ; {R} trouve : booléen)

I : entier

début

I premier indice de vect

tant que I <= dernier indice de vect et alors non (vect(I) = element_cherche )

faire I I + 1

fin tant que

trouve I <= dernier indice de vect

position Ifin RECHERCHE;

Tableaux non contraints

Parcours partiel

Page 7: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

7

Procédure ou fonction générique

procedure ECHANGE_ENTIER( {D/R} a, b : entier)

pré-requis : aucun

action : permute les deux valeurs entières contenues dans a et b

variable : temp : entier

début

temp a

a b

b temp

fin

procedure ECHANGE_REEL( {D/R} a, b : réel)

pré-requis : aucun

action : permute les deux valeurs réelles contenues dans a et b

variable : temp : réel

début

temp a

a b

b temp

fin

Page 8: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

8

Procédure ou fonction générique

La généricité permet d’écrire une procédure modèle à partir de laquelle des procédures spécifiques pour chaque type pourront être créées et utilisées.

Dans le cas des exemples précédents, seul le type diffère : le type va constituer un paramètre générique

Page 9: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

9

Procédure ou fonction générique

paramètres de généricité

type TElement is private

procedure ECHANGE_TOUT( {D/R} a, b : TElement)

pré-requis : aucun

action : permute les deux valeurs de même type TType contenues dans a et b

variable : temp : TElement

début

temp a

a b

b temp

fin

Page 10: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

10

Procédure ou fonction générique

Grâce à la procédure générique, il est maintenant possible de créer, en les spécialisant par un type précis, de nouvelles procédures. Cette opération s’appelle instanciation des procédures

procedure ECHANGE_CARACTERES is new ECHANGE_TOUT(character);

procedure ECHANGE_ENTIER is new ECHANGE_TOUT(integer);

procedure ECHANGE_REELS is new ECHANGE_TOUT(float);

Il peut y avoir plusieurs instances d’un même moule.

Page 11: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

11

Procédure ou fonction générique

Objet utilisable

Moule non utilisable directement

Instanciation

avec paramètres effectifs

Objet utilisable

Objet générique procedure

function

with …..;

pas de use

appelé dans une autre procédure ou fonction avec la clause with

Page 12: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

12

Encapsulation

La plupart des méthodes préconisées pour la production de logiciels de qualité

reposent sur la décomposition du logiciel en modules ou composants.

On appelle composant une collection d’entités et de ressources logicielles « encapsulées »

Page 13: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

13

Encapsulation

Composant Exemple de la vie quotidienne

identificateur

Déclaration des fonctionnalités mises à la disposition d’un utilisateur

Définition des fonctionnalités

montre

Donne l’heure

Construction interne de la montre

interface

Réalisation ou

implémentation

Page 14: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

14

Encapsulation

PDate

type Tdate est privé

procedure lire (D:Tdate);

procedure lire (D:Tdate) is

begin

……

end;

identificateur

Déclarations

Définitions

Page 15: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

15

Paquetages génériques

identificateur

Déclaration des fonctionnalités mises à la disposition d’un utilisateur

Définition des fonctionnalités

interface

réalisation ou

implémentation

generic

paramètres de généricité

Page 16: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

16

Paquetages génériques

LIST_GEN

Instance avec :

type caractère

procedure put

Instance avec :

type entier

procedure ecrit

Même programme

Page 17: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

17

package PProduit

package PDate package PMot

package Pliste_Generique

package PEnsemble_Produits

Page 18: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

18

TProduit

- Nom : TMot

- code : entier

- Date_péremption : TDate

- PrixHT : réel

Fonctionnalités qui permettent de traiter les données

+ procedure saisie ( p : out TProduit) ;

+ procedure affiche ( p : in TProduit) ;

+ function produitAlimentaire ( p : in TProduit) return boolean;

+ function lePrixTTC (p : in TProduit) return float;

+ function produitPerime ( p : in TProduit; dat : TDate) return

boolean;

Page 19: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

19

TDate

- jour : entier

- mois : entier

- an : entier

+ procedure creDate ( D: out TDate; j : in integer; m : in integer; a :

in integer)

+ function precede (D1, D2 : in TDate) return boolean

Page 20: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

20

package PlistGen

package PMot

Instance pour la définition du type TMot

Page 21: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

21

Types abstraits

Un type de données abstrait est représenté par un composant logiciel dont l’interface est le suivant : identificateur du type de données abstrait ensemble de base opérations définies sur tout objet de ce type

• Opération de construction ou destruction• Opérations de modification • Opérations de consultation

itérateurs, dans le cas où l ’objet est une collection d ’éléments exceptions constantes éventuelles

Page 22: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

22

Type abstrait Pile

identificateur du type de données abstrait Tpile

ensemble de base valeurs de type Telement

Page 23: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

23

Type abstrait Pile

Opérations de construction:

• CRÉER TPile crée une pile vide

Opérations de modification 

• EMPILE( TPile, TElement) TPile ajoute un élément à la pile

• DEPILE (TPile) TPile retire un élément de la pile

Opérations de consultation

• VALEUR_SOMMET (TPile) TElement donne accès au dernier élément rangé dans la pile, en le

laissant dans la pile

• VIDE (TPile) booléen permet de savoir si une pile est vide ou non

Page 24: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

24

Déclaration de l’unité pileQuelle que soit l’implémentation, l’interface de l’unité de programmation sera la même, à savoir déclaration des procédures et fonctions suivantes  :

Soit un type TPile privé

 

procedure CRÉER ( {R} P : TPile ) -- pré-requis : aucun

-- action : crée une pile vide P

procedure EMPILE ( {D/R} P : TPile ; {D} e : TElement )-- pré-requis : aucun

-- action : ajoute l’élément e à la pile  P (l’ajout se fait au sommet de la pile)

procedure DEPILE ( {D/R} P : TPile  ) -- pré-requis : aucun

-- action : retire s’il existe, l’élément du sommet de la pile P

Page 25: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

25

Déclaration de l’unité pile

fonction VALEUR_SOMMET ( {D} P : TPile  ) retourne un Telement-- pré-requis : la pile n’est pas vide

-- résultat : renvoie la valeur qui est au sommet de la pile P  

fonction VIDE ( {D} P : TPile  ) retourne un booleen -- pré-requis : aucun-- résultat : retourne vrai si la pile P est vide, faux sinon  

fonction HAUTEUR ({D} P : TPile  ) retourne un entier-- pré-requis : aucun-- résultat : renvoie le nombre de valeurs rangées dans la pile P

 

La réalisation verra la définition des corps de ces sous programmes

Page 26: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

26

Récursivité

Fonction Fib ( {D} n : entier) retourne 1 entier

• Résultat : calcule la nième valeur de la suite

• Pré requis : Les calculs qui suivent seront toujours faits avec n positif ou nul

• Stratégie : calcul récursif

Page 27: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

27

récursivité

début

si n <= 1

alors retourne 1

sinon retourne Fib (n -1) + Fib (n - 2)

fin si

fin

Page 28: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

28

Récursivité et liste simplement chaînée

On appelle décomposition canonique d ’une liste L non vide, sa décomposition en deux éléments :

sa tête L(tête) son reste L(reste)

Page 29: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

29

Récursivité et liste simplement chaînée

Toute fonction ou procédure définie sur une liste L :

• peut si L n’est pas vide,

– traiter l’élément de tête

– s’appeler récursivement sur L(reste) qui est de taille strictement inférieure à celle de L

• nécessite un traitement particulier, si L est vide

Page 30: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

30

Récursivité et liste simplement chaînée

tete

reste

teteou bien

liste vide

liste composée

Page 31: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

31

Notion d’arbre

• Un arbre est une structure à deux dimensions comportant un ensemble fini d’éléments, appelés nœuds.

• Les nœuds sont associés entre eux suivant un ordre hiérarchique strict.

• Il existe au plus, un seul chemin entre deux nœuds.

• Un arbre binaire est un arbre dont chaque nœud possède au plus deux fils

Page 32: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

32

Un arbre binaire est :

soit vide,

soit constitué d’un nœud racine possédant un sous arbre binaire gauche et un sous arbre binaire droit

sous arbre droitsous arbre gauche

racine

Page 33: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

33

Parcours dans un arbre binaire : itérateurs

Parcourir un arbre consiste à visiter les différents noeuds de l’arbre une fois et une seule dans un certain ordre.

Les trois ordres de parcours habituels dans un arbre binaire sont :

• le préordre ou parcours préfixé

• le postordre ou parcours postfixé

• le symétrique ou parcours infixé

Page 34: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

34

Parcours dans un arbre binaire : préordre

si l’arbre n’est pas vide

alors traiter la racine de l’arbre

effectuer le parcours préfixé de son sous arbre gauche

effectuer le parcours préfixé de son sous arbre droit

fin si

Page 35: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

35

Arbre binaire de recherche

Un arbre binaire de recherche est un arbre binaire tel que pour tout nœud, la valeur de ce nœud est supérieure aux valeurs de ses descendants de gauche, et inférieure à celles de ses descendants de droite.

On ne peut parler d’arbre binaire de recherche que si une relation d’ordre sur les valeurs contenues dans l’arbre, est définie et utilisable

On suppose que toutes les valeurs rangées dans les arbres binaires de recherche, sont différentes

Page 36: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

36

Arbre binaire de recherche

Pour ajouter une valeur dans un arbre binaire de recherche, deux méthodes :

– adjonction de la valeur dans une feuille de l’arbre

– adjonction de la valeur à la racine de l’arbre

Page 37: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

37

Arbre binaire de recherche : exemple

34

20 50

8 26 47

23 31

95

84

Page 38: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

38

Arbre binaire de recherche

Page 39: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

39

Arbre binaire de recherche

procedure INSERE_VALEUR ( RAC : in out TArbreBinaire; X : in TElement)

Pré requis : RAC repère un arbre binaire de recherche

Action: insère la valeur X dans l’arbre binaire de recherche repéré par RAC, en conservant les propriétés de cet arbre binaire de recherche

Page 40: 1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.

40

Arbre binaire de recherche

procedure INSERE_VALEUR ( RAC : in out TArbreBinaire; X : in TElement) is

begin

if RAC = null

then RAC := new TCelluleAB' (X, null, null);

else if plusPetit (X, RAC.val)

then INSERE_VALEUR( RAC.suivG, X);

else INSERE_VALEUR( RAC.suivD, X);

end if ;

end if;

end INSERE_VALEUR;