Algo-Prog en Ada TD2 2 MIC Romaric GUILLERM guillerm@laas.fr
TD2 - Paquetages On veut concevoir un paquetage qui regroupe le type Rationnel et les opérations algébriques associées (opposé, addition, différence, produit, rapport, inverse, …). On modélisera un Rationnel à l’aide d’une structure de données privée encapsulant : Un numérateur de type entier relatif Un dénominateur de type entier strictement positif Afin de définir correctement l’égalité entre deux rationnels, on leur appliquera systématiquement une simplification dès leur construction et après certaines opérations algébriques Pour R= a b la simplification est : R= as bs avec 𝑎𝑠= 𝑎 𝑝 et 𝑏𝑠=𝑏/𝑝 , où 𝑝=𝑃𝐺𝐶𝐷( 𝑎 ,𝑏) On représente un rationnel nul par : R= 0 1 On inclura également les sous-programmes pour : La construction L’accès au numérateur L’accès au dénominateur L’image d’un rationnel sous forme de chaîne de caractères pour faciliter son affichage (fonction To_String(R : in Un_Rationnel) return String)
TD2 Question 1 : Ecrire la spécification de ce paquetage. fichier Rationnels.ads !
TD2 Déclaration du type privé Rationnel Question 1 : Ecrire la spécification de ce paquetage. fichier Rationnels.ads ! Déclaration d’une exception pour un dénominateur nul Spécification des sous-programmes publiques Définition du type Rationnel Spécification des sous-programmes privées
TD2 Question 2 : Ecrire un programme client intégrant un jeu de tests pour ce paquetage.
TD2 Outils.ads Sous-programmes : Simplification Constructeur To_String Question 3 : Ecrire le corps du paquetage. Fichier Rationnels.adb ! Outils.ads Sous-programmes : Simplification Constructeur To_String Sélecteurs Inverse Addition Différence Opposé Produit Rapport Outils.adb
TD2 Fonction Résultat S=N/D noté (N,D), avec R1=a/b, R2 = c/d Question 3 : Ecrire le corps du paquetage. Fichier Rationnels.adb ! Fonction Résultat S=N/D noté (N,D), avec R1=a/b, R2 = c/d Simplification(R1) Si a ≠ 0 alors S=(a/p, b/p), avec p=pgcd(|a|,b) sinon S=(0, 1) Constructeur(n, d) Si d=0 alors « erreur » sinon si n=0 alors S=(0, 1) sinon si d<0 alors S=Simplification( (-n, -d) ) sinon S=Simplification( (n, d) ) Inverse(R1) Si a=0 alors « erreur » Sinon si a>0 alors S=(b, a) sinon S=(-b, -a) Addition(R1, R2) "+" S=Simplification( (a*d + c*b, b*d) ) Différence(R1, R2) "-" S=Simplification( (a*d - c*b, b*d) ) Opposé(R1) "-" S=(-a, b) Produit(R1, R2) "*" S=Simplification( (a*c, b*d) ) Rapport(R1, R2) "/" S=Simplification( R1 * Inverse(R2) )
TD2 Question 3 : Ecrire le corps du paquetage. Fichier Rationnels.adb !
TD2 Question 3 : Ecrire le corps du paquetage. Fichier Rationnels.adb !
TD2 Question 3 : Ecrire le corps du paquetage. Fichier Rationnels.adb !
TD2 Question 4 : Tracer le graphe des dépendances entre le programme client, les spécifications et les corps des différents paquetages utilisés. Faire un schéma avec des liens A B signifiant que B « dépend de » A Outils.ads Rationnel.ads Ada.Text_io.ads Outils.adb Rationnel.adb Client_Rationnel.adb