Académique Documents
Professionnel Documents
Culture Documents
LSI 1
2
LSI 1
Matérialisation d’une SD
Matérialisation de la SD pile
En tant que OA : représentation chaînée
En tant que TDA : représentation chaînée
Evaluation
3
LSI 1
LSI 1
LSI 1
LSI 1
Le fichier nom.h doit être inclus dans tous les fichiers qui
font appel à une fonction d’interface définie dans nom.c
7
LSI 1
LSI 1
LSI 1
Programme source
Editeur de
Erreurs d’édition de liens
liens
Programme cible
Résultat
Données Processeur
Erreurs d’exécution
10
LSI 1
Source2
interface
Compilation obj2 Edition de liens Programme
implémentation exécutable
Sourcen
interface
Compilation objn
implémentation
Un fichier ayant l’extension .c doit comporter
le sous-programme main
11
LSI 1
Principes généraux
Possibilités fournies par le langage C pour la matérialisation d’un SD
Matérialisation de la SD pile en tant que OA : représentation chaînée
Matérialisation de la SD pile en tant que TDA : représentation chaînée
Evaluation
12
LSI 1
Principes généraux
• Pour pouvoir concrétiser (matérialiser ou réaliser ou implémenter ou
implanter) une SD on distingue les concepts suivants
▫ Interface
elle regroupe les opérations (ou les services) définies sur la SD
Illustration (cas de la SD pile)
▫ creer_pile
▫ vide
▫ dernier
▫ empiler
▫ depiler
On dit que la SD pile exporte les services cités ci-dessus.
▫ Implémentation
elle regroupe la réalisation des services exportés par l’interface de la SD
13
LSI 1
Principes généraux
▫ Utilisation
elle utilise ou réutilise des services proposés par l’interface. Lors de l’utilisation
on voit la SD Pile via son interface
▫ Assertion
est une expression de type booléen
elle est censée être évaluée à vrai lors de son exécution
dans le cas où l’assertion (affirmation) est violée (évaluée à faux), on arrête
l’exécution
Le concept d’assertion est utilisé pour protéger la SD des utilisations illégales
Par exemple : depiler sur une pile vide
14
LSI 1
LSI 1
Assertion Failed : expression File : nom fichier Line : numéro ligne Abnormal program terminaison
16
LSI 1
Matérialisation de la SD pile
• La matérialisation de la SD pile peut se faire soit en tant
que
▫ Objet abstrait(OA)un seul exemplaire (ici une seul pile)
unique implicite
▫ Type de Données Abstrait (TDA) plusieurs exemplairesil faut
mentionner ou rendre
explicite l’exemplaire courant
17
LSI 1
Représentation chaînée
18
LSI 1
Matérialisation de la SD pile : OA
Partie interface : pile.h Partie interface : pile.h
• L’interface pile.h regroupe des services /* opération de création */
exportés par cette interface void ceer_pile(void) ;
▫ Chaque service correspond à une
opération applicable sur la SD (ici la SD /*opérations de consultation*/
Pile) unsigned vide (void) ;
▫ il est fourni sous forme d’un sous- /* 1 si la pile est vide sinon 0*/
programme int dernier (void) ;
• Les opérations applicables sur la SD Pile
▫ Opération de création /*opérations de modification*/
procédure ou fonction void empiler (int) ;
▫ Opérations de modification /* Le paramètre est la valeur à empiler*/
procédures
▫ Opérations de consultation void depiler(void ) ;
fonctions Ainsi, l’interface joue le rôle du guide
d’implémentation vis à vis de la
réalisation
19
LSI 1
Matérialisation de la SD pile : OA
Partie implémentation : pile.c
/* librairies standards*/
#include <stdio.h> • Remarque
#include <alloc.h>
#include <assert.h> ▫ Les opérations définis dans pile.h
opèrent sur une pile unique à
/* librairie spécifique définie par le programmeur*/
#include ’’pile.h’’ caractère implicite
/* pile.h est censée être stocké dans le répertoire courant appelé
répertoire de travail*/ ▫ La partie implémentation (pile.c)
/*représentation physique*/ réalise les services exportés par
struct element l’interface (pile.h)
{
int cle ; ▫ Celle ci comporte
struct element * suivant ;
}; Les signatures ou le entêtes des services
static struct element *sommet ; exportés
/* Pour restreindre la portée de cette variable à ce fichier, il faut Et pour chaque opération exportée par
utiliser le mot réservé static on fait la variable sommet n’est
pas destinée à l’exportation */ l’interface sa sémantique(rôle)
20
LSI 1
Matérialisation de la SD pile : OA
Partie implémentation : pile.c Illustration
void creer pile(void)
{ sommet=NULL ; }
Représentation Abstraite d’une pile vide
unsigned vide(void)
{ return(sommet==NULL) ; }
sommet
int dernier(void)
{ assert( ! vide()) ; Représentation Chaînée d’une pile vide
return(sommet cle) ; @
/* return((*sommet).cle)*/ sommet
cle suivant
}
4
@ 3
@ 2
@ 1
21
LSI 1
Matérialisation de la SD pile : OA
Partie implémentation : pile.c Illustration
void empiler(int info) @
cle suivant
{ struct element*p ; sommet
p=(struct element*) malloc(size of(struct element)) ;
4
@ 3
@ 2
@ 1
pcle=info;
info
psuivant=sommet; p
/*mettre à jour sommet*/ @
sommet=p; }
@
cle suivant
sommet
4
@ 3
@ 2
@ 1
info
@
22
LSI 1
Matérialisation de la SD pile : OA
Partie implémentation : pile.c Illustration
void depiler(void) sommet
@
{ struct element*p ; cle suivant
assert( !vide()) ; 4
@ 3
@ 2
@ 1
p=sommet ; info
@
sommet= sommet suivant ;
Libérer de la mémoire
free(p) ; }
p @
@
cle suivant
sommet
4
@ 3
@ 2
@ 1
23
LSI 1
Matérialisation de la SD pile : OA
Partie utilisation : test.c
#include " pile.h "
void main(void)
• La partie utilisation voit la SD (ici la SD
{ pile) uniquement via son interface elle
unsigned i;
creer pile();
utilise les services fournis par l’interface
assert(vide());
for(i=1;i<=10;i++)
{
empiler(i);
}
assert(!vide());
for(i=1;i<=10;i++)
{
printf(“%d\n”,dernier());
dépiler();
}
assert(vide());
}
24
LSI 1
Représentation chaînée
25
LSI 1
LSI 1
LSI 1
LSI 1
LSI 1
LSI 1
LSI 1
LSI 1
SD pile ayant un
paramétrage sur le
type des éléments
LSI 1