intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Xử lý đa thức bằng danh sách liên kết

Chia sẻ: Abcdef_45 Abcdef_45 | Ngày: | Loại File: PDF | Số trang:11

1.253
lượt xem
63
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nhập đa thức vào danh sách liên kết. In đa thức. Cộng hai đa thức. Nhân hai đa thức. Tính giá trị của một đa thức với X cho trước.Khai báo các struct cần thiết: Mỗi đa thức gồm nhiều đơn thức, mỗi đơn thức là một số hạng có dạng aX^b, như vậy mỗi đơn thức cần 2 thành phần: hệ số và số mũ. struct Donthuc { float heso; int somu; };

Chủ đề:
Lưu

Nội dung Text: Xử lý đa thức bằng danh sách liên kết

  1. Xử lý đa thức bằng danh sách liên kết Khai báo danh sách liên kết đơn lưu trữ một đa thức. Viết các hàm : Nhập đa thức vào danh sách liên kết.  In đa thức.  Cộng hai đa thức.  Nhân hai đa thức.  Tính giá trị của một đa thức với X cho trước.  Khai báo các struct cần thiết: Mỗi đa thức gồm nhiều đơn thức, mỗi đơn thức là một số hạng có dạng aX^b, như vậy mỗi đơn thức cần 2 thành phần: hệ số và số mũ. struct Donthuc { float heso; int somu; }; struct Node { Donthuc Info; Node *pNext; }; struct Dathuc
  2. { Node *pHead; }; void ListInit(Dathuc &tmp) { tmp.pHead=0; } Để nhập đa thức vào danh sách liên kết trước hết ta cần khai báo hàm thêm một đơn thức vào danh sách liên kết, đơn thức thêm vào sẽ đảm bảo thứ tự lũy thừa giảm dần và không trùng bậc lũy thừa, như vậy cần xét trong danh sách liên kết nếu đã có đơn thức cùng bậc lũy thừa thì sẽ cộng hệ số vào đơn thức đó, nếu chưa có thì đơn thức mới sẽ được thêm vào trước đơn thức có bậc lũy thừa nhỏ hơn nó. void Add(Dathuc &L, Donthuc t) { Node *tmp = new Node; tmp->Info = t; //Nếu danh sách rỗng hoặc số mũ đầu danh sách nhỏ hơn số mũ đơn thức thì sẽ thêm vào đầu danh sách if (L.pHead == NULL || L.pHead->Info.somu < t.somu) { tmp->pNext=L.pHead;
  3. L.pHead=tmp; } else { Node *cur=L.pHead; //Tìm vị trí mà đơn thức đứng sau nó có số mũ nhỏ hơn số mũ đơn thức cần thêm while (cur->pNext && cur->pNext->Info.somu >= t.somu) { cur=cur->pNext; } //Nếu vị trí tìm được có số mũ bằng với số mũ đơn thức cần thêm thì chỉ cần cộng hệ số vào đơn thức tại đó if (cur->Info.somu == t.somu) cur->Info.heso += t.heso; else { //Thêm vào sau vị trí tìm được tmp->pNext = cur->pNext; cur->pNext=tmp; }
  4. } } Nhập đa thức: ta lần lượt nhập hệ số và số mũ cho đến khi nhập xong lũy thừa bậc 0 thì kết thúc nhập. void NhapDathuc(List &tmp) { Donthuc t; do { cout
  5. Node *cur=L.pHead; if (cur) { cout0) cout
  6. { Dathuc tmp; DathucInit(tmp); Node *cur = a.pHead; while (cur) { Add(tmp,cur->Info); cur=cur->pNext; } cur = b.pHead; while (cur) { Add(tmp,cur->Info); cur=cur->pNext; } return tmp; } Nhân 2 đa thức thì lấy từng đơn thức của đa thức này nhân với từng đơn thức của đa thức kia rồi thêm vào một đa thức mới.
  7. 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;
  8. } return tmp; } Cần một hàm rút gọn đa thức để xóa đi các đơn thức có hệ số bằng 0 trong đa thức. void Rutgon(Dathuc &tmp) { Node *cur; while (tmp.pHead && tmp.pHead->Info.heso==0) { cur=tmp.pHead; tmp.pHead = tmp.pHead->pNext; delete cur; } if (tmp.pHead) { cur=tmp.pHead; while (cur->pNext) {
  9. if (cur->pNext->Info.heso == 0) { Node *del = cur->pNext; cur->pNext = del->pNext; delete del; } else cur=cur->pNext; } } } Tính giá trị đa thức. float TinhGiatri(float X, Dathuc L) { float Ret=0; Node *cur=L.pHead; while (cur) { Ret += cur->Info.heso * pow(X,cur->Info.somu);
  10. cur=cur->pNext; } return Ret; } Ví dụ sử dụng các hàm trên. void main() { Dathuc A,B,C,D; DathucInit(A); DathucInit(B); DathucInit(C); float X; cout
  11. XuatDathuc(B); C=Cong2Dathuc(A,B); cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0