\documentclass[twocolumn,a4paper]{article}
\usepackage{french,tp}
\advance\topmargin -1cm
\advance\textheight 1cm

\begin{document}

\begin{header}
\Huge Neuvième TP
\bigskip
\end{header}

\section*{Polynômes}
On appelle {\em  polynôme}
une fonction du type
$a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0$.
Le degré est $n$.

On représente les polynômes
par un type
\begin{verbatim}
CONST MaxDeg = 100;
TYPE Poly =
  RECORD
    Degre : INTEGER;
    Coeff : ARRAY[0..MaxDeg] OF REAL;
  END;
\end{verbatim}

Le champ {\tt Degre} contient le degré
du polynôme (-1 pour le polynôme nul, {\tt MaxDeg}
au maximum).
Le champ {\tt Coeff} contient les coefficients
du polynôme. L'élément d'indice {\tt i} de ce tableau
contient le coefficient de $x^i$.
Les éléments d'indice supérieur au degré
peuvent contenir n'importe quoi,
ils ne devront pas être utilisés.

\subsubsection*{Premières procédures}
$\bullet$
Faire une procédure {\tt Entrée}
dont l'argument est une variable de type {\tt Poly}
et qui demande le degré du polynôme, puis successivement
les coefficients.

$\bullet$
Faire une procédure {\tt Affiche}
dont l'argument est une variable de type {\tt Poly}
et qui affiche le polynôme.
On pourra afficher le polynôme $2x^3-7x$ sous l'une
des deux formes suivantes, au choix (la seconde est
bien évidemment plus compliquée à mettre en {\oe}uvre) :
\begin{verbatim}
0 -7 0 2
2*x^3 - 7*x
\end{verbatim}

\subsubsection*{Addition et soustraction}
$\bullet$
Faire une procédure {\tt Négation} qui a un
unique argument de type {\tt Poly} et qui
transforme ce polynôme en son opposé.

$\bullet$
$\bullet$
Faire une procédure {\tt Addition} dont
les deux premiers arguments dont de type {\tt Poly}
et dont le troisième (de type {\tt Poly} lui aussi)
contiendra la somme des deux autres polynômes.
Faire attention au calcul du degré du résultat.

$\bullet$
$\bullet$
Faire une procédure {\tt Soustraction} qui utilise
les deux précédentes pour effectuer la soustraction
de polynômes.

\subsubsection*{Multiplication}
$\bullet$
Faire une procédure {\tt FoisC} qui a un
argument de type {\tt Poly} et un argument
de type {\tt REAL} qui transforme le polynôme
en le multipliant par le réel.

$\bullet$
Faire une procédure {\tt FoisX} qui a un
unique argument de type {\tt Poly} et qui
transforme ce polynôme en le multipliant
par $x$.
Penser au cas où le degré du résultat
dépasse {\tt MaxDeg}.

$\bullet$
Faire une procédure {\tt FoisXn} qui a un
argument de type {\tt Poly} et un argument
de type {\tt INTEGER} et qui
transforme ce polynôme en le multipliant
par $x^n$.

$\bullet$
$\bullet$
Utiliser les procédures précédentes pour
faire une procédure {\tt Multiplie} qui
fasse la multiplication de polynômes.

\subsubsection*{Valeur de la fonction polynôme}
$\bullet$
Faire une fonction {\tt Valeur} qui a un
argument de type {\tt Poly} (le polynôme $P$)
et un argument de type {\tt REAL} (le nombre $v$).
Cette fonction a pour résultat la
valeur $P(v)$.

\rule{.5\linewidth}{2pt}

\section*{Calcul en base N}
Récupérer les procédures et fonctions précédentes,
en les adaptant au type {\tt Entier} qui permet
de stocker les entiers en base {\tt N}.

Il faut faire attention aux retenues,
qui n'existent pas dans le cas des
polynômes.

\begin{verbatim}
CONST Max  = 100;
CONST Base =  10;
TYPE Digit = 0..Base-1;
TYPE Entier =
  RECORD
    NbDigits : INTEGER;
    Digits : ARRAY[0..Max] OF Digit;
  END;
\end{verbatim}

On rappelle que les types intervalle,
notés {\tt Début..Fin} ne peuvent
contenir que des entiers compris
entre {\tt Début} et {\tt Fin}.

\rule{.5\linewidth}{2pt}

\section*{Plus difficile}
Faire une procédure {\tt Compose} qui calcule
la composition $P\circ Q$ de deux polynômes $P$ et $Q$.

Programmer la division (euclidienne) de polynômes.
En déduire une division euclidienne pour les
nombres en base $N$
(s'inspirer des calculs ``à la main''
qu'on fait sur une feuille de papier).

\rule{.5\linewidth}{2pt}
\vfill
On rappelle que si la variable {\tt P} est
de type {\tt Poly}, on accède au champ
{\tt Degre} avec {\tt P.degre} et on
accède à l'élément numéro {\tt i}
du champ {\tt Coeff} avec
{\tt P.Coeff[i]}.
\end{document}
