Université Joseph Fourier UFR IMA LICENCE SCIENCES & TECHNOLOGIES 1 re ANNÉE Département Licence Sciences et Technologie UE INF121 ALGORITHMIQUE ET PROGRAMMATION FONCTIONNELLE Devoir maison - Dénition du type Durée et des opérations associées défition (type abstrait de données Lorsqu'on dénit un type de donnée (par ex. le type Durée il est téressant de dénir les opérations associées à ce type (les constructeurs, les sélecteurs, les opérations de calculs, etc. On dit qu'on a alors déni un type abstrait de données (ou tad. L'térêt est qu'un programmeur pourra réutiliser le tad et les opérations sans avoir beso de connaître comment sont représentées les données ni comment sont réalisées les opérations. Remarque Les list, les strg de Ocaml sont des types abstraits de données. Vous les utilisez et vous utilisez les opérations associées sans qu'il soit nécessaire de savoir comment les list ou les strg sont représentées dans la mache. Notre objectif est de dénir le tad Durée, c'est-à-dire le type et les opérations associées. On considère ici une durée exprimées en jour, heure, mute, seconde. On choisit de la représenter par un vecteur à 4 coordonnées (j, h, m, s (on dit aussi quadrup ou 4-up où j représente un nombre de jours, h un nombre d'heures férieur à une journée, m un nombre de mutes férieur à une heure et s un nombre de secondes férieur à une mute. 1 Dénition mathématique du type Durée et des fonctions associées DÉFINITION MATHÉMATIQUE D'ENSEMBLES déf Jour = N déf Heure = {0,..., 59} déf Mute = {0,..., 59} déf Seconde = {0,..., 59} déf Durée = Jour Heure Mute Seconde 1
2 Spécications des fonctions sur les durées constructeurs Prol sec-en-duree : N Durée Sémantique : construit une donnée de type Durée à partir d'un nombre de secondes Prol vec-en-duree : N N N N Durée Sémantique : construit une donnée de type Durée à partir d'un 4-ups représentant un nombre de jours, d'heures, de mutes et de secondes (sans limite de taille sélecteurs Prol jour : Durée N Sémantique : sélectionne la partie jour d'une durée Prol heure : Durée N Sémantique : sélectionne la partie heure d'une durée Prol mute : Durée N Sémantique : sélectionne la partie mute d'une durée Prol seconde : Durée N Sémantique : sélectionne la partie seconde d'une durée conversion Prol duree-en-sec : Durée N Sémantique : convertit une durée en un nombre de secondes opérations Prol som-duree : Durée Durée Durée Sémantique : eectue la somme de deux durées prédicats Prol eg-duree : Durée Durée Bool Sémantique : teste l'égalité de deux durées Prol f-duree : Durée Durée Bool Sémantique : teste la relation férieur strict sur les durées 2
3 2 Réalisation formatique du type Durée et des fonctions associées DÉFINITION INFORMATIQUE DE TYPES tpe nat =............... type jour = nat type de0a59 =............... type heure = de0a59 type mute = de0a59 type seconde = de0a59 type duree =.................. RÉALISATION INFORMATIQUE sec-en-duree (constructeur (sec_en_duree :... -> duree = function s0 -> (j, sr1 = div (s0, 86400 (h, sr2 = div (..., 3600 (m, s = div (sr2,...... RÉALISATION INFORMATIQUE vec-en-duree (constructeur Algorithme : On calcule le nombre de secondes que représente le vecteur (j, h, m, s puis on utilise la fonction sec-en-duree pour construire une donnée de type Durée. Pour faire le calcul du nombre totale de seconde dans (j, h, m, s on dénit une fonction auxilliaire nb-total-sec. Complétez la spécication de nb-total-sec ci-après. (nb_total_sec : nat * nat * nat * nat -> nat = function (........... -> (((j *... + h *... + m *... + s (vec_en_duree :........................ = function (j, h, m, s ->... (nb_total_sec (j, h, m, s nb-total-sec Prol nb-total-sec :....................................................................... Sémantique : nb-total-sec (j, h, m, s est le nombre totale de seconde que représentent j jours + h heures + m mutes + s secondes Exemples : 1. nb-total-sec (1, 0, 0, 0 =................... 3
4 2. nb-total-sec (0, 1, 0, 0 =............... 3. nb-total-sec (.....,....., 1,......... = 90 4. nb-total-sec (.....,....., 0,............ = 120 RÉALISATION INFORMATIQUE les sélecteurs (jour :......... = function (j,h,m,s ->.. (heure : duree -> nat =........... (... : duree -> nat = function (j,h,m,s ->................ = function (j,h,m,s -> s RÉALISATION INFORMATIQUE som-duree (opération Algorithme 1 : On réutilise les fonction duree-en-sec et sec-en-duree. 1 (som_duree : duree * duree -> duree = function (d1, d2 ->... ( (... d1 + (duree_en_sec d2 Algorithme 2 : On fait l'addition des vecteurs composante par composante en tenant compte des retenues. 2 (som_duree :........ -> duree = function ( (j1, h1, m1, s1, (j2, h2, m2, s2 -> (m,sec = div (s1+s2,60 (h,... = div (...,60 (..,heure = div (...,24 (j1+j2+j,..., m,... RÉALISATION INFORMATIQUE eg-duree (prédicat 1 : en utilisant la fonction duree-en-sec (eg_duree : duree * duree -> bool = (duree_en_sec d1 = (...... 4
5 2 : en décomposant les durées en vecteurs (j, h, m, s (eg_duree :........ -> bool = (j1, h1, m1, s1 =... and (............ = d2 j1=j2............... 3 : en comparant les vecteurs composante par composante (eg_duree : duree * duree -> bool = function ( (j1, h1, m1, s1, (............ ->............ 4 : en utilisant les sélecteurs (eg_duree : duree * duree ->... = (jour d1=(jour d2.............. (mute...=(... d2 (...... =(seconde... RÉALISATION INFORMATIQUE f-duree (prédicat 1 : en utilisant la fonction duree-en-sec (f_duree :........ -> bool = (... d1.. (... d2 2 : en utilisant des expressions conditionnelles imbriquées (f_duree : duree * duree -> bool = function ( (j1, h1, m1, s1, (j2, h2, m2, s2 -> (if (j1<>j2 then (j1<j2 else (if (... then (... else (if (m1<>m2 then (... else (s1<s2 5