# 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