Vous êtes sur la page 1sur 2

L2 mention Sciences du Vivant Universit e Louis Pasteur

Programmation 3 2007/08

Partiel de contr ole continu


17/12/2007 Dur ee : 2 heures. Notes de cours, TD, TP autoris ees.

Exercice 1 (8 points)
1. D enir une fonction (it erative) nb chiffres qui renvoie le nombre de chires de la repr esentation d ecimale dun entier positif. 2. D enir une fonction (r ecursive) occurrence7 qui renvoie le nombre de fois o` u le chire 7 appara t dans la repr esentation d ecimale dun entier positif. 3. D enir une fonction (it erative) miroir qui renvoie le nombre miroir dun entier positif (exemple : le miroir de 25697 est 79652). 4. D enir une fonction palindrome qui indique si la repr esentation d ecimale dun entier positif est un palindrome (exemple : 25697 nest pas un palindrome, mais 25652 en est un). Pour chacune des questions, justier soigneusement le choix des prols de fonction (types des arguments et types retour).

Probl` eme 1 (10 points)


Complexes
1. D enir une structure complexe qui repr esente un nombre complexe. Cette structure contient deux ottants re et im repr esentant respectivement la partie r eelle et la partie imaginaire du nombre. 2. D enir une fonction de saisie permettant dinitialiser un complexe. Cette fonction demande la saisie des parties r eelle puis imaginaire, initialise un complexe avec ces valeurs avant de le retourner. Prototype : complexe saisie complexe() ; 3. D enir une fonction qui prend en param` etre un complexe, et qui ache ce complexe dans la console. Prototype : void print complexe(complexe p) ; 4. D enir une fonction qui prend en param` etres deux complexes, et qui retourne un complexe, somme des deux re cus en param` etres. Prototype : complexe add complexes(complexe c1, complexe c2) ; 5. D enir une fonction qui prend en param` etres deux complexes, et qui retourne un complexe, produit des deux re cus en param` etres. Prototype : complexe prod complexes(complexe c1, complexe c2) ; 1

Polyn omes complexes


Un polyn ome complexe est un polyn ome ayant des coecients dans lensemble des nombres complexes C. Un polyn ome complexe de degr e n peut etre d eni de la mani` ere suivante :
n

f (x) =
k=0

ak .xk = an .xn + an1 .xn1 + . . . + a1 .x1 + a0 .x0 ,

o` u ak C pour k = 0 ` a n, et an = 0. Un tel polyn ome peut etre mod elis e par un tableau de n + 1 complexes, le k -` eme complexe du tableau correspondant au coecient ak du polyn ome. 1. D enir une structure polynome qui repr esente un polyn ome complexe de degr e maximum 5. Cette structure contient un tableau de structures complexe, ainsi quun entier n indiquant le degr e du polyn ome. Dans toutes les fonctions suivantes, on utilisera au maximum les fonctions pr ec edemment d enies sur les complexes. 2. D enir une fonction de saisie permettant dinitialiser un polyn ome. Cette fonction commence par demander le degr e souhait e, puis demande la saisie des coecients complexes, et enn retourne le polynome ainsi initialis e. Prototype : polynome saisie polynome() ; 3. D enir une fonction qui prend en param` etre un polyn ome, et qui ache ce polyn ome dans la console. Prototype : void print polynome() ; 4. D enir une fonction qui prend en param` etres deux polyn omes, et qui retourne un polyn ome, somme des deux re cus en param` etres. Prototype : polynome add polynomes(polynome p1, polynome p2) ; 5. D enir une fonction qui prend en param` etres deux polyn omes, et qui retourne un polyn ome, produit des deux re cus en param` etre. Si le degr e du polyn ome r esultat d epasse le degr e maximum g er e ici (cest-` a-dire 5), la fonction ache un message et renvoie le premier des deux polyn omes re cus en param` etres. Prototype : polynome prod polynomes(polynome p1, polynome p2) ;

Exercice 2 (dicile - 4 points)


D emontrer la terminaison de la fonction r ecursive suivante.
unsigned int f(unsigned int i){ unsigned int j; if (i <= 2){ return (i == 2) ? 2 : 1; } for(j = f(i - 1); j > 1; j = f(j - 1)){ if ((i % j) == 0){ return f(i - 1); } } return i; }