Traitement Abstrait De Données

  • Créateur du sujet Créateur du sujet Any
  • Date de début Date de début

Any

Membre actif
23 Février 2009
170
10
36
toulouse
Bonjour a tous je suis un habitué de la section customisation et je viens vous faire un petit coucou enfin c'est un peut plus grave !

Alors cela fait 3 mois que mon iut (informatique) est en grève et il me colle des exercices a faire que je ne comprend pas pour nous entraîner !!

je vous laisse admirer mon exercice avec ce vocabulaire obscure, au moment ou je vous parle j'essaye de le faire et je galere je vous ferez passer ce que j'ai fait dans l'aprem !!


TD n° 3 - Le Type Abstrait de Données Durée - 1 -
I.U.T. d'Informatique 2008-2009
Semestre 2

Types Abstraits de Données
TD n° 3 - Le Type Abstrait de Données Durée


On se propose d’introduire la notion de point de vue d’un Type Abstrait de
Données (TAD) sur un exemple simple. Soit Durée cet exemple abordé ici selon deux
points de vue : celui du concepteur qui spécifie les opérations et propriétés du type et
celui du programmeur qui choisit les structures de données et code les opérations
définies par le concepteur. Lors de prochains TD, nous introduirons un troisième
acteur : l’utilisateur (ou client) qui, pour son application, a besoin des opérations du
type spécifiées par le concepteur.

Soient Durée, Entier et Booléen dénotant respectivement le type d'une durée,
celui des entiers et celui des booléens. On propose les opérations et propriétés
suivantes pour le type Durée :

a) Opérations

uneDurée : Entier x Entier x Entier → Durée
heures : Durée → Entier
minutes : Durée → Entier
secondes : Durée → Entier
inf : Durée x Durée → Booléen
égal : Durée x Durée → Booléen
plusUneSeconde : Durée → Durée

Pour h, m, s de type Entier :

uneDurée (h, m, s) est défini ssi h ≥ 0 et 0 ≤ m ≤ 59 et 0 ≤ s ≤ 59

b) Propriétés

Pour h, h1, h2, m, m1, m2, s, s1, s2 de type Entier :

(P1) heures (uneDurée (h, m, s)) = h

(P2) minutes (uneDurée (h, m, s)) = m

(P3) secondes (uneDurée (h, m, s)) = s

(P4) inf (uneDurée (h1, m1, s1), uneDurée (h2, m2, s2)) =
(h1 < h2) ou (h1=h2 et m1 < m2) ou (h1=h2 et m1=m2 et s1 < s2)

(P5) égal (uneDurée (h1, m1, s1), uneDurée (h2, m2, s2)) =
h1 = h2 et m1 = m2 et s1 = s2
TD n° 3 - Le Type Abstrait de Données Durée - 2 -
(P6) plusUneSeconde (uneDurée (h, m, s)) =
si s < 59 alors uneDurée (h, m, s + 1)
sinon si m < 59 alors uneDurée (h, m + 1, 0)
sinon uneDurée (h + 1, 0, 0)

Questions :

1) Spécification du Type Concret de Données Durée

1.1) Vous êtes le concepteur du TAD Durée et vous souhaitez en donner une
incarnation dans un langage de programmation. En vous appuyant sur le profil des
opérations de la spécification fonctionnelle du type abstrait Durée, écrire la
spécification de chaque sous-programme en langage algorithmique : nom du sous-
programme, rôle du sous-programme en un court commentaire, paramètres en entrée,
paramètres en sortie, paramètres en mise à jour, ... Tout paramètre d'une procédure
ou d'une fonction ainsi que tout résultat de fonction sera correctement typé.

1.2) En reprenant les en-têtes de la question précédente et les propriétés données
dans le sujet, fournir la spécification du type concret Durée. On exportera les
opérations d’affectation (<-) et de comparaison (= et /=) de deux durées.


2) Implémentation du Type Abstrait de Données Durée

2.1) Vous êtes maintenant le programmeur du TAD Durée et vous avez en charge
d’implémenter le type abstrait (concret) Durée spécifié par le concepteur. Définir en
langage algorithmique le type Durée par un enregistrement.

2.2) En respectant la spécification des sous-programmes et en utilisant les
propriétés du type abstrait Durée, programmer en langage algorithmique les
différentes opérations spécifiées.

