---
# System prepended metadata

title: TP8 jeudi 13h30-15h30

---

# TP8 jeudi 13h30-15h30

**exo 1**

```cpp
const int MAX_DEGRE = 32;
struct Polynome{
   float coeffs[MAX_DEGRE+1];
};


// c'est correct, merci
void  PolynomeNul(Polynome &p) {
  // un polynome nul doit avoir tous ses coefficients nuls
  for(int i=0; i <= MAX_DEGRE; i++)
    p.coeffs[i] = 0;
}


// c'est correct, merci
bool egalPoly(Polynome p1, Polynome p2) {
  // il suffit d'une seule différence pour retourner faux
  for(int i=0; i <= MAX_DEGRE; i++){
    if(p1.coeffs[i] != p2.coeffs[i]) return false;
  }
  return true;
}

// très bien
void  modifierCoeffPoly(Polynome &p, int d, float co) {
    if ( d <= MAX_DEGRE and d >= 0) p.coeffs[d] = co;
   //on peut ecire ceci pour un message plus clair
    else cerr << __func__ << ": " << d<< ": mauvais degre"<< endl;

}

// c'est bon, merci
int degrePoly(Polynome p) {
  int i = MAX_DEGRE-1;
  // on parcourt le tableau de droite à gauche
  // tant que c'est des zéros on recule
  while(i >= 0 and p.coeffs[i] == 0) i--;
  return i;
}


// A tester car je ne suis pas sûr que c'est correct à 100%
float coeffPoly(Polynome p, int d) {
    if ( not estNulPoly){
        if ( d <= MAX_DEGRE && d>=0) return p.coeffs[d] ;
        }
    else return -1;
    cout << " degre trop grand" << endl;
    return -1;
}

// corrigé du prof pour avoir une autre solution
float coeffPoly(Polynome p, int d){
  if (0 <=d && d <= MAX_DEGRE) return p.coeffs[d];
  cerr << __func__ << ": " <<d << ": mauvais degre" << endl;
  exit(EXIT_FAILURE);
}

// c'est bon, merci
bool  estNulPoly(Polynome p) {
  // il suffit d'un seul coeef non nul pour que le polynome soit non nul
  for(int i=0; i <= MAX_DEGRE; i++){
    if(p.coeffs[i] != 0) return false;
  }
  return true; 
}

```
** exo2 **

```cpp

const int MAX_DEGRE = 32;
struct Polynome{
  int degre;
  float coeffs[MAX_DEGRE];
};


void PolynomeNul(Polynome &p) {
  p.degre =-1;
}



// corrigé du prof
void modifierCoeffPoly(Polynome &p, intd, float co) {
  int i;
  if (d <0 || d > MAX_DEGRE){
     cerr << __func__ << ": " << d<< ": mauvais degre"<< endl;
  } 
  else {
    p.coeffs[d] =co;
    if (d > p.degre && co) {
       for (i =p.degre + 1; i <d; i++) p.coeffs[i] =0;
    p.degre = d;
    } 
    else if (d == p.degre && co== 0) {
           for (i =d; i >= 0 && p.coeffs[i] == 0; i--);
           p.degre = i;
         }
  }
}


   

float coeffPoly(Polynome p, int d){
  if (0 <=d && d <= MAX_DEGRE) {
     if (d <=p.degre) return p.coeffs[d];
     return 0;
  }
  cerr << __func__ << ": " <<d << ": mauvais degre" << endl;
  exit(EXIT_FAILURE);
}


bool estNulPoly(Polynome p) {
  return p.degre == -1;
}



// modifierCoeffPoly: 33: mauvais degre
