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
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.