#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include <malloc.h>
typedef int ElementType;
typedef struct Node
{
ElementType HeSo;
ElementType SoMu;
struct Node *Next;
}Node;
typedef Node *Position;
typedef Position List;
void MakeNull_List(List *Header)
{
(*Header) = (Node *)malloc(sizeof(Node));
(*Header)->Next = NULL;
}
Position First_List(List L)
{
return L;
}
Position End_List(List L)
{
Position P;
P = L;
while(P->Next != NULL)
P = P->Next;
return P;
}
void Insert_List(ElementType HeSo, ElementType SoMu, Position P, List L)
{
Position T;
T = (Node *)malloc(sizeof(Node));
T->HeSo = HeSo;
T->SoMu = SoMu;
T->Next = P->Next;
P->Next = T;
}
void Read_List(List *L)
{
printf("Da thuc co dang: P(n) = a(0)x^0 + a(1)x^1 + a(2)x^2 + ... + a(n)x^n\n");
unsigned int i, n;
ElementType HeSo, SoMu;
MakeNull_List(L);
printf("Nhap n = "); scanf("%d", &n);
fflush(stdin);
for(i = 0; i <= n; i++)
{
printf(" Nhap a(%d) = ", i);
scanf("%d", &HeSo);
Insert_List(HeSo, i, End_List(*L), *L);
}
}
void Print_List(List L)
{
while(L != End_List(L))
{
if(L->Next->HeSo == 0)
L = L->Next;
else if(L->Next->SoMu == 0 && L->Next->HeSo != 0)
{
printf(" + %d", L->Next->HeSo);
L = L->Next;
}
else if(L->Next->SoMu == 1)
{
printf(" + %dx", L->Next->HeSo);
L = L->Next;
}
else
{
printf(" + ");
printf("%dx^%d", L->Next->HeSo, L->Next->SoMu);
L = L->Next;
}
}
printf("\n");
}
ElementType SoMu(int x, int y)
{
if(y == 0)
return 1;
else
return (y <= 1) ? x:(SoMu(x, y-1)*x);
}
/*ElementType GiaTriDaThuc(ElementType x, List L)
{
ElementType r = 0;
while(L != End_List(L))
{
r += L->Next->HeSo * SoMu(x, L->Next->SoMu);
L = L->Next;
}
return r;
}
void DaoHam(List L)
{
while(L != End_List(L))
if(L->Next->SoMu == 0)
{
L->Next->HeSo = 0;
L = L->Next;
}
else
{
L->Next->HeSo *= L->Next->SoMu;
L->Next->SoMu --;
L = L->Next;
}
}*/