<< | PSOOIndex | Héritage >>


Plan (hide)

  1.   1.  TD - TP PSOO
    1.   1.1  Polynomes

1.  TD - TP PSOO

Pour vous aider, l'exemple proposé en cours :

  1. La classe Vecteur ;
  2. La clase TestVecteur.

1.1  Polynomes

L'objectif de cet exercice est de voir ou revoir les structures du langage (boucles, instructions conditionnelles) et les tableaux. Ainsi dans cet exercice on représentera les polynômes à coefficients réels à l'aide de tableaux de réels double. Par exemple {$$P(x) = \sum_{i=0}^{n} a_i * x^i$$} sera représenté par un tableau t tel que {$t[i] = a_i$} pour tout {$i$} entre {$0$} et {$n$}. Il y a plusieurs représentations possibles pour un même polynôme : on peut toujours élargir une représentation sous forme de tableau par un autre tableau plus long et complété par des zéros. On va commencer par écrire des méthodes utilitaires.

  1. Méthodes utilitaires
    1. Pour les nombres "flottants" (double, float), il n'y a pas de test d'égalité fiable. Écrire une méthode egalite() prenant deux arguments de type double et qui retourne true lorsqu'ils sont voisins à une constante {$\epsilon$} près (avec par exemple {$\epsilon = 0.000001$}).
    2. Écrire une méthode creeMonome() qui fabrique la représentation d'un monôme {$a*x_i$}.
    3. Écrire une méthode litPolynome() qui demande à l'utilisateur de donner les coefficients et crée le polynome correspondant, c'est à dire le tableau et retourne celui-ci.
    4. Écrire une méthode degrePolynome() qui retourne le degré d'un polynôme. Par convention, la méthode retournera {$-1$} dans le cas du polynôme nul.
    5. Écrire une méthode coefficient() qui prend en paramètres un polynôme et un entier positif (correspondant à un exposant), et qui retourne le coefficient correspondant. Pour un entier excédant la taille du tableau représentant le polynôme, la méthode doit retourner zéro.
    6. Écrire une méthode d'affichage affichePolynome() ou encore toString(). Quel est l'intérêt de cette deuxième méthode ?
  2. Fonctions arithmétiques simples
    1. Écrire les méthodes de somme et de soustraction de polynômes.
    2. Écrire la méthode de multiplication de deux polynômes.
  3. Dérivée d'un polynôme
    1. Écrire la méthode dérivant un polynôme.
  4. Division euclidienne et PGCD
    Les polynômes à coefficients réels sont munis d'une opération de division euclidienne analogue à celle des entiers. On a la propriété suivante : si {$A$} et {$B$} sont deux polynômes (avec {$B \neq 0$}), il existe un unique couple de polynômes {$Q$} (le quotient) et {$R$} (le reste) tels que :
    • le degré de {$R$} est strictement inférieur à celui de {$B$} ;
    • {$A = BQ + R$}
    1. Algorithme d'Euclide appliqué aux polynômes.
      On s'intéresse au PGCD (Plus Grand Commun Diviseur) d'un couple de polynômes {$(P_1, P_2) = (0, 0)$}. Attention, dans le cas des polynômes, il n'y a pas unicité du PGCD. Il y a une infinité de PGCD possibles pour un couple de polynômes, qui diffèrent par un coefficient de proportionnalité réel non nul. On peut donc déduire l'ensemble des PGCD de deux polynômes à partir d'un PGCD quelconque. Vous devez utiliser l'algorithme d'Euclide et l'adapter aux polynômes. L'algorithme d'Euclide est basé sur la propriété suivante : si {$a$} et {$b \neq 0$} sont deux entiers positifs, et si {$r1$} est le reste de la division euclidienne de {$a$} par {$b$}, alors {$pgcd(a, b) = pgcd(b, r1)$}. On recommence ensuite la même opération sur le couple {$(b, r1)$}, ce qui donne un nouveau reste {$r2$}, on poursuit avec le couple {$(r1, r2)$} et ainsi de suite, jusqu'à tomber sur un reste {$rn$} nul. On a alors {$pgcd(a, b) = pgcd(b, r1) = pgcd(r1, r2) = . . . = pgcd(rn, 0)$} ; or on voit immédiatement que {$pgcd(rn, 0) = rn$}.
      • Quelle est la condition d'arrêt dans le cas des polynômes ?
      • Écrire la méthode pgcd() basée sur cet algorithme.
      • Écrire un programme complet qui calcule un PGCD de deux polynômes. On choisit d'afficher le PGCD dont le coefficient dominant est égal à 1.

Des versions préliminaires :

  1. Constructeur, lecture, affichage : Polynomes.java
  2. Somme, produit, dérivée : Polynomes2.java
  3. Reste de la division euclidienne : Polynomes3.java