Académique Documents
Professionnel Documents
Culture Documents
Exercice 1
Faire un programme qui demande n et m et qui calcul
in
i=1
puissances, le rsultats peuvent tre grand). Pour eviter de devoir faire une double boucle, on dfinira une fonction puissance, il suffira donc de calculer habituelle dont on code une somme.
puissance i , n
i=1
, de la faon
Correction: PROGRAMsomme_puissance; VARi,n,m:integer; s:real; FUNCTIONpuissance(a,b:integer):real; VARi:integer; p:real; BEGIN p:=1; Fori:=1tobdop:=p*a; puissance:=p; END BEGIN readln(n,m); s:=0; Fori:=1tomdos:=s+puissance(i,n); writeln(s); readln; END. Pour calculer la fonction puissance, il faut voir a b comme le produit aaaa (b fois). Un tel produit se calcul facilement (en gros comme une somme, sauf la valeur initial qui doit tre 1 et non pas 0, car c'est 1 l'lment neutre de la multiplication). Note : on dfinit deux fois la variable i dans ce code. n'est pas un problme ! Comme expliqu en introduction, le code d'une fonction, a ses propres variables lui. Si elle utilise un variable qui n'est pas dans ses variables locales ( elle ), elle utilisera les variables globales, mais si elle le choix elle utilisera toujours les siennes. Ainsi, il n'y pas de collisions entre les deux boucles.
suivante : a et b sont de mme signe ssi et seulement si le produit ab est positif : IFa*b>0thenelse;
C'est bon ? Allez on y va : PROGRAMdichotomie_mon_amour; VARg,d,m,epsilon:REAL; FUNCTIONf(x:real):real; BEGIN f:=10*sin(x)x*x; END; BEGIN Writeln('gauche,droite,epsilon?'); readln(g,d,epsilon); WHILEdg<2*epsilonDOBEGIN m:=(g+d)/2; IF(f(m)>0)=(f(g)>0) theng:=m elsed:=m; END; m:=(g+d)/2; writeln(m); readln; END. Vous pouvez maintenant servir de se programme pour trouver des solutions approches de toutes vos quations une inconnue en les mettant sous la forme f(x)=0 (si f est bien continue...). Il faut tout de mme deviner un intervalle vrifiant la proprit du TVI. En prenant f(x)=sin(x), g=3, d=4, et =0.000001 on obtient une valeur de correcte pour les 6 premires dcimales. De mme en prenant f(x)=ln(x)-1, g=1, d=3, et =0.0001 on obtient une valeur de e correcte pour les 4 premires dcimales. (Attention ne pas prendre epsilon trop petit : si on passe en dessous de la prcision des calculs sur les rels de l'ordinateur, il se peut que le programme bug ). Nous nous resservirons de cet algorithme durant le prochain TD. C'est une des bases fondamentales pour tudier les fonctions l'aide d''un ordinateur : comprendre et savoir refaire !