#include #include /* Descreve um elemento do polinomio */ struct no { int coef; int exp; struct no *prox; }; typedef struct no No; /* Insere um novo elemento no inicio do polinomio */ No *insereElemento(No *p, int coef, int exp) { No *novo = (No *) malloc(sizeof(No)); if (novo == NULL) { printf("Insercao falhou!\n"); return p; } novo->coef = coef; novo->exp = exp; novo->prox = p; return novo; } /* Imprime o polinomio */ void imprimePolinomio(No *p) { int primeiro = 1; No *e = p; if (p == NULL) { printf("\n"); return; } while (e != NULL) { if (primeiro) primeiro = 0; else if (e->coef > 0) printf(" + "); if (e->coef < 0) printf(" - "); printf("%dx<%d>", abs(e->coef), e->exp); e = e->prox; } printf("\n"); } /* Libera a lista */ void liberaPolinomio (No *p) { No *e = p, *t; while (e != NULL) { t = e->prox; free(e); e = t; } } /* Insere um novo elemento no final do polinomio */ No *insereNoFinal(No *p, int coef, int exp) { return p; /* substituir pela implementacao */ } /* Derivada */ No *derivadaPolinomio(No *p) { return NULL; /* substituir pela implementacao! */ } /* Comparacao */ int comparaPolinomios(No *p1, No *p2) { return 0; /* substituir pela implementacao! */ } /* Soma */ No *somaPolinomios(No *p1, No *p2) { return NULL; /* substituir pela implementacao! */ } int main() { No *p1, *p2, *p3; No *d, *s; int coef, exp; /* abre o primeiro arquivo de polinomio */ FILE *f = fopen("polinomio1.txt","r"); if (f == NULL) { printf("Nao conseguiu abrir o primeiro arquivo de entrada!\n"); exit(1); } /* le dados do primeiro polinomio, montando a lista encadeada */ p1 = NULL; while (fscanf(f, "%d %d", &coef, &exp) == 2) { p1 = insereElemento(p1, coef, exp); } fclose(f); /* abre o segundo arquivo de polinomio */ f = fopen("polinomio2.txt","r"); if (f == NULL) { printf("Nao conseguiu abrir o segundo arquivo de entrada!\n"); exit(1); } /* le dados do segundo polinomio, montando a lista encadeada */ p2 = NULL; while (fscanf(f, "%d %d", &coef, &exp) == 2) { p2 = insereElemento(p2, coef, exp); } fclose(f); /* abre o terceiro arquivo de polinomio */ f = fopen("polinomio3.txt","r"); if (f == NULL) { printf("Nao conseguiu abrir o terceiro arquivo de entrada!\n"); exit(1); } /* le dados do terceiro polinomio, montando a lista encadeada */ p3 = NULL; while (fscanf(f, "%d %d", &coef, &exp) == 2) { p3 = insereElemento(p3, coef, exp); } fclose(f); /* Calcula a derivada do primeiro polinomio */ d = derivadaPolinomio(p1); printf("Polinomio1: "); imprimePolinomio(p1); printf("Derivada: "); imprimePolinomio(d); /* Compara polinomios */ if (comparaPolinomios(p1,p1)) printf("Polinomio p1 IGUAL a p1\n"); else printf("Polinomio p1 NAO IGUAL a p1\n"); if (comparaPolinomios(p1,p2)) printf("Polinomio p1 IGUAL a p2\n"); else printf("Polinomio p1 NAO IGUAL a p2\n"); if (comparaPolinomios(p1,p3)) printf("Polinomio p1 IGUAL a p3\n"); else printf("Polinomio p1 NAO IGUAL a p3\n"); /* Calcula a soma dos dois primeiros polinomios */ s = somaPolinomios(p1, p2); printf("Polinomio1: "); imprimePolinomio(p1); printf("Polinomio2: "); imprimePolinomio(p2); printf("Soma dos polinomios: "); imprimePolinomio(s); liberaPolinomio(p1); liberaPolinomio(p2); liberaPolinomio(p3); liberaPolinomio(d); liberaPolinomio(s); return 0; }