Programa em c
Manipulação de Polinômios Esparsos
Entrega: 22 de setembro
Polinômios esparsos podem ser representados eficientemente por meio de listas encadeadas. Neste exercício-programa você escreverá uma biblioteca que usa listas encadeadas para implementar o tipo abstrato de dados "polinomio". A interface da sua biblioteca deve ser o arquivo polinomio.h, cujo conteúdo é o seguinte:
typedef struct termo *Polinomio;
Polinomio cria_monomio(double coef, int exp);
void soma(Polinomio p, Polinomio q);
void subtrai(Polinomio p, Polinomio q);
void multiplica(Polinomio p, Polinomio q);
Polinomio deriva(Polinomio p);
int grau(Polinomio p);
double calcula(Polinomio p, double x);
Polinomio duplica(Polinomio p);
void imprime(Polinomio p);
void libera(Polinomio p);
Note que o arquivo polinomio.h especifica o que se pode fazer com um Polinomio (isto é, as operações sobre polinômios), mas não informa como um Polinomio é implementado. O tipo Polinomio é definido como um apontador para uma estrutura cuja definição não é parte da interface da biblioteca. (A definição da estrutura termo não aparece no arquivo polinomio.h.)
Abaixo descrevemos o que deve fazer cada uma das funções da biblioteca:
Polinomio cria_monomio(double coef, int exp);
Cria um novo monômio (um polinômio com um só termo) cujo coeficiente é coef e cujo expoente é exp e devolve o monômio criado. Caso o parâmetro coef seja igual a zero, esta função cria um polinômio nulo (um polinômio que não possui nenhum termo com coeficiente não nulo) e devolve o polinômio nulo criado. void soma(Polinomio p, Polinomio q);
Recebe dois polinômios, p e q, e devolve em p a soma de p e q. void subtrai(Polinomio p, Polinomio q);
Recebe dois polinômios, p e q, e devolve em p a diferença entre p e q, ou seja, p-q. void multiplica(Polinomio p, Polinomio q);
Recebe dois polinômios, p e q, e devolve em p o produto de p e q.
Polinomio deriva(Polinomio p);
Recebe um