sujet

publicité
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.
Téléchargement