Polynome

Michel SIMATIC, Loïc JOLY et Amina GUERMOUCHE

3 mai 2024

1 Introduction

Cet exercice a pour but de :

  1. manipuler les classes et les conteneurs ;
  2. adopter une démarche TDD (/Test Driven Development/) : coder les tests avant de coder nos fonctions, vérifier que les tests sont faux, écrire le code de nos fonctions et enfin vérifier que nos tests sont désormais corrects.

Pour ce faire, vous allez coder une classe permettant de gérer les polynômes en vous inspirant de Fraction1.cpp, Fraction2.cpp et Fraction3.cpp.

2 Travail à faire

        TEST(Creation, AvecCoefsNonNuls) {
           Polynome p1{ {1.2, 3, 4, 5} };
           Polynome p2{ {{0,1.2}, {1,3}, {2,4}, {3,5}} };
           EXPECT_EQ(p1, p2);
        }

Cliquez pour obtenir de l’aide

        TEST(Creation, AvecCoefsNuls) {
            Polynome p1{ {{0,1}, {1,0}, {2,3}, {3,4}, {2000,0}} };
            Polynome p2{ {{0,1},        {2,3}, {3,4},         } };
            EXPECT_EQ(p1, p2);
        }

Cliquez pour des exemples de tests de somme

  1. Somme de deux polynômes quelconques, ne rentrant dans aucun des 3 cas suivants.
  2. Somme de deux polynômes telle que des coefficients du polynôme somme soient nuls.
  3. Somme où l’un des polynômes est le polynôme nul.

Cliquez pour plus de détails sur ces exemples de somme

        TEST(Somme, SommeSansRienDeParticulier) {
            Polynome p1{ {1, 0, 2, 1} };
            Polynome p2{ {1, 2, 0, 1} };
            Polynome somme_ref{ {2, 2, 2, 2} };
            EXPECT_EQ(p1 + p2, somme_ref);
            EXPECT_EQ(p2 + p1, somme_ref);
        }
        TEST(Somme, SommeOuCoefsSAnnulent) {
            Polynome p1{ {1, 0, 2,  1} };
            Polynome p2{ {1, 2, 0, -1} };
            Polynome somme_ref{ {2, 2, 2} };
            EXPECT_EQ(p1 + p2, somme_ref);
            EXPECT_EQ(p2 + p1, somme_ref);
        }
        TEST(Somme, SommeAvecPolynomeNul) {
            Polynome p{ {1, 0, 2, 1} };
            Polynome p_nul;
            EXPECT_EQ(p + p_nul, p);
            EXPECT_EQ(p_nul + p, p);
        }
        TEST(Somme, SommeAvecConstante) {
           Polynome p{ {0, 0, 2, 1} };
           double d{ 1.2 };
           Polynome somme_ref{ {1.2, 0, 2, 1} };
           EXPECT_EQ(p + d, somme_ref);
           EXPECT_EQ(d + p, somme_ref);
        }

Cliquez pour obtenir de l’aide

3 Pour aller plus loin

Si vous avez réalisé une implémentation à base de vector (respectivement map), faites l’implémentation à base de map(respectivement vecteur). Pour ce faire :

NB :

  1. Cette manière de mettre en place une nouvelle implémentation est classique. Elle permet, par exemple, de faire des tests de performance entre différentes implémentations, en vue de retenir la meilleure.
  2. Dans un même programme, il est possible de faire cohabiter plusieurs implémentations à l’aide du patron de conception Fabrique.

Corrigé (à exploiter selon la procédure cmake de ce document).