• Aucun résultat trouvé

Pierre-Louis CAYREL 2008-2009

N/A
N/A
Protected

Academic year: 2021

Partager "Pierre-Louis CAYREL 2008-2009"

Copied!
4
0
0

Texte intégral

(1)

Pierre-Louis CAYREL 2008-2009

Pr´ epa HEC 2 disponible sur www.cayrel.net

Lyc´ ee Lavoisier Feuille n

5

Fonctions et r´ ecursivit´ e

Exercice 1 Ecrire une fonction ´ factorielle qui ` a tout entier n associe sa factorielle et deux fonctions puissance et bin^ ome qui ` a tout couple d’entiers (n, p) inf´ erieurs ou ´ egaux ` a 20 associent respectivement n

p

et

np

.

Exercice 2 Ecrire une fonction ´ degre qui ` a tout polynˆ ome associe son degr´ e. On convient que le degr´ e du polynˆ ome nul est -1.

Exercice 3 D´ eclarer une fonction eval_poly prenant comme param` etres un polynˆ ome p et un r´ eel x, qui renvoie la valeur de p(x). La m´ ethode de H¨ orner sera appr´ eci´ ee.

Exercice 4 Soit x un r´ eel, et pour tout entier n non nul,

S

n

(x) =

n

X

k=1

x

k

k et T

n

(x) =

n

X

k=1

x

k

k! .

Ecrire deux fonctions nomm´ ´ ees eval_S et eval_T, utilisant l’algorithme de H¨ orner, qui ` a tout couple (n, x) associent les valeurs respectives de S

n

(x) et T

n

(x).

Exercice 5 Rappelons que le pgcd de deux entiers a et b positifs d´ esigne leur plus petit diviseur commun. Le calcul de celui-ci peut se faire en suivnt l’algorithme d’Euclide. Cet algorithme prend pour base le th´ eor` eme d’Euclide.

Si a > b et si on effectue la division euclidienne de a par b : a = qb + r avec 0 6 r 6 b

alors le pgcd de a et b est ´ egal au pgcd de b et r.

Pour calculer pgcd(a, b) il suffit d’it´ erer cette m´ ethode : on pose r

0

= a, r

1

= b, puis on d´ efinit une suite (r

n

) par ”r

n+2

est le reste de la division de r

n

par r

n+1

”.

Selon le th´ eor` eme d’Euclide, pour tout entier n, le pgcd de a et b est ´ egal au pgcd de r

n

et r

n+1

. De plus, on obtient un reste nul en un nombre fini d’´ etapes. Le dernier reste non nul est alors le pgcd de a et b.

D´ eduire de ce qui proc` ede un algorithme r´ ecursif de calcul du pgcd de deux entiers positifs.

Exercice 6 (Fonction r´ ecursive d’Ackermann) Soit f la fonction de N × N dans N d´ efinie par :

f (n, m) =

m + 1 si n = 0

f (n − 1, 1) si m = 0 et n > 1 f (n − 1, f(n, m − 1)) si m > 1 et n > 1 1. Calculer ` a la main f(1, 0), f(2, 0) et f (3, 0).

2. ´ Ecrire une fonction ack qui calcule les valeurs de f.

1

(2)

Pierre-Louis CAYREL 2008-2009

Pr´ epa HEC 2 disponible sur www.cayrel.net

Lyc´ ee Lavoisier Feuille n

5

Fonctions et r´ ecursivit´ e

Correction 1

FUNCTION factorielle (n : integer) : real;

VAR

k : integer;

fact : real;

BEGIN

fact := 1;

FOR k := 1 TO n DO fact := k*fact;

factorielle := fact;

END;

et

FUNCTION puissance (n,p : integer) : real;

VAR

k : integer;

puiss : real;

BEGIN

puiss := 1;

FOR k := 1 TO n DO puis := n*puiss;

puisance := puiss;

END;

et

FUNCTION bin^ ome (n,p : integer) : integer;

VAR

C : ARRAy[0..20] OF integer;

k,m : integer;

BEGIN

C[0] := 1;

FOR k := 1 TO n DO C[k] := 0;

FOR m := 1 TO n DO

