/** title: Calculo com Polinomios em C (aula TP1) ficheiro: ex14b.c autor: (TP1) versao de: 2001.05.22 .implementacao de Polinomios com uma lista ligada de pares (coef,exp) .calculo da derivada **/ #include #define MAX 20 typedef int tExp; typedef float tCoef; typedef struct m { tCoef coef; tExp exp; }tMono; typedef struct lista{ tMono monomio; struct lista *seg; }tLista,*tPtr; typedef tPtr tPoli; /*---------funcoes auxiliares------------*/ tPoli criaMono(tCoef c,tExp e) { tPoli nova; nova = (tPoli) malloc(sizeof(tLista)); nova->monomio.coef = c; nova->monomio.exp = e; return(nova); } tPoli insere(tPoli cel,tPoli lst) { if (lst==NULL) lst = cel; else { if (cel->monomio.expmonomio.exp){ lst->seg=insere(cel,lst->seg); } else { if (cel->monomio.exp>lst->monomio.exp){ cel->seg=lst; lst = cel;} else { lst->monomio.coef=lst->monomio.coef+cel->monomio.coef; } } } return (lst); } /*---------funcoes principais------------*/ tPoli lerPoli1() { tPoli final=NULL; tPoli novo; tCoef coef; tExp exp; printf("\nIntroduza o coeficiente (0 para terminar)"); scanf("%f", &coef); while(coef!=0) { printf("\nIntroduza o expoente "); scanf("%d", &exp); novo=criaMono(coef,exp); final=insere(novo,final); printf("\nIntroduza o coeficiente (0 para terminar)"); scanf("%f", &coef); } return(final); } //escrita: variante recursiva void escrevePoli1(tPoli p) { if (p!=NULL){ printf("%4.1fx^%d\n", p->monomio.coef,p->monomio.exp); escrevePoli1(p->seg); } } //escrita: variante iterativa void escrevePoli2(tPoli p) { while(p!=NULL){ printf("%4.1fx^%d\n", p->monomio.coef,p->monomio.exp); p=p->seg; } } tPoli derivaPoli1(tPoli p) { tPoli d=NULL; tCoef coef; tExp exp; if (p!=NULL){ if (p->monomio.exp != 0) { coef = (p->monomio.coef*p->monomio.exp); exp = (p->monomio.exp)-1; d=criaMono(coef,exp); d->seg=derivaPoli1(p->seg);} } return(d); } /*---------funcao main------------*/ int main() { tPoli polinomio, derivada; tExp comp; polinomio = lerPoli1(); printf("Polinomio lido:\n"); escrevePoli1(polinomio); derivada = derivaPoli1(polinomio); printf("Polinomio derivado:\n"); escrevePoli1(derivada); return (0); }