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 :
23x+ 5x27x4= (((7×x+ 0) ×x+ 5) ×x3) ×x+ 2.
Cette ´egalit´e se g´en´eralise pour des polynˆomes de degr´e quelconque :
a0+a1x+a2x2+. . . +an1xn1+anxn= ((((an×x+an1)×x+an2)×. . .)×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.
´
Etude de la structure d’un programme :
ID´eclaration d’un type.
ID´eclaration des variables du programme principal.
ID´eclaration d’une proc´edure : nom de la proc´edure, param`etres formels (ceux qui figurent
dans l’en-tˆete de la d´eclaration de la proc´edure) et effectifs (ceux qui figurent dans l’appel
de la proc´edure), passage des param`etres par valeur ou par variable, variables locales.
IProgramme principal.
(c) ´
Ecrire une proc´edure affiche permettant d’afficher les coefficients d’un polynˆome de degr´e
inf´erieur ou ´egal `a 4.
(d) Compl´eter le programme pr´ec´edent pour qu’il permette le calcul de P(x) (x´etant une variable
de type integer) `a l’aide de l’algorithme de Horner : on d´eclarera une fonction eval p. Tester
le programme sur diff´erents exemples.
4. La rapidit´e d’un algorithme de calcul peut se mesurer au nombre d’op´erations qu’il n´ecessite : plus
il y a d’op´erations `a effectuer et plus l’algorithme est coˆuteux en temps.
(a) Pour un polynˆome Pde degr´e n, combien d’op´erations (additions et multiplications) n´ecessite
le calcul de P(x) avec l’algorithme de Horner ?
(b) D´eterminer le nombre d’op´erations effectu´ees lors du calcul de P(x) au moyen d’un algorithme
utilisant la d´ecomposition suivante :
P(x) = a0+a1×x+a2×x×x+. . . +an×x×. . . ×x
| {z }
nfacteurs
.
D´eterminer un ´equivalent simple au voisinage de de ce nombre d’op´erations et le comparer
avec le r´esultat obtenu `a la question pr´ec´edente.
1 / 2 100%