FOR k := m DOWNTO 1 DO C[k] := C[k] + C[k-1];

bin^ ome := C[p];

END;

Correction 2 On d´ efinit dans cette page un type polynome par : TYPE polynome = ARRAY[0..10] OF real;

1

(3)

permettant de placer dans un tableau tous les coefficients a

0

, a

1

, . . . , a

10

d’un polynˆ ome de degr´ e inf´ erieur ou ´ egal ` a 10. Le coefficient a

i

´ etant stock´ e dans la variable p[i].

FUNCTION degre (p : polynome) : integer;

VAR

i : integer;

BEGIN

i := 10;

WHILE (i > 0) AND (p[i] = 0) DO Begin

i := i-1;

End;

IF p[i] = 0 THEN degre := -1 ELSE degre := i;

END;

Correction 3

FUNCTION eval_poly (p : polynome; x : real) : real;

VAR

i : integer;

S,puiss : real;

BEGIN

puiss := 1;

S := p[0];

FOR i := 1 TO 10 DO Begin

puiss := puiss * x;

S := S + p[i] * puiss;

End;

eval_poly := S;

END;

ou ` a l’aide de l’algorithme de H¨ orner :

FUNCTION eval_poly (p : polynome; x : real) : real;

VAR

i : integer;

u : real;

BEGIN

u := p[10];

FOR i := 9 DOWNTO 0 DO u := u*x+p[i];

eval_poly := u;

END;

Correction 4

FUNCTION eval_S (n : integer; x : real) : real;

VAR

i : integer;

u : real;

2

(4)

BEGIN

u := 1/n;

FOR i := n-1 DOWNTO 1 DO u := u * x + 1/i;

eval_S := u * x;

END;

et

FUNCTION eval_T (n : integer; x : real) : real;

VAR

i : integer;

u,fact : real;

BEGIN

fact := factorielle(n);

u := 1/fact;

FOR i := n-1 DOWNTO 1 DO Begin

fact := fact/(i+1);

u := u * x + 1/fact;

End;

eval_T := u * x;

END;

Correction 5

FUNTION pgcd (a,b : integer) : integer;

VAR

aux : integer;

BEGIN

IF a < b THEN Begin

aux := a;

a := b;

b := aux;

End;

IF b = 0 THEN pgcd := a

ELSE pgcd := pgcd(b,a MOD b);

END;

Correction 6

1. f(1, 0) = 1 + 1 = 2; f(2, 0) = 2 + 13; f(3, 0) = f (0, 4) = 4 + 1 = 5 2. FUNCTION ack (n,m : integer) : integer;

BEGIN

IF n = 0 THEN ack := m + 1 ELSE

Begin

IF m = 0 THEN ack := ack := ack(n-1,1) ELSE ack := ack(n-1,ack(n,m-1));

End;

END;

3

Références

Documents relatifs

BCPST Mod´ elisation de variables al´ eatoires discr` etes avec Python, Page 3 sur 3 2013-2014 joueur p et qui renvoie le vainqueur 0 pour le casino et 1 pour le joueur et un nombre

Corrig´ e : On a vu en cours qu’un sch´ ema ` a un pas est consistant si et seulement si Φ(t, y, 0) = f (t, y), ∀y, ce qui est le cas ici, de plus on vient de d´ emontrer

On mesure une période T d’oscillation (durée d’un aller retour) , pour cela, on écarte le pendule de sa position initiale, on le lâche, il se met à osciller, on déclenche

D’une part, on peut remarquer qu’il s’agit d’un résultat du cours, ce qui est accepté à condition de citer précisément ce résultat...

Montrer qu’un polynˆ ome A dans K[X ] n’a pas de racine multiple si et seulement si A et A 0 sont premiers entre eux.. Exercice 16 En utilisant l’exercice 15 r´ esoudre les

Ecrire un programme C qui affiche un triangle isocele form d’toiles de N lignes (N fourni par l’utilisateur).. Chaque ligne a un nombre

Par ailleurs comme 5 est premier quitte ` a prendre une puissance du 5-cycle trouv´e, on peut supposer le 5-cycle et la transposition respectivement ´egale ` a (12)

[r]