Vous êtes sur la page 1sur 2

Université Moulay Ismaïl 2022-2023

ENSAM – Meknès S4 / 2 ième Année / API

TP Devoir Libre – Listes doublement chainées en C++


Exercice – représentation et manipulation des polynômes réels
L’objectif de l’exercice est de représenter en mémoire des polynômes réels et d’implémenter les opérations
mathématiques usuelles sur les polynômes (somme, produit, division, …).
Un polynôme est composé de monômes. Chaque monôme est défini par un coefficient et un exposant. Le
nombre de monômes est variable, aussi une allocation dynamique d’espace mémoire s’impose. La gestion en
liste chainée facilite l’ajout ou la suppression de monômes pour un polynôme donné.
On représente un polynôme par une liste doublement chainée comme le montre l’exemple suivant.
Exemple : Le polynôme 𝑃(𝑋) = 2𝑋 ! + 3𝑋 + 1 sera représenté par la liste

2 5 3 1 1 0
ptr front ptr back
NULL
NULL

Le polynôme nul 𝑃(𝑋) = 0 sera représenté par une liste vide.


On suppose que les monômes d’un polynôme sont triés par ordre décroissant d’exposant de début de la liste à
la fin (front to back) et inversement par ordre croissant de la fin au début.
On définit les types suivants :
typedef struct {
double coefficient ;
int exposant ;
} Monome ;

typedef Monome TypeListe;

typedef struct cellule {


TypeListe donnee ;
struct cellule * suivant ;
struct cellule * precedent ;
} Cellule ;

typedef struct {
Cellule * front ; // pointeur sur le début
Cellule * back ; // pointeur sur le fin
} Liste;

typedef Liste Polynome ;

Partie 1. Gestion d’une liste doublement chainée


1. Écrire une fonction Liste * init_liste( ) pour créer et initialiser une liste vide.

B. Bakkas & E. Zemmouri ENSAM-Meknès


2. Écrire une fonction void ajouter_debut (Liste * L, TypeListe valeur) pour ajouter
un élément au début de la liste L.
3. Écrire une fonction void ajouter_fin (Liste * L, TypeListe valeur) pour ajouter un
élément à la fin de la liste L.
4. Écrire une fonction void supprimer_debut (Liste * L) pour supprimer un élément au début
de la liste L.
5. Écrire une fonction void supprimer_fin (Liste * L) pour supprimer un élément à la fin de la
liste L.
Partie 2. Polynômes réels
En utilisant les fonctions précédentes en cas de besoin, répondez aux questions suivantes :
6. Écrire une fonction Polynome * init () pour créer et initialiser un polynôme nul.
7. Écrire une fonction Polynome * lire () pour lire au clavier un polynôme. On demande à
l’utilisateur de saisir des couples (coef, exp) et un coefficient nul ou un exposant négatif pour terminer.
8. Écrire une fonction void afficher (Polynome *p) pour afficher un polynôme donné en
argument. Pensez à proposer l’affichage dans les deux sens (de l’exposant le plus grand au plus petit et
inversement).
9. Écrire une fonction int degre (Polynome *p) qui retourne le degré d’un polynôme.
10. Écrire une fonction pour évaluer un polynôme P en un réel x donnée. Pour cela, utilisez le schéma
simple puis le schéma de Horner :
Schéma simple : 𝑃(𝑥) = 𝑎" + 𝑎# 𝑥 + 𝑎$ 𝑥 $ + ⋯ + 𝑎% 𝑥 % è evaler(P,x)
Schéma de Horner : 𝑃(𝑥) = 𝑎" + 𝑥 (𝑎# + 𝑥 (𝑎$ + ⋯ + 𝑥 (𝑎%&# + 𝑥 𝑎% ) … ) è
evaler_horner(P,x)
11. Écrire une fonction void ajouter_monome(Polynome *p, double coef, int exp) pour
ajouter un monôme à un polynôme.
Exemple : 𝑃 (𝑋) = 2𝑋 ! + 3𝑋 + 1
ajouter_monome (P, 7, 3) è 𝑃 (𝑋) = 2𝑋 ! + 7𝑋 ' + 3𝑋 + 1
ajouter_monome (P, -2, 1) è 𝑃 (𝑋) = 2𝑋 ! + 𝑋 + 1
12. Écrire une fonction void supprimer_monome(Polynome *p, int exp) pour supprimer du
polynôme p le monôme d’un exposant donné.
13. Écrire une fonction pour calculer et retourner la somme de deux polynômes donnés en arguments.
14. Écrire une fonction pour calculer l’opposé d’un polynôme donné en argument.
15. Écrire une fonction pour calculer et retourner la soustraction de deux polynômes donnés en arguments.
16. Écrire une fonction pour calculer et retourner le produit de deux polynômes donnés en arguments.
17. Écrire une fonction pour calculer la division euclidienne de deux polynômes donnés en arguments.
18. Écrire la fonction principale main pour tester d’une manière adéquate les fonctions précédentes

B. Bakkas & E. Zemmouri ENSAM-Meknès

Vous aimerez peut-être aussi