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