Licence de Sciences Mention Mathématiques et Informatique 1ère année Mention Mathématiques et Économie 2ème année Examen Algorithmique et Programmation Fonctionnelle UFR de mathématique et d'informatique Jeudi 18 janvier 2007 Durée: 2h00 Aucun document autorisé. Expression d'un entier en binaire (environ 7 points) En base 10, chaque chiffre utilisé pour représenter un nombre appartient à l'ensemble {0,1,2,3,4,5,6,7,8,9}. On peut ainsi décomposer un nombre entier en une somme de facteurs de puissances de 10 : 103 = 1 * 100 + 0 * 10 + 3 * 1 = 1 * 10e2 + 0 * 10e1 + 3 * 10e0 = "103" Le principe est le même dans toutes les bases, en particulier en base 2 où on utilise désormais que des 0 et des 1 que l'on associe à des puissances de 2 pour décomposer un nombre entier : 103 = 1 * 64 + 1 * 32 + 0 * 16 + 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 1 * 2e6 + 1 * 2e5 + 0 * 2e4 + 0 * 2e3 + 1 * 2e2 + 1 * 2e1 + 1 * 2e0 = "1100111" On appelle cette écriture le binaire. On rappelle que l'opérateur de concaténation sur les chaînes de caractère est ^. 1. Donner une définition récursive en Caml de l'opération bin qui, à partir d'un entier naturel, donne une chaîne de caractère correspondant à l'écriture binaire de ce nombre. Vérifier que 103 en base 2 s'écrit bien "1100111" avec votre fonction. 2. Généraliser votre fonction et donner une définition récursive en Caml de l'opération base qui, à partir d'un entier naturel et la base b considérée, donne une chaîne de caractère correspondant à l'écriture de ce nombre dans la base b. Vérifier votre fonction avec 37 en base 4. 3. Modifier la fonction base pour que le résultat soit de type entier naturel au lieu de chaîne de caractère. Pour cette question, vous ne devez pas utiliser les fonctions de conversion de type de Caml comme par exemple int__of__string. Vérifier votre fonction en calculant 13 en base 2 et 37 en base 4. Licence de Sciences Mention Mathématiques et Informatique 1ère année Mention Mathématiques et Économie 2ème année Examen Algorithmique et Programmation Fonctionnelle UFR de mathématique et d'informatique Jeudi 18 janvier 2007 Durée: 2h00 Aucun document autorisé. Polynôme représenté par une liste (environ 13 points) Un terme est une expression de la forme aixi, où ai est un coefficient réel non nul et i un exposant entier naturel. Un polynôme est soit nul soit constitué de termes dont les exposants sont tous distincts. 1. Définir en Caml un type terme constitué d'un coefficient réel non nul et d'un exposant entier. Écrire en Caml le générateur creerterme et les sélecteurs coefficient et exposant. 2. Définir en Caml un type polynome représenté par une liste de termes triée par ordre décroissant des exposants. Les sélecteurs sont iszéro, testant si un polynôme est nul, degre et firstcoef donnant respectivement l'exposant et le coefficient du terme de plus grand exposant, coef, donnant le coefficient d'un terme connaissant son degré. Écrire ces 4 fonctions en Caml. 3. Écrire en Caml les opérateurs reductum, supprimant le terme ayant le plus grand exposant et supterme, supprimant un monôme connaissant son exposant. 4. Les générateurs des polynômes sont zéro, polynôme nul, monôme, création d'un polynôme à partir d'un terme, add, addition de deux polynômes. Écrire ces 3 fonctions en Caml. On suppose connus les opérateurs classiques sur les listes en Caml à savoir [] et ::. Écrire les fonctions sans pré-conditions mais en supposant que la liste des termes est triée par ordre décroissant des exposants et que les exposants sont tous distincts.