Travaux Pratiques 5 : Fonctions
Exercice 1 :
Compl´eter le programme suivant `a l’aide d’une fonction Turbo-Pascal, qui calcule les images de la fonction math´ematique
f(x)=exp(x)-1.
program ffi ;
var x:real;
begin
write(’Entrer un r´eel ’);readln(x);
writeln(’Son image par f est ’, f(x));
end.
Exercice 2 :
Ecrire une fonction qui donne le maximum de 3 nombres.
Exercice 3 :
Ecrire la fonction puissance qui renvoie xp, lorsque xest un r´eel quelconque et pest un entier positif.
Utiliser cette fonction pour ´ecrire un programme qui demande deux entiers net p, et qui affiche la valeur de
n
P
k=1
kp.
Exercice 4 : Calculs des coefficients binomiaux.
1. Reprendre le programme Turbo-pascal du cours, et d´eterminer, en fonction de net kle nombre d’op´erations
´el´ementaires ainsi que le nombre d’affectations effectu´ees pour le calcul de n
k.
2. En remarquant que pour tout net kentiers positifs, n
k=n
k×n1
k1×... ×nk+1
1, ´ecrire un nouveau programme
Turbo-pascal calculant n
k`a l’aide d’une seule boucle FOR. Quelle est la complexit´e de ce nouvel algorithme ?
Exercice 5 : Edhec 2012
On consid`ere la suite d´efinie par u0= 0 = et nN,un+1 =u2
n+1
2.
Ecrire une fonction Pascal d’en-tˆete function u(n:integer):real; qui renvoie la valeur de un.
Exercice 6 : Edhec 97
On consid`ere la d´eclaration de fonction suivante, r´edig´ee en TurboPascal :
function f(p,q:integer):real;
var j:integer; z:real;
begin
if (p<=0) or (q<0) then write(’valeurs incorrectes’)
else
begin
z:=1;
for j:=1 to (q-1) do z:=z*(1-j/p)
f:=z;
end;
end;
Montrer que si pest un entier naturel non nul et si qest un entier naturel alors f(p, q) = Aq
p
pq
Exercice 7 : Edhec 2006
Compl´eter la d´eclaration de fonction suivante pour qu’elle renvoie la valeur de
n1
P
k=0
ak
k!ea`a l’appel de sigma (a, n).
function sigma(a : real ; n : integer) : real ;
var k : integer ; p : real ;
Begin
p:=1;s:=1;
For k : =1 to n -1 do begin p : = p*a/ k ; s : =....... end ;
s: =............. ;
sigma : = s;
end ;
Exercice 8 : Edhec 96
Partie I : Etude de la fonction fefinie par f(x) = xln x.
Partie II : On consid`ere l’algorithme suivant :
Program iter ;
Var n, k : integer ; a, u, p : real ;
Function f(x :real) : real ;
Begin
If x >0 then f := x - ln(x) ;
End ;
Begin
Readln(n, a) ; u := a ; p := a ;
For k := 1 to n do begin u := f(u);
p := p*u ;
end ;
Writeln(u, p) ;
End.
1. Dans le cas particulier o`u n= 2 et a= 3, donner les expressions des contenus des variables uet p`a la fin du
programme. Dor´enavant, dans le cas g´en´eral, on note unet pnles contenus respectifs des variables uet p`a la fin
de l’algorithme, lorsque leur calcul est possible.
2. Donner la relation liant un+1 et un, ainsi que l’expression math´ematique de pnen fonction des (uk).
3. Donner en fonction de nle nombre d’appels de la fonction fau cours de cet algorithme, ainsi que le nombre de
soustractions, de multiplications et d’affectations n´ecessaires.
4. Etude math´ematique de la suite (un)nNen fonction de a. (voir le sujet complet).
Partie III :
1. En consid´erant ln(pn), exprimer pnen fonction seulement de aet un+1.
2. Ecrire un nouvel algorithme en Turbo Pascal, ne contenant aucune multiplication et permettant le calcul de pn.
Partie IV : Etude d’une suite d’int´egrales.
Exercice 9 : M´ethode de dichotomie (du grec ancien ”couper en deux” )
program dichotomie;
var eps, a, b, c : REAL;
function f (x:REAL) : REAL;
begin
f:=exp(x)-2;
end;
begin
repeat
writeln(’Entrer la valeur de epsilon > 0: incertitude maximale recherch´ee’); READLN(eps);
until eps>0;
repeat
writeln(’Entrer les valeur de a et b’); readln(a,b);
until (f(a)*f(b) <= 0);
repeat
c:=(a+b)/2;
if f(b)*f(c)<=0 then a:=c else b:=c;
until abs(b-a)<=2*eps;
c:=(a+b)/2;
writeln(’Une valeur approch´ee de la solution `a ’,eps, ’pr`es est ’, c);
end.
1. Repr´esenter graphiquement la fonction fd´efinie en sous-programme.
2. Comment est choisi epsilon par l’utilisateur ? et aet b?
A quoi servent les deux premi`eres boucles repeat ... until ?
3. Ex´ecuter `a la main le programme pour les valeurs initiales a=2, b= 2 et epsilon = 1/2 : commencer par
v´erifier que a,bet epsilon sont des donn´ees acceptables puis ex´ecuter le reste du programme ´etape par ´etape.
4. Utiliser la repr´esentation graphique de fpour visualiser toutes les valeurs successives de a,b, et c.
Que repr´esentent aet bau cours du programme ? et c?
5. Si a=2, b= 2 mais epsilon = 1/4 ; que devient 3. ?
6. Quelle est la question `a laquelle r´epond ce programme ? A quoi sert epsilon ? et la derni`ere instruction c :=(a+b)/2 ?
CORRECTION TP 5
Exercice 1 :
function f(x:real):real;
begin
f:=exp(x)-1;
end;
Question : peut-on remplacer la lettre x dans la fonction par une autre lettre genre t ? Et dans le corps du programme ?
Dans le corps du programme : non, `a moins de d´eclarer t dans les variables ! ; par contre, dans la d´eclaration de la
fonction, peu importe la lettre TANT que c’est la mˆeme que celle du corps de la fonction (car elle est d´eclar´ee en mˆeme
temps que la fonction).
Exercice 2 :
function max3(a,b,c :REAL):REAL;
var tmp :real ; ou
begin if (a<b) then if (b<c) then tmp := c if (ab) and (ac) then tmp:=a;
else tmp := b else if (ba) and (bc) then tmp:=b;
else if (a<c) then tmp :=c else tmp:=c;
else tmp:=a;
max3 := tmp;
end;
Exercice 3 :
program sumpuiss;
var p,k,n : integer; s: real;
function puiss(x:real; p:integer):real;
var i:integer; t :real ;
begin
t:=1; Attention, il n’est pas possible d’´ecrire : puiss:=1;
for i:=1 to p do for i:=1 to p do
t:=t*x; puiss:=puiss*x;
puiss:=t; car puiss est le nom de la fonction, et n’est pas une variable !
end; Il faudra toujours que le nom de la fonction n’intervienne qu’une fois :
dans l’affectation qui donne `a la fonction sa valeur.
begin
write(’entrer un entier positif p’); readln(p);
write(’entrer un entier n’) ; readln(n);
if p < 0then write(’erreur sur le param`etre p’) else begin s:=0;
for k:=1 to n do s:=s+puiss(k,p);
write(’la valeur de la somme est ’,s);
end;end.
Exercice 4 :
1. Il y a 3 appels de la fonction factorielle(n) : pour chaque appel, il y a 2 + 2naffectations ainsi que nproduits.
Il y a donc 2 + 2n+ 2 + 2k+ 2 + 2(nk) = 6 + 4naffectations ainsi que n+k+nk= 2nproduits.
Pour l’affichage, encore 1 produit et une division. Soit au total une complexit´e en 6n+ 8 6n.
2. c:=1;
for i:= 1 to k do c:=c*(n-k+i)/i ;
write(c);
Nombre d’affectations : 1+2k. Nombre d’op´erations ´el´ementaires : 2k(kproduits et kdivisions).
Soit une complexit´e en 3k.
Exercice 5 :
function u(n:integer):real;
var x:real; k:integer;
begin
x:=0;
for k:=1 to n do
x:=(x*x+1)/2;
u:=x;
end;
Exercice 6 :
Faire le tableau de la boucle for du programme afin de comprendre l’´evolution de la variable z.
R´ealiser alors que Aq
p
pq=p×(p1) ×(p2) ×... ×(pq+ 1)
p×p×p×..... ×p(qfacteurs au num´erateur et au d´enominateur)
=p
p×p1
p×p2
p×... ×pk+ 1
p= 1 ×(1 1
p)×(1 2
p)×...(1 q1
p)
Exercice 7 :
Principe du programme : calculer la somme (syntaxe dans la boucle for : s:=s+ ...), puis au dernier moment faire le
produit ×ea.
Pour calculer la somme il faut faire : s:=s+ " ak
k!". Remarquer alors que ak
k!=a
k×ak1
(k1)! et donc que la variable p
´evolue justement afin de valoir le terme `a sommer (faire le tableau de la boucle for sur la variable p).
Syntaxe : .... s:=s+p; END;
s:=s*exp(-a); .....
Exercice 8 :
II 1. Au d´epart u=p= 3. Apr`es une ´etape (k= 1), u=f(3) = 3 ln(3) et p= 3 (3 ln(3)) ; puis apr`es la deuxi`eme
et derni`ere ´etape (k=n= 2), u=f(3 ln(3)) = 3 ln 3 ln(3 ln 3) et p= 3 (3 ln 3) (.....).
2. un+1 =f(un) = unln(un) et pn=u0×u1×u2×... ×un=
n
Q
k=0
uk.
3. Pour chaque ´etape de la boucle for : 3 affectations (une pour k, une pour uet une pour p) ; un appel de la fonction
f(pour u) et un produit (pour p). Pour chaque appel de la fonction f, une soustraction et une affectation. Donc
au total par ´etape : 6 op´erations ´el´ementaires + 1 appel de f
Avant la boucle for, 2 affectations. Comme il y a n´etapes dans la boucle for (donc nappels de la fonction f), on
a au total : 2 + n×6 op´erations ´el´ementaires +nappels de la fonction soit une complexit´e en 7n+ 2.
III 1. ln(pn) =
n
P
k=0
ln(uk) =
n
P
k=0
(ukuk+1) (en effet d’apr`es la relation sur la suite u,uk+1 =ukln(uk) donc
ukuk+1 = ln(uk)) = [somme t´el´escopique] u0un+1 =aun+1. D’o`u pn=eaun+1 .
2. readln(a,n); u:=a;
For k:=1 to n+1 do u:=f(u) ;
p:=exp(a-u); write(p);
Complexit´e en 5(n+ 1) + 2 5n.
Exercice 9 : Dichotomie
1. La fonction fest d´efinie sur Rpar f(x) = ex2. La courbe est celle de la fonction exponentielle, translat´ee
verticalement de 2.
2. L’utilisateur doit choisir eps strictement positif ; et aet btels que f(a)f(b)0 c’est-`a-dire tels que l’intervalle
de bornes aet bcontienne un z´ero de f. Les repeat until font office de garde-fou pour ces donn´ees.
3. eps = 1/2>0 et f(2) <0, f(2) >0 donc f(2)f(2) <0. Les donn´ees sont donc acceptables.
c= a= b= b-a=
-2 2 on entre dans la boucle repeat
0 0 2 2 >2*eps donc on poursuit
1 0 1 12*eps donc la boucle repeat s’arrˆete et le programme renvoie c= 1/2
4. L’intervalle de bornes aet bvoit son amplitude diminuer, par emboˆıtement de sous-intervalles [a;b], tels que le
sous- intervalle choisi contienne toujours un z´ero de f(i.e. encadre la solution).
crepr´esente `a chaque ´etape le milieu des intervalles [a;b] emboˆıt´es et devient aou b`a l’´etape suivante.
5. Si maintenant eps vaut 1/4 : tout le d´ebut de la question 3. reste identique. Par contre, il faut faire une ´etape de
plus, ce qui conduit `a c= 1/2 ; puis a= 1/2 et b= 1. L’affichage est alors c= 0.75.
6. L’ex´ecution du programme doit conduire `a une valeur approcee de la solution α= ln(2) '0,6931471 de
l’´equation f(x) = 0, pour n’importe quelles valeurs initiales aet b(avec a<b), par dichotomie.
eps donne la pr´ecision souhait´ee de l’approximation. Quant `a la derni`ere ligne c:= (a+b)/2 : sans cette ligne,
on aurait une valeur approch´ee `a 2*eps pr`es car la boucle repeat until s’arrˆete quand l’encadrement [a,b] de la
solution est de taille inf´erieure `a 2*eps. Donc on reprend le milieu une derni`ere fois pour avoir une pr´ecision de
2*eps/2=eps.
Remarque : La m´ethode de dichotomie est une m´ethode simple mais plutˆot efficace car dans notre exemple, il ne
faudrait que 11 manipulations pour obtenir une valeur approch´ee de la solution `a 0.001 pr`es.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !