Professional Documents
Culture Documents
Danh sch lin kt, Gii thut & lp trnh Add comments
Thng 6
282011
Khai bo danh sch lin kt n lu tr mt a thc. Vit cc hm : Nhp a thc vo danh sch lin kt. In a thc. Cng hai a thc. Nhn hai a thc. Tnh gi tr ca mt a thc vi X cho trc.
Khai bo cc struct cn thit: Mi a thc gm nhiu n thc, mi n thc l mt s hng c dng aX^b, nh vy mi n thc cn 2 thnh phn: h s v s m.
struct Donthuc { float heso; int somu; };
nhp a thc vo danh sch lin kt trc ht ta cn khai bo hm thm mt n thc vo danh sch lin kt, n thc thm vo s m bo th t ly tha gim dn v khng trng bc ly tha, nh vy cn xt trong danh sch lin kt nu c n thc cng bc ly tha th s cng h s vo n thc , nu cha c th n thc mi s c thm vo trc n thc c bc ly tha nh hn n.
void Add(Dathuc &L, Donthuc t) { Node *tmp = new Node; tmp->Info = t; //Nu danh sch rng hoc s m u danh sch nh hn s m n thc th s thm vo u danh sch if (L.pHead == NULL || L.pHead->Info.somu < t.somu) { tmp->pNext=L.pHead; L.pHead=tmp; } else { Node *cur=L.pHead; //Tm v tr m n thc ng sau n c s m nh hn s m n thc cn thm while (cur->pNext && cur->pNext->Info.somu >= t.somu) { cur=cur->pNext; } //Nu v tr tm c c s m bng vi s m n thc cn thm th ch cn cng h s vo n thc ti if (cur->Info.somu == t.somu) cur->Info.heso += t.heso; else { //Thm vo sau v tr tm c tmp->pNext = cur->pNext; cur->pNext=tmp; }
} }
Nhp a thc: ta ln lt nhp h s v s m cho n khi nhp xong ly tha bc 0 th kt thc nhp.
void NhapDathuc(List &tmp) { Donthuc t; do { cout<<endl<<"He so: "; cin>>t.heso; cout<<"So mu: "; cin>>t.somu; Add(tmp,t); } while (t.somu>0); }
In a thc ra mn hnh (xut a thc), v a thc nhp vo m bo th t gim dn bc ly tha nn ta ch cn duyt ht danh sch v in ra tng n thc theo dng aX^b, biu thc in ra c p hn th cn kim tra mt s chi tit sau: Nu h s bng 0 th b qua, nu h s nh hn khng th khng in du + gia cc n thc, nu s m bng 0 th ch in h s.
void XuatDathuc(List L) { Node *cur=L.pHead; if (cur) { cout<<cur->Info.heso<<"X^"<<cur->Info.somu; cur=cur->pNext; } while (cur) { if (cur->Info.heso)
Cng 2 a thc, vi hm thm mt n thc vo a thc trn th vic cng 2 a thc ht sc d dng, ch vic to mt a thc mi ri duyt qua 2 a thc v thm tng n thc vo a thc mi.
Nhn 2 a thc th ly tng n thc ca a thc ny nhn vi tng n thc ca a thc kia ri thm vo mt a thc mi.
Dathuc Nhan2Dathuc(Dathuc a, Dathuc b) { Dathuc tmp; DathucInit(tmp); Node *cur_a=a.pHead; Node *cur_b; Donthuc t;
while (cur_a) { cur_b=b.pHead; while (cur_b) { t.heso = cur_a->Info.heso * cur_b->Info.heso; t.somu = cur_a->Info.somu + cur_b->Info.somu; Add(tmp,t);
cur_b=cur_b->pNext; } cur_a=cur_a->pNext; }
return tmp; }
if (tmp.pHead) { cur=tmp.pHead; while (cur->pNext) { if (cur->pNext->Info.heso == 0) { Node *del = cur->pNext; cur->pNext = del->pNext; delete del; } else cur=cur->pNext; } }
Tnh gi tr a thc.
float TinhGiatri(float X, Dathuc L) { float Ret=0; Node *cur=L.pHead; while (cur) { Ret += cur->Info.heso * pow(X,cur->Info.somu);
V d s dng cc hm trn.
void main() { Dathuc A,B,C,D; DathucInit(A); DathucInit(B); DathucInit(C); float X; cout<<"Nhap da thuc thu nhat: "<<endl; NhapDathuc(A); cout<<"Da thuc thu nhat: "<<endl; XuatDathuc(A);