2.3) Fournir l’implémentation du type abstrait Durée.

2.4) Vous remarquez qu’une durée peut aussi se coder par un entier mémorisant
son nombre de secondes. Définir en langage algorithmique un tel type Durée et
programmer dans cette représentation les opérations du type.

2.5) Fournir la spécification et l’implémentation du type dans cette nouvelle
représentation.


Merci d'avance Any
 
tu veux qu'on fasse tes devoirs, c'est ça :rose: ?
 
Non pas du tout je vais vous poster mes réponse et je voudrai que vous m'aidiez ^^ je ne suis pas du genre a faire faire mes devoir par d'autre !
 
1)1)

-- gÈnÈrateur du type DurÈe
-- nÈcessite h >= 0 et 0 <= m <= 59 et 0 <= s <=0 59
fonction uneDurÈe (
entrÈe h <Entier>,
entrÈe m <Entier>,
entrÈe s <Entier>
)
retourne <DurÈe>;

-- observateur du type DurÈe. Retourne le nombre d'heures
fonction heures (
entrÈe d <DurÈe>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre de minutes
fonction minutes (
entrÈe d <DurÈe>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre de secondes
fonction secondes (
entrÈe d <DurÈe>
)
retourne <Entier>;

-- Retourne VRAI si la durÈe d1 est infÈrieure ‡ la durÈe d2
fonction inf (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>;

-- Retourne VRAI si la durÈe d1 est Ègale ‡ la durÈe d2
fonction Ègal (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>;

-- GÈnÈrateur secondaire d'une durÈe d + 1 seconde
fonction plusUneSeconde (
entrÈe d <DurÈe>
)
retourne <DurÈe>;

1)2)

-- gÈnÈrateur du type DurÈe
-- nÈcessite h >= 0 et 0 <= m <= 59 et 0 <= s <=0 59
fonction uneDurÈe (
entrÈe h <Entier>,
entrÈe m <Entier>,
entrÈe s <Entier>
)
retourne <DurÈe>;

-- observateur du type DurÈe. Retourne le nombre d'heures
fonction heures (
entrÈe d <DurÈe>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre de minutes
fonction minutes (
entrÈe d <DurÈe>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre de secondes
fonction secondes (
entrÈe d <DurÈe>
)
retourne <Entier>;

-- Retourne VRAI si la durÈe d1 est infÈrieure ‡ la durÈe d2
fonction inf (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>;

-- Retourne VRAI si la durÈe d1 est Ègale ‡ la durÈe d2
fonction Ègal (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>;

-- GÈnÈrateur secondaire d'une durÈe d + 1 seconde
fonction plusUneSeconde (
entrÈe d <DurÈe>
)
retourne <DurÈe>;

-- exportation de l'affectation pour le type DurÈe
procÈdure '<-' (
entrÈe d1 <DurÈe>,
m‡j d2 <DurÈe>
);

-- exportation de la comparaison pour le type DurÈe
fonction '=' (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>;

-- Pour h, h1, h2, m, m1, m2, s, s1, s2 de type Entier :
-- heures (uneDurÈe (h, m, s)) = h
-- minutes (uneDurÈe (h, m, s)) = m
-- secondes (uneDurÈe (h, m, s)) = s
-- inf (uneDurÈe (h1, m1, s1), uneDurÈe (h2, m2, s2)) =
-- (h1 < h2) ou (h1=h2 et m1 < m2) ou (h1=h2 et m1=m2 et s1 < s2)
-- Ègal (uneDurÈe (h1, m1, s1), uneDurÈe (h2, m2, s2)) =
-- h1 = h2 et m1 = m2 et s1 = s2

2)1)

type DurÈe : enregistrement
h <Entier>,
m <Entier>,
s <Entier>;

2)2)

-- gÈnÈrateur du type DurÈe
-- nÈcessite h >= 0 et 0 <= m <= 59 et 0 <= s <=0 59
fonction uneDurÈe (
entrÈe h <Entier>,
entrÈe m <Entier>,
entrÈe s <Entier>
)
retourne <DurÈe>
glossaire
d <DurÈe>;
dÈbut
d.h <- h;
d.m <- m;
d.s <- s;
fin

-- observateur du type DurÈe. Retourne le nombre d'heures
fonction heures (
entrÈe d <DurÈe>
)
retourne <Entier>
dÈbut
retourner (d.h);
fin

-- observateur du type DurÈe. Retourne le nombre de minutes
fonction minutes (
entrÈe d <DurÈe>
)
retourne <Entier>
dÈbut
retourner (d.m);
fin

-- observateur du type DurÈe. Retourne le nombre de secondes
fonction secondes (
entrÈe d <DurÈe>
)
retourne <Entier>
dÈbut
retourner (d.s);
fin

-- Retourne VRAI si la durÈe d1 est infÈrieure ‡ la durÈe d2
fonction inf (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>
dÈbut
retourner (heures(d1) < heures(d2)) ou (heures(d1) = heures(d2) et minutes(d1) < minutes(d2)) ou (heures(d1) = heures(d2) et minutes(d1) = minutes(d2) et secondes(d1) < secondes(d2));
fin

-- Retourne VRAI si la durÈe d1 est Ègale ‡ la durÈe d2
fonction Ègal (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>
dÈbut
retourner (d1 = d2);
fin

-- GÈnÈrateur secondaire d'une durÈe d + 1 seconde
fonction plusUneSeconde (
entrÈe d <DurÈe>
)
retourne <DurÈe>
glossaire
nouvelleDurÈe <DurÈe>;
dÈbut
si secondes(d) < 59 alors
nouvelleDurÈe <- uneDurÈe (heures(d), minutes(d), secondes(d) + 1);
sinon
si minutes(d) < 59 alors
nouvelleDurÈe <- uneDurÈe (heures(d), minutes(d) + 1, 0);
sinon
nouvelleDurÈe <- uneDurÈe (heures(d) + 1, 0, 0);
fin si;
fin si;
retourner nouvelleDurÈe;
fin

2)3)

-- gÈnÈrateur du type DurÈe
-- nÈcessite h >= 0 et 0 <= m <= 59 et 0 <= s <=0 59
fonction uneDurÈe (
entrÈe h <Entier>,
entrÈe m <Entier>,
entrÈe s <Entier>
)
retourne <DurÈe>
glossaire
d <DurÈe>;
dÈbut
d.h <- h;
d.m <- m;
d.s <- s;
fin

-- observateur du type DurÈe. Retourne le nombre d'heures
fonction heures (
entrÈe d <DurÈe>
)
retourne <Entier>
dÈbut
retourner (d.h);
fin

-- observateur du type DurÈe. Retourne le nombre de minutes
fonction minutes (
entrÈe d <DurÈe>
)
retourne <Entier>
dÈbut
retourner (d.m);
fin

-- observateur du type DurÈe. Retourne le nombre de secondes
fonction secondes (
entrÈe d <DurÈe>
)
retourne <Entier>
dÈbut
retourner (d.s);
fin

-- Retourne VRAI si la durÈe d1 est infÈrieure ‡ la durÈe d2
fonction inf (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>
dÈbut
retourner (heures(d1) < heures(d2)) ou (heures(d1) = heures(d2) et minutes(d1) < minutes(d2)) ou (heures(d1) = heures(d2) et minutes(d1) = minutes(d2) et secondes(d1) < secondes(d2));
fin

-- Retourne VRAI si la durÈe d1 est Ègale ‡ la durÈe d2
fonction Ègal (
entrÈe d1 <DurÈe>,
entrÈe d2 <DurÈe>
)
retourne <BoolÈen>
dÈbut
retourner (d1 = d2);
fin

-- GÈnÈrateur secondaire d'une durÈe d + 1 seconde
fonction plusUneSeconde (
entrÈe d <DurÈe>
)
retourne <DurÈe>
glossaire
nouvelleDurÈe <DurÈe>;
dÈbut
si secondes(d) < 59 alors
nouvelleDurÈe <- uneDurÈe (heures(d), minutes(d), secondes(d) + 1);
sinon
si minutes(d) < 59 alors
nouvelleDurÈe <- uneDurÈe (heures(d), minutes(d) + 1, 0);
sinon
nouvelleDurÈe <- uneDurÈe (heures(d) + 1, 0, 0);
fin si;
fin si;
retourner nouvelleDurÈe;
fin

-- Pour h, h1, h2, m, m1, m2, s, s1, s2 de type Entier :
-- heures (uneDurÈe (h, m, s)) = h
-- minutes (uneDurÈe (h, m, s)) = m
-- secondes (uneDurÈe (h, m, s)) = s
-- inf (uneDurÈe (h1, m1, s1), uneDurÈe (h2, m2, s2)) =
-- (h1 < h2) ou (h1=h2 et m1 < m2) ou (h1=h2 et m1=m2 et s1 < s2)
-- Ègal (uneDurÈe (h1, m1, s1), uneDurÈe (h2, m2, s2)) =
-- h1 = h2 et m1 = m2 et s1 = s2

2)4)

-- gÈnÈrateur du type DurÈe
-- nÈcessite h >= 0 et 0 <= m <= 59 et 0 <= s <=0 59
fonction uneDurÈe (
entrÈe h <Entier>,
entrÈe m <Entier>,
entrÈe s <Entier>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre d'heures
fonction heures (
entrÈe d <Entier>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre de minutes
fonction minutes (
entrÈe d <Entier>
)
retourne <Entier>;

-- observateur du type DurÈe. Retourne le nombre de secondes
fonction secondes (
entrÈe d <Entier>
)
retourne <Entier>;

-- Retourne VRAI si la durÈe d1 est infÈrieure ‡ la durÈe d2
fonction inf (
entrÈe d1 <Entier>,
entrÈe d2 <Entier>
)
retourne <BoolÈen>;

-- Retourne VRAI si la durÈe d1 est Ègale ‡ la durÈe d2
fonction Ègal (
entrÈe d1 <Entier>,
entrÈe d2 <Entier>
)
retourne <BoolÈen>;

-- GÈnÈrateur secondaire d'une durÈe d + 1 seconde
fonction plusUneSeconde (
entrÈe d <Entier>
)
retourne <Entier>;

2)5)

-- gÈnÈrateur du type DurÈe
-- nÈcessite h >= 0 et 0 <= m <= 59 et 0 <= s <=0 59
fonction uneDurÈe (
entrÈe h <Entier>,
entrÈe m <Entier>,
entrÈe s <Entier>
)
retourne <Entier>
dÈbut
retourner (h * 3600 + m * 60 + s);
fin

-- observateur du type DurÈe. Retourne le nombre d'heures
fonction heures (
entrÈe d <Entier>
)
retourne <Entier>
dÈbut
retourner (d div 3600);
fin

-- observateur du type DurÈe. Retourne le nombre de minutes
fonction minutes (
entrÈe d <Entier>
)
retourne <Entier>
dÈbut
retourner (d div 60 mod 60);
fin

-- observateur du type DurÈe. Retourne le nombre de secondes
fonction secondes (
entrÈe d <Entier>
)
retourne <Entier>
dÈbut
retourner (d mod 60);
fin

-- Retourne VRAI si la durÈe d1 est infÈrieure ‡ la durÈe d2
fonction inf (
entrÈe d1 <Entier>,
entrÈe d2 <Entier>
)
retourne <BoolÈen>
dÈbut
retourner (d1 < d2);
fin

-- Retourne VRAI si la durÈe d1 est Ègale ‡ la durÈe d2
fonction Ègal (
entrÈe d1 <Entier>,
entrÈe d2 <Entier>
)
retourne <BoolÈen>
dÈbut
retourner (d1 = d2);
fin

-- GÈnÈrateur secondaire d'une durÈe d + 1 seconde
fonction plusUneSeconde (
entrÈe d <Entier>
)
retourne <Entier>
dÈbut
retourner (d + 1);
fin

-- Pour h, h1, h2, m, m1, m2, s, s1, s2 de type Entier :
-- heures (uneDurÈe (h, m, s)) = h
-- minutes (uneDurÈe (h, m, s)) = m
-- secondes (uneDurÈe (h, m, s)) = s
-- inf (uneDurÈe (h1, m1, s1), uneDurÈe (h2, m2, s2)) =
-- (h1 < h2) ou (h1=h2 et m1 < m2) ou (h1=h2 et m1=m2 et s1 < s2)
-- Ègal (uneDurÈe (h1, m1, s1), uneDurÈe (h2, m2, s2)) =
-- h1 = h2 et m1 = m2 et s1 = s2