Lỗi khi cài đặt đa thức bằng danh sách liên kết
Hello everyone. Em là newbie về lập trình và cũng lần đầu vào page. Mong mọi người giúp đỡ :)))
Chả là hôm kiểm tra em có làm bài test mà có một cái lỗi nhẹ khi chạy chương trình. Em thắc mắc mãi nên nay tìm được page này và lên đây nhờ mọi người sửa giúp
Cụ thể là em sai ở phần chạy chương trình khi tính tổng 2 đa thức thì chỉ tính đc tổng 2 đa thức đồng dạng. Ví dụ như nhập:
(x^2 + 3x + 1) + (2x+3) = 5x + 4 (mất x^2)
hoặc
(2x+3) 0 + (x^2 + 3x + 1) = “DaThuc.cpp has stop working” =)))))))
Đây là bài tập về cài đặt đa thức bằng linked list (DSLK). Em làm trên Dev-C++
typedef int ElementType;
typedef struct Node
{
ElementType HeSo;
ElementType SoMu;
ElementType Element;
struct Node *Next;
}Node;
typedef Node *Position;
typedef Position List;
//Khoi tao danh sach rong
void MakeNull_List(List *Header)
{
(*Header) = (Node *)malloc(sizeof(Node));
(*Header)->Next = NULL;
}
//Vi tri phan tu dau tien
Position First_List(List L)
{
return L;
}
//Vi tri phan tu cuoi cung
Position End_List(List L)
{
Position P;
P = L;
while(P->Next != NULL)
P = P->Next;
return P;
}
//Them phan tu vao danh sach
void Insert_List(ElementType HeSo, ElementType SoMu, Position P, List L)
{
Position T = (Node *)malloc(sizeof(Node));
T->HeSo = HeSo;//
T->SoMu = SoMu;//
T->Next = P->Next;
P->Next = T;
}
//Nhap da thuc P(n) tu ban phim
void Read_List(List *L)
{
int i, n;
ElementType HeSo, SoMu;
MakeNull_List(L);
printf("
Nhap n = "); scanf("%d", &n);
fflush(stdin);
for(i = n; i >= 0; i--)
{
printf("Nhap a(%d) = ", i);
scanf("%d", &HeSo);
Insert_List(HeSo, i, End_List(*L), *L);
}
}
//In da thuc ra man hinh
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("
");
}
//
ElementType SoMu(int x, int y)
{
if(y == 0)
return 1;
else
return (y <= 1) ? x:(SoMu(x, y-1)*x);
}
//Dinh tri da thuc
ElementType GiaTriDaThuc(ElementType x, List L)
{
ElementType z = 0;
while(L != End_List(L))
{
z += L->Next->HeSo * SoMu(x, L->Next->SoMu);
L = L->Next;
}
return z;
}
//Dao ham cua da thuc
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;
}
}
//Ham tinh tong cua hai da thuc
void TongDT(List &L, List L1, List L2)
{
Position p,q;
if (First_List(L1)->SoMu > First_List(L2)->SoMu)
{
L = L1;
p = First_List(L2);
}
else {
L = L2;
p = First_List(L1);
}
q = First_List(L);
while (q->SoMu > p->SoMu)
q = q->Next;//Tim q sao cho q->SoMu = p->SoMu
while (q != NULL)
{
q->HeSo += p->HeSo;
p = p->Next;
q = q->Next;
}
}
int main()
{
List L,L1,L2;
MakeNull_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
");
Read_List(&L);
printf("
Da thuc vua nhap la: ");
Print_List(L);
int x;
printf("
Nhap x = ");
scanf("%d", &x);
printf("
Gia tri da thuc khi x = %d la: %d
", x, GiaTriDaThuc(x, L));
printf("
");
system("pause");
DaoHam(L);
printf("
Dao ham cua da thuc la: ");
Print_List(L);
int y;
printf("
Nhap x = ");
scanf("%d", &y);
printf("
Gia tri cua dao ham khi x = %d la: %d
", y, GiaTriDaThuc(y, L));
MakeNull_List(&L1); MakeNull_List(&L2);
printf("
Nhap P(x): "); Read_List(&L1);
printf("
Nhap Q(x): "); Read_List(&L2);
printf("
P(x) = "); Print_List(L1);
printf("
Q(x) = "); Print_List(L2);
TongDT(L,L1,L2);
getch();
return 0;}[/details]