ECE 1 2011 - 2012
TP d’informatique no12.
Algorithme de Horner et calcul de complexit´e
Un polynˆome Pde degr´e nest caract´eris´e par la donn´ee de ses n+1 coefficients a0, a1, . . . , an(on choisit
ici d’ordonner les polynˆomes suivant les puissances croissantes de x) :
P(x) = a0+a1x+a2x2+. . . +anxn.
1. V´erifier l’´egalit´e suivante :
2−3x+ 5x2−7x4= (((−7×x+ 0) ×x+ 5) ×x−3) ×x+ 2.
Cette ´egalit´e se g´en´eralise pour des polynˆomes de degr´e quelconque :
a0+a1x+a2x2+. . . +an−1xn−1+anxn= ((((an×x+an−1)×x+an−2)×. . .)×x+a1)×x+a0.
L’algorithme de Horner consiste `a utiliser l’´ecriture de droite (ci-dessus) du polynˆome Pafin de
calculer la valeur de P(x) pour tout r´eel x.
2. ´
Ecrire (en fran¸cais) cet algorithme de calcul de P(x), les r´eels a0, a1, . . . , anet x´etant suppos´es
connus.
3. On se propose dans cette question d’´ecrire un programme mettant en oeuvre l’algorithme de Horner.
Afin de simplifier les saisies et les affichages, ne seront utilis´es dans ce TP que des polynˆomes `a
coefficients entiers et de degr´e inf´erieur ou ´egal `a 4. C’est pourquoi la variable repr´esentant le
polynˆome Psera du type array[0..4] of integer. Les ´evaluations seront faites ´egalement en des
valeurs enti`eres.
(a) ´
Ecrire un programme (u:infoec1\tp12a.pas) permettant de saisir au clavier les coefficients
d’un polynˆome de degr´e inf´erieur ou ´egal `a 4. On pourra donner le nom polynome au type
array[0..4] of integer.
On peut ´eviter d’´ecrire plusieurs fois la mˆeme suite d’instructions en d´eclarant une proc´edure.
Une proc´edure est une suite d’instructions d´ecrivant une action simple ou complexe, `a laquelle
on donne un nom. Chaque fois que l’on aura besoin de faire cette action, il suffira d’´evoquer
ce nom au lieu de r´e´ecrire la suite d’instructions.
(b) Charger le fichier ( v:eece1\tp12b.pas) dont le texte est reproduit ci-dessous.
program Horner;
type polynome=array[0..4] of integer;
var a:polynome; x:integer;
procedure saisie(var a:polynome);
var i:integer;
begin
for i:=0 to 4 do
begin
write(’Entrer le coefficient de degr ’,i,’ : ’);
readln(a[i]);
end;
BEGIN
saisie(a);
END.