- Code:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
typedef struct
{
float sm;
float hs;
}dathuc;
typedef struct NODE
{
dathuc info;
NODE* pnext;
};
typedef struct
{
NODE* phead;
NODE* ptail;
int n;
}List;
NODE* GetNode(dathuc x);
void AddFirst(List &l,NODE* new_ele);
NODE* InsertHead(List &l,dathuc x);
void Init(List &l);
void InPut(List &l);
void OutPut(List l);
void Multiplication(List &l,int k);
void Addition(List &l1,List l2);
int Like(List &l1,NODE* ele);
void Substraction(List &l1,List l2);
int Like1(List &l1,NODE* ele);
void AddTail(List &l,NODE* new_ele);
NODE* InsertTail(List &l,dathuc x);
void AddAfter(List &l,NODE* q,NODE* new_ele);
NODE* InsertAfter(List &l,NODE* q,dathuc x);
void Multip(List l1,List l2,List &l);
dathuc RemoveHead(List &l);
void RemoveAfter(List &l,NODE* q);
void Devide(List &l1,List l2,List &l);
int main()
{
List l1,l2,l;
printf("Da thuc thu nhat:");
Init(l1);
InPut(l1);
printf("\nDa thuc vua nhap la :\n");
OutPut(l1);
printf("\nDa thuc thu hai:");
Init(l2);
InPut(l2);
printf("Da thuc vua nhap la:\n");
OutPut(l2);
Init(l);
//Tuy phep muon thuc hien goi ham tuong ung ,o day dang la phep chia
Devide(l1,l2,l);
printf("\n");
OutPut(l);
printf("+");
OutPut(l1);
getch();
}
NODE* GetNode(dathuc x)
{
NODE* p;
p=new NODE;
if(p==NULL)
{
printf("Khong du bo nho!");
return NULL;
}
p->info=x;
p->pnext=NULL;
return p;
}
void AddFirst(List &l,NODE* new_ele)
{
if(l.phead==NULL)
l.phead=l.ptail=new_ele;
else
{
new_ele->pnext=l.phead;
l.phead=new_ele;
}
}
NODE* InsertHead(List &l,dathuc x)
{
NODE* new_ele=GetNode(x);
if(new_ele==NULL) return NULL;
AddFirst(l,new_ele);
return new_ele;
}
void AddTail(List &l,NODE* new_ele)
{
if(l.phead==NULL)
{
l.phead=l.ptail=new_ele;
}
else
{
l.ptail->pnext=new_ele;
l.ptail=new_ele;
}
}
NODE* InsertTail(List &l,dathuc x)
{
NODE* new_ele=GetNode(x);
if(new_ele==NULL) return NULL;
AddTail(l,new_ele);
return new_ele;
}
void AddAfter(List &l,NODE* q,NODE* new_ele)
{
if(q!=NULL)
{
new_ele->pnext=q->pnext;
q->pnext=new_ele;
if(q==l.ptail)
l.ptail=new_ele;
}
else
AddFirst(l,new_ele);
}
NODE* InsertAfter(List &l,NODE* q,dathuc x)
{
NODE* new_ele=GetNode(x);
if(new_ele==NULL) return NULL;
AddAfter(l,q,new_ele);
return new_ele;
}
dathuc RemoveHead(List &l)
{
NODE* p;
dathuc x;
if(l.phead!=NULL)
{
p=l.phead;
x=p->info;
l.phead=l.phead->pnext;
delete p;
if(l.phead==NULL) l.ptail=NULL;
}
return x;
}
void RemoveAfter(List &l,NODE* q)
{
NODE* p;
if(q!=NULL)
{
p=q->pnext;
if(p!=NULL)
{
if(p==l.ptail) l.ptail=q;
q->pnext=p->pnext;
delete p;
}
}
else RemoveHead(l);
}
void Init(List &l)
{
l.phead=l.ptail=NULL;
}
void InPut(List &l)
{
int i=0;
while(1)
{
dathuc x;
printf("\nNhap so mu cua x thu %d:",i+1);
scanf("%f",&x.sm);
printf("Nhap he so cua x thu %d:",i+1);
scanf("%f",&x.hs);
InsertHead(l,x);
i++;
printf("\nBan co muon nhap tiep?-c/k");
if(toupper(getch())=='K') break;
}
l.n=i;
}
void OutPut(List l)
{
NODE* p;
p=l.phead;
printf("(");
while(p!=NULL)
{
if(p->pnext==NULL) printf("%.2fx^%.0f)",p->info.hs,p->info.sm);
else printf("%.2fx^%.0f + ",p->info.hs,p->info.sm);
p=p->pnext;
}
}
void Multiplication(List &l,int k)
{
NODE* p;
p=l.phead;
while(p!=NULL)
{
p->info.hs=p->info.hs*k;
p=p->pnext;
}
}
void Addition(List &l1,List l2)
{
NODE* p,q;
p=l2.phead;
int a[l2.n];
int i=0;
for(i=0;i<l2.n;i++)
a[i]=1;
i=0;
while(p!=NULL)
{
if(Like(l1,p)) a[i]=0;
if(a[i]!=0) InsertHead(l1,p->info);
i++;
p=p->pnext;
}
}
int Like(List &l1,NODE* ele)
{
NODE* p;
p=l1.phead;
while(p!=NULL)
{
if(p->info.sm==ele->info.sm)
{
p->info.hs+=ele->info.hs;
return 1;
}
p=p->pnext;
}
return 0;
}
void Substraction(List &l1,List l2)
{
NODE* p,q;
p=l2.phead;
int a[l2.n];
int i=0;
for(i=0;i<l2.n;i++)
a[i]=1;
i=0;
while(p!=NULL)
{
if(Like1(l1,p)) a[i]=0;
if(a[i]!=0)
{
p->info.hs*=-1;
InsertHead(l1,p->info);
}
i++;
p=p->pnext;
}
}
int Like1(List &l1,NODE* ele)
{
NODE* p;
p=l1.phead;
while(p!=NULL)
{
if(p->info.sm==ele->info.sm)
{
p->info.hs-=ele->info.hs;
return 1;
}
p=p->pnext;
}
return 0;
}
void Multip(List l1,List l2,List &l)
{
NODE* p;
int k=2;
p=l1.phead;
while(p!=NULL)
{
NODE* q;
q=l2.phead;
while(q!=NULL)
{
dathuc x;
x.sm=p->info.sm+q->info.sm;
x.hs=p->info.hs*q->info.hs;
if(k>0)
{
InsertTail(l,x);
k--;
}
else
{
NODE* o;
NODE* t;
int temp=0,flag=1;
o=l.phead;
while(o!=NULL)
{
if(x.sm==o->info.sm)
{
o->info.hs=o->info.hs+x.hs;
flag=0;
break;
}
o=o->pnext;
}
if(flag) InsertTail(l,x);
}
q=q->pnext;
}
p=p->pnext;
}
}
void Devide(List &l1,List l2,List &l)
{
NODE* p;
while(1)
{
p=l1.phead;
NODE* q;
dathuc x;
q=l2.phead;
x.sm=p->info.sm-q->info.sm;
x.hs=p->info.hs/q->info.hs;
InsertTail(l,x);
while(q!=NULL)
{
p->info.hs-=(q->info.hs*x.hs);
p=p->pnext;
q=q->pnext;
}
RemoveHead(l1);
p=l1.phead;
if(p->info.sm<l2.phead->info.sm) break;
}
}
2 posters
+,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm nào
DarkEternal- New Member
- Giới tính : Bài gửi : 7
Tổng Điểm : 15
Điểm Thưởng : 4
Sinh Nhật : 11/08/1990 Bị Dụ Dỗ : 01/12/2009
Tuổi : 34
Vy Thanh Định- Web Master
- Giới tính : Bài gửi : 228
Tổng Điểm : 544
Điểm Thưởng : 16
Sinh Nhật : 19/05/1990 Bị Dụ Dỗ : 11/09/2009
Tuổi : 34
Bài này mình từng làm bằng mảng nhưng cuối cùng đến phần chia hai đa thức lại bị lỗi không thể sửa? Ngày đó nếu đã biết nhìu về linked list như bây h thì đâu đến nỗi, bài của bạn làm khá hay, thanks for sharing