Polinômio
Implemente um programa em C ANSI para representar polinômios.
Cada nó deve possuir o seguinte formato:
___________________________
|coeficiente|expoente| --|-->prox
--------------------------------------
Os nós devem estar ligados em ordem crescente de expoente.
Exemplo: p(x)= 7x^10+5x^2+4
+------------------------------------------------------------+
v
------------- ------------- ------------- ------------- |
| 0 | -1 | -|-->| 7 | 10 | -|-->| 5 | 2 | -|-->| 4 | 0 | -|-+
------------- ------------- ------------- -------------
As funções a serem implementadas estão descritas abaixo:
Inicializa / Insere / Imprime / Ordena
Crie um menu onde o usuário possa escolher qualquer uma das opções.
Os dados devem ser lidos do usuário através do teclado.
Código
#include <stdio.h>
#include <stdlib.h>
struct lista {
int coef;
int expo;
struct lista *prox;
};
typedef struct lista TLista;
TLista* insere(int coef, int expo, TLista *lista) {
TLista *aux;
aux = (TLista*) malloc(sizeof(TLista));
aux->coef = coef;
aux->expo = expo;
if (lista) {
TLista *aux2 = lista;
aux->prox = lista;
do {
aux2 = aux2->prox;
} while (aux2->prox != lista);
aux2->prox = aux;
} else
aux->prox = aux;
return aux;
}
int verifica(TLista *lista) {
return lista == NULL;
}
void imprime(TLista *lista, TLista *aux) {
char ch = '+';
if (aux->coef < 0) {
ch = ' ';
}
if (aux->prox == lista) {
if (aux->expo != 0)
printf("%c%dx^%d ", ch, aux->coef, aux->expo);
else
printf("%c%d", ch, aux->coef);
} else {
imprime(lista, aux->prox);
if (aux->expo != 0)
printf("%c%dx^%d ", ch, aux->coef, aux->expo);
else
printf("%c%d", ch, aux->coef);
}
}
TLista* inicializa(void) {
return NULL;
}
TLista* ordena(TLista* lista) {
TLista* aux;
aux = lista;
do {
if (lista->expo < lista->prox->expo) {
aux->coef = lista->prox->coef;
aux->expo = lista->prox->expo;
aux->prox->coef = lista->coef;
aux->prox->expo = lista->expo;
}
lista = lista->prox;
aux = aux->prox;
} while (aux != lista);
return aux;
}
int main(void) {
setbuf(stdout, NULL);
int opcao = 0, expo = 0, coef = 0;
TLista *lista;
lista = inicializa();
printf("Polin�mio\n");
do {
printf("\nMenu\n");
printf("1-Inserir Dado\n");
printf("2-Imprimir Polin�mio\n");
printf("3-Imprimir Polin�mio Ordenado\n");
printf("0-Sair\n");
printf("\nOp��o: ");
fflush(stdin);
scanf("%d", &opcao);
switch (opcao) {
case 1:
printf("\nDigite o coeficiente: ");
fflush(stdin);
scanf("%d", &coef);
printf("Digite o expoente: ");
fflush(stdin);
scanf("%d", &expo);
lista = insere(coef, expo, lista);
printf("\nDado inserido com sucesso.\n");
break;
case 2:
if (!verifica(lista)) {
printf("\nPolin�mio: ");
imprime(lista, lista);
printf("\n");
} else
printf("N�o existe express�o.\n");
break;
case 3:
if (!verifica(lista)) {
printf("\nPolin�mio: ");
imprime(ordena(lista), ordena(lista));
printf("\n");
} else
printf("N�o existe express�o.\n");
break;
case 0:
//Sair
break;
default:
printf("Op��o inv�lida.");
break;
}
} while (opcao != 0);
//Fim da Aplica��o
return 0;
}