ECE 1 2011 - 2012 TP d’informatique no 12. Algorithme de Horner et calcul de complexité Un polynôme P de degré n est caractérisé par la donnée de ses n + 1 coefficients a0 , a1 , . . . , an (on choisit ici d’ordonner les polynômes suivant les puissances croissantes de x) : P (x) = a0 + a1 x + a2 x2 + . . . + an xn . 1. Vérifier l’égalité suivante : 2 − 3x + 5x2 − 7x4 = (((−7 × x + 0) × x + 5) × x − 3) × x + 2. Cette égalité se généralise pour des polynômes de degré quelconque : a0 + a1 x + a2 x2 + . . . + an−1 xn−1 + an xn = ((((an × x + an−1 ) × x + an−2 ) × . . .) × x + a1 ) × x + a0 . L’algorithme de Horner consiste à utiliser l’écriture de droite (ci-dessus) du polynôme P afin de calculer la valeur de P (x) pour tout réel x. 2. Écrire (en français) cet algorithme de calcul de P (x), les réels a0 , a1 , . . . , an et x étant supposés connus. 3. On se propose dans cette question d’écrire un programme mettant en oeuvre l’algorithme de Horner. Afin de simplifier les saisies et les affichages, ne seront utilisés dans ce TP que des polynômes à coefficients entiers et de degré inférieur ou égal à 4. C’est pourquoi la variable représentant le polynôme P sera du type array[0..4] of integer. Les évaluations seront faites également en des valeurs entières. (a) Écrire un programme (u:infoec1\tp12a.pas) permettant de saisir au clavier les coefficients d’un polynôme de degré inférieur ou égal à 4. On pourra donner le nom polynome au type array[0..4] of integer. On peut éviter d’écrire plusieurs fois la même suite d’instructions en déclarant une procédure. Une procédure est une suite d’instructions décrivant une action simple ou complexe, à laquelle on donne un nom. Chaque fois que l’on aura besoin de faire cette action, il suffira d’évoquer ce nom au lieu de réécrire 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. Étude de la structure d’un programme : I Déclaration d’un type. I Déclaration des variables du programme principal. I Déclaration d’une procédure : nom de la procédure, paramètres formels (ceux qui figurent dans l’en-tête de la déclaration de la procédure) et effectifs (ceux qui figurent dans l’appel de la procédure), passage des paramètres par valeur ou par variable, variables locales. I Programme principal. (c) Écrire une procédure affiche permettant d’afficher les coefficients d’un polynôme de degré inférieur ou égal à 4. (d) Compléter le programme précédent pour qu’il permette le calcul de P (x) (x étant une variable de type integer) à l’aide de l’algorithme de Horner : on déclarera une fonction eval p. Tester le programme sur différents exemples. 4. La rapidité d’un algorithme de calcul peut se mesurer au nombre d’opérations qu’il nécessite : plus il y a d’opérations à effectuer et plus l’algorithme est coûteux en temps. (a) Pour un polynôme P de degré n, combien d’opérations (additions et multiplications) nécessite le calcul de P (x) avec l’algorithme de Horner ? (b) Déterminer le nombre d’opérations effectuées lors du calcul de P (x) au moyen d’un algorithme utilisant la décomposition suivante : P (x) = a0 + a1 × x + a2 × x × x + . . . + an × x × . . . × x . | {z } n facteurs Déterminer un équivalent simple au voisinage de de ce nombre d’opérations et le comparer avec le résultat obtenu à la question précédente.