Xử lý đa thức bằng danh sách liên kết
Số trang: 11
Loại file: pdf
Dung lượng: 132.05 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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; };
Nội dung trích xuất từ tài liệu:
Xử lý đa thức bằng danh sách liên kết Xử lý đa thức bằng danh sách liên kếtKhai 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{ 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ừagiả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ếtnế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ưacó 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; 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ầnthê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ầncộ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; } }}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ậc0 thì kết thúc nhập.void NhapDathuc(List &tmp){ Donthuc t; do { cout Node *cur=L.pHead; if (cur) { cout0) cout{ 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.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;}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) { 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); 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 XuatDathuc(B); C=Cong2Dathuc(A,B); cout
Nội dung trích xuất từ tài liệu:
Xử lý đa thức bằng danh sách liên kết Xử lý đa thức bằng danh sách liên kếtKhai 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{ 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ừagiả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ếtnế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ưacó 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; 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ầnthê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ầncộ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; } }}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ậc0 thì kết thúc nhập.void NhapDathuc(List &tmp){ Donthuc t; do { cout Node *cur=L.pHead; if (cur) { cout0) cout{ 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.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;}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) { 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); 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 XuatDathuc(B); C=Cong2Dathuc(A,B); cout
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin cấu trúc dữ liệu lý thuyết đồ thị Javascript ASP.NET Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngGợi ý tài liệu liên quan:
-
52 trang 429 1 0
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 316 0 0 -
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 312 0 0 -
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 298 0 0 -
74 trang 294 0 0
-
96 trang 291 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 288 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 278 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 273 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0