Devoir surveillé N°:1 : MP :(2 heures)
Exercice 1 : (10 points)
On se propose
d’écrire un programme en langage c qui permet de lire au clavier
un nombre entier
positif en base décimale ( base 10) et de l’afficher
en base
hexadécimale (base 16) sur 4
octets. Pour ce faire :
1-1 (4 points)
Ecrire une fonction récursive ou non récursive d’entête :
unsigned long int puiss16(unsigned int i) qui permet de retourner
16i (16 puissance i)
1-2 (3 points)
Ecrire une fonction d’entête : int coeff16(unsigned long int m , int i)
qui retourne le ième coefficient du nombre m en base 16
Exemples :
- L’appel de la
fonction coeff16(420 , 0) retourne 4
- L’appel de la
fonction coeff16(420 , 1) retourne 10
- L’appel de la
fonction coeff16(420 , 2) retourne 1
- L’appel de la fonction
coeff16(420 , 3) retourne 0
1-3 (3 points)
Ecrire la fonction main qui permet de :
- Lire et
contrôler un nombre entier N positif en base décimale (0<=N
<168).
N doit être
déclaré comme suit : unsigned long int N ;
- Afficher la
valeur de N en base hexadécimale en appelant la fonction coeff16 et en
affichant les
caractères a,b,c,d,e et f au lieu de (10,11,12,13,14,15)
Exemples :
- La
décomposition de n= 420 en hexadécimale est 000001a4
- La décomposition de n= 4294967295 (n=168 -1) en
hexadécimale est ffffffff
Exercice2(4 points)
On
appelle palindrome une suite de caractères qui se lit de la même façon dans les
deux sens
(exemple: ''laval'', ''ressasser
'',''engage le jeu que je le gagne '').
Ecrire une fonction palindrome
qui
teste si une chaîne est un palindrome.
Exercice 3 (6 points)
Ecrire les
procédures ou fonctions de calcul sur
les nombres Rationnels au moyen d’un type enregistrement (structure) :
Addition : (a/b)+(c/d)=(ad+bc)/bd
Soustraction : (a/b)-(c/d)=(ad-bc)/bd
Multiplication : : (a/b)*(c/d)=ac/bd