Đề tài này được thực hiện nhằm tạo ra một chương trình thực hiện tất cả các phép toán thường gặp đối với đa thức một biến bao gồm: cộng hai đa thức, trừ hai đa thức, nhân hai đa thức,... Mời các bạn cùng tham khảo.
Trang 1KHOA CNTT&TT - -
BÀI TIỂU LUẬN HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI
THUẬT
Đề tài:
“Cài đặt chương trình thực hiện các phép toán trên đa thức một biến”
Thanh Hóa, 11/2013
Trang 2“Cài đặt chương trình thực hiện các phép toán trên đa thức một biến”
Thanh Hóa, 11/2013
Trang 3Trong quá trình học tập tại trường, em đã được học hỏi và tiếp thu rất nhiều kiến thức đại cương cũng như chuyên ngành nhằm nâng cao vốn hiểu biết và là hành trang quí báu giúp chúng em vững bước vào đời Em xin gửi lời cảm ơn chân thành đến quý thầy cô đã giảng dạy chúng em trong suốt thời gian qua, khoa Công Nghệ Thông Tin và truyền thông cũng như tất cả quý thầy cô trong trường Đại học Hồng Đức Đặc biệt em xin chân thành cảm ơn cô Trịnh Thị Phú - người đã tận tình hướng dẫn em trong suốt thời gian thực hiện đề tài này
Tuy nhiên, dù rất cố gắng nhưng do thời gian có hạn nên chắc rằng bài tiểu luận của em khó tránh khỏi những thiếu sót Em rất mong nhận được sự thông cảm và đóng góp ý kiến của quý thầy cô và các bạn để bài tiểu luận của em được hoàn chỉnh hơn
Em xin chân thành cảm ơn!
Thanh Hóa, 11/2013
Sinh viên thực hiện
Trang 4CHƯƠNG I: MỞ ĐẦU 1
1.1 Lí do chọn đề tài 1
1.2 Mục tiêu và nhiệm vụ của đề tài 1
1.2.1 Mục tiêu đề tài 1
1.2.2 Nhiệm vụ đề tài 1
1.3 Khách thể, đối tượng và phạm vi nghiên cứu 2
1.3.1 Khách thể nghiên cứu 2
1.3.2 Đối tượng và phạm vi nghiên cứu 2
1.4 Các phương pháp nghiên cứu 2
CHƯƠNG II: CƠ SỞ LÍ LUẬN 4
2.1 Khái niệm đa thức một biến 4
2.2 Phép cộng trừ hai đa thức 4
2.3 Phép nhân hai đa thức 4
2.4 Phép chia có dư của hai đa thức 5
2.5 Đạo hàm của đa thức 5
2.6 Nguyên hàm của một đa thức 6
PHẦN III: NỘI DUNG 7
3.1 Tổ chức lưu trữ 7
3.2 Tổ chức menu lựa chọn cho chương trình 7
3.3 Nhập vào một đa thức 10
3.4 Hiển thị đa thức ra màn hình 11
3.5 Nhóm các hàm dùng để thao tác trên danh sách liên kết 13
3.5.1 Hàm chèn một nút mới vào danh sách 13
3.5.2 Hàm xóa một phần tử khỏi danh sách liên kết 14
3.5.3 Hàm xóa toàn bộ một danh sách liên kết 15
3.6 Nhóm các hàm thao tác trên đa thức 16
3.6.1 Hàm sắp xếp đa thức 16
3.6.2 Hàm chuẩn hóa đa thức 17
3.6.3 Hàm đổi dấu của đa thức 18
3.6.4 Hàm đưa đa thức về dạng đầy đủ 19
3.6.5 Hàm cộng hai đa thức 20
3.6.6 Hàm trừ hai đa thức 23
3.6.7 Hàm nhân hai đa thức 23
3.6.8 Hàm chia hai đa thức 24
3.6.9 Hàm tính đạo hàm của đa thức 25
3.6.10 Hàm tính nguyên hàm của đa thức 26
3.6.11 Hàm tính giá trị của đa thức 27
PHẦN IV: KẾT LUẬN 28
3.1 Tóm tắt kết quả nghiên cứu 28
3.2 Đề xuất 29
TÀI LIỆU THAM KHẢO 30
Trang 5CHƯƠNG I: MỞ ĐẦU
1.1 Lí do chọn đề tài
Đa thức là một trong những phạm trù toán học cơ bản, không chỉ học sinh ở nước ta mà còn ở tất cả các nước trên thế giới được tiếp cận khá sớm Ở Việt Nam, ngay từ chương trình môn toán trung học cơ sở, học sinh đã được tiếp cận với khái niệm đa thức Một trong những khái niệm mở đầu được đề cập tới đó là đa thức một biến
Có rất nhiều phép toán có thể thực hiện trên đa thức một biến như: cộng hai
đa thức, trừ hai đa thức, nhân hai đa thức… Việc thực hiện các phép toán này đối với những đa thức nhỏ, có ít phần tử thì ta có thể thực hiện và kiểm tra tính đúng đắn một cách dễ dàng và nhanh chóng Tuy nhiên, với những đa thức thực tế trong các lĩnh vực khoa học thường có số lượng phần tử rất lớn, có độ phức tạp rất cao, việc thực hiện tính toán thủ công làm chúng ta tốn khá nhiều thời gian và công sức mà độ tin cậy lại không cao Khi đó, chiếc máy tính điện tử sẽ trở thành một trợ thủ đắc lực của bạn và một chương trình được viết ra có thể giúp bạn giải quyết những công việc trên một cách dễ dàng và nhanh chóng với độ chính xác cao
Để mang lại cho tất cả mọi người một công cụ hữu ích giúp thực hiện tất cả các phép toán thường gặp trên đa thức một biến, tôi đã quyết định lựa chọn đề tài
“Cài đặt chương trình thực hiện các phép toán trên đa thức một biến” Để có thể
nắm rõ được những thuật toán được sử dụng cũng như cách thức tổ chức hoạt động của chương trình, mời các bạn tìm hiểu phần nội dung đề tài
1.2 Mục tiêu và nhiệm vụ của đề tài
Trang 6- Tổ chức menu lựa chọn công việc cho chương trình
- Tổ chức nhập một đa thức vào từ bàn phím
- Tổ chức xuất một đa thức ra ngoài màn hình
- Thực hiện công việc cộng hai đa thức một biến
- Thực hiện công việc trừ hai đa thức một biến
- Thực hiện công việc nhân hai đa thức một biến
- Thực hiện công việc chia hai đa thức một biến
- Thực hiện công việc tính đạo hàm của một đa thức một biến
- Thực hiện công việc tính nguyên hàm của một đa thức một biến
- Thực hiện công việc tính giá trị của một đa thức một biến với giá trị xác định của ẩn
1.3 Khách thể, đối tượng và phạm vi nghiên cứu
1.3.1 Khách thể nghiên cứu
Cài đặt một chương trình thực hiện tất cả những phép toán thường gặp trên
đa thức một biến
1.3.2 Đối tượng và phạm vi nghiên cứu
Các phép toán thường gặp trên đa thức một biến
1.4 Các phương pháp nghiên cứu
- Phương pháp thu thập tài liệu: thu thập tài liệu từ những bài báo khoa học, các trang web tin học và một số ebook về đề tài nghiên cứu, giáo trình và các tài liệu học tập khác
- Phương pháp phân tích và tổng hợp tài liệu: từ những tài liệu đã thu thập, tiến hành tìm hiểu, phân tích và tồng hợp nội dung liên quan đến đề tài
- Phương pháp chuyên gia: trong quá trình nghiên cứu có sự góp ý, điều chinh từ giáo viên hướng dẫn
- Phương pháp phân tích và tổng hợp kinh nghiệm: sau quá trình tìm hiểu và đúc kết kinh nghiệm, tiến hành tổng hợp và hoàn thiện đề tài
- Phương pháp thực nghiệm: sau khi cài đặt xong chương trình cần xây dựng
Trang 7một số bộ test tiêu biểu và thực hiện kiểm tra tính đúng đắn dựa trên kết quả thu được từ chương trình
Trang 8CHƯƠNG II: CƠ SỞ LÍ LUẬN
2.1 Khái niệm đa thức một biến
Các đa thức của một biến (cũng được gọi là đa thức một ẩn) có dạng
2.3 Phép nhân hai đa thức
Cho hai đa thức:
(x) =
Trang 9(x) =
Khi đó P(x).Q(x) là một đa thức có bậc m+n và có các hệ số xác định bởi
=
2.4 Phép chia có dư của hai đa thức
Với hai đa thức P(x) và Q(x) bất kỳ, trong đó bậc của đa thức Q deg(Q)≥1, tồn tại duy nhất các đa thức S(x) và R(x) thoả mãn đồng thời các điều kiện:
i P(x)=Q(x).S(x)+R(x)
ii deg(R)<deg(Q)
S(x) được gọi là thương số và R(x) được gọi là số dư trong phép chia P(x) cho Q(x)
2.5 Đạo hàm của đa thức
Cho hàm số biến số thực y= ʄ (x) xác định trên khoảng (a;b) (khoảng
(a;b)={x ∊ℝ |a<x<b}) Xét giá trị x0∊(a;b) và giá trị x∊(a;b)
Xét tỷ số Nếu khi Δx→0, tỷ số đó dần tới một giới hạn thì giới hạn đó
Trang 102.6 Nguyên hàm của một đa thức
Cho hàm f xác định trên D⊂ ℝ Hàm F là một nguyên hàm của f nếu F’(x)=f(x) với mọi x∊D
Công thức tính nguyên hàm đa thức một biến:
(u+v)'=u'+v' (xα)'=α.xα-1
Trang 11CHƯƠNG III: NỘI DUNG
3.1 Tổ chức lưu trữ
Trong chương trình, em sử dụng cấu trúc node để lưu trữ mỗi phần tử của
đa thức, đồng thời định nghĩa kiểu dữ liệu con trỏ có tên dslk có kiểu node để sau này dễ sử dụng:
trong đó, mu là một trường có kiểu int dùng để lưu trữ số mũ của phần tử;
hs là một trường có kiểu float dùng để lưu trữ hệ số của phần tử đó
3.2 Tổ chức menu lựa chọn cho chương trình
Menu chính của chương trình được tổ chức như hình 1:
Việc hiển thị ra menu của chương trình và đọc vào lựa chọn của người dùng được thực hiện bởi hai hàm void inmenu(int choice) và int menu():
Hình 1 Menu chính của chương trình
Trang 12void inmenu(int choice)
{
char s1[]=" > ",s2[]=" ";
printf("\nCong viec:\n");
printf("\n\t%s1: Cong hai da thuc.",choice==1?s1:s2);
printf("\n\t%s2: Tru hai da thuc.",choice==2?s1:s2);
printf("\n\t%s3: Nhan hai da thuc.",choice==3?s1:s2);
printf("\n\t%s4: Chia hai da thuc.",choice==4?s1:s2);
printf("\n\t%s5: Tinh dao ham cua da thuc.",choice==5?s1:s2);
printf("\n\t%s6: Tinh nguyen ham cua da thuc.",choice==6?s1:s2);
printf("\n\t%s7: Tinh gia tri cua da thuc.",choice==7?s1:s2);
Trang 14tương ứng được nhập; sau mỗi lần choice thay đổi thì gọi tới hàm void inmenu(int choice) để in menu ra màn hình
Hàm được phát biểu như sau:
- Khai báo một nút mới p
- Đọc vào lần lượt giá trị cho hai trường p->hs và p->mu
- Chèn nút p vào cuối đa thức l
Dùng một biến c có kiểu char để kiểm tra xem đa thức đã được nhập xong chưa, nếu sau khi nhập xong một phần tử, người dùng nhấn phím S (có mã 115 với chữ in và 83 với chữ thường) thì dừng quá trình, nếu không phải thì tiếp tục nhập
Trang 153.4 Hiển thị đa thức ra màn hình
Để có thể hiển thị một đa thức (được lưu trữ trong danh sách liên kết l) đã được chuẩn hóa sẵn ra màn hình em đã sử dụng tới hàm void in(dslk l) Hàm này có cấu trúc:
Trang 16Hàm được phát biểu như sau:
- Đầu tiên, kiểm tra xem danh sách liên kết l xem có rỗng không, nếu danh sách rỗng thì in ra màn hình con số 0
- Dung một con trỏ có kiểu dslk để duyệt từng phần tử của đa thức (từng nút của danh sách liên kết) theo thứ tự từ đầu tới cuối và thực hiện lần lượt các công việc:
Trang 17+ Kiểm tra xem số mũ của phần tử có bằng 0 không, nếu đúng thì in ra hệ số của phần tử đó theo kiểu số nguyên nếu hệ số là một số nguyên hoặc theo kiểu số thực nếu hệ số là một số thực
+ Nếu điều kiện trên không đúng thì kiểm tra xem số mũ của phần tử có bằng 1 không, nếu đúng thì in ra x nếu hệ số là 1, in
ra –x nếu hệ số là -1 nếu không thì in ra hệ số theo kiểu nguyên nếu là số nguyên hay theo kiểu thực nếu là số thực + Nếu các điều kiện phía trên không đúng thì kiểm tra xem hệ số của phần tử có bằng 1 không, nếu đúng thì in ra x^<số mũ> + Nếu các điều kiện phía trên không đúng thì kiểm tra xem hệ số của phần tử có bằng -1 không, nếu đúng thì in ra –x^<số mũ> + Nếu các điều kiện phía trên không đúng thì in ra <hệ số>x^<số mũ> với hệ số của phần tử đó được in theo kiểu số nguyên nếu
hệ số là một số nguyên hoặc theo kiểu số thực nếu hệ số là một
số thực
+ Kiểm tra xem phần tử vừa được duyệt có phải là phần tử cuối cùng của đa thứ không, nếu không thì xem hệ số của phần tử ngay phía sau có dương không, nếu đúng thì in ra dấu +
3.5 Nhóm các hàm dùng để thao tác trên danh sách liên kết
3.5.1 Hàm chèn một nút mới vào danh sách
void insert(dslk p,int vt,dslk &l)
Trang 18- Nếu vị trí chèn không phải là 1 thì:
+ Dùng một con trỏ q để di chuyển tới ngay trước vị trí cần chèn
+ Gán p->next bằng q->next
+ Gán q->next bằng p
3.5.2 Hàm xóa một phần tử khỏi danh sách liên kết
void del(int vt,dslk &l)
Trang 19- Khai báo một biến p kiểu dslk, gán cho p bằng l
- Kiểm tra xem vt có phải là 1 không, nếu đúng thì:
+ Gán l bằng l->next
+ Xóa p
- Nếu vt khác 1 thì:
+ Di chuyển p tới ngay trước vị trí của phần cần xóa
+ Khai báo hai biến q vả r kiểu dslk, gán r bằng p->next, gán q bằng r->next
+ Xóa r
+ Gán p->next bằng q
3.5.3 Hàm xóa toàn bộ một danh sách liên kết
void xoa(dslk &l)
Trang 20Lặp cho tớ khi l bằng NULL, thực hiện các công việc sau:
+ Khai báo một biến p có kiểu dslk, gán cho p bằng l
Trang 21Hàm được phát biểu như sau:
- Khai báo hai con trỏ p và q
- Dùng hai vòng while và hai con trỏ p và q để sắp xếp đa thức theo thuật toán nổi bọt với điều kiện so sánh là số mũ của hai phần tử Nếu số mũ của phần tử được con trỏ p trỏ tới nhỏ hơn số mũ của phần tử được con trỏ q trỏ tới thì đổi hệ số và số mũ của hai phần tử cho nhau
3.6.2 Hàm chuẩn hóa đa thức
void stand(dslk &l)
Trang 22- Nếu một phần tử có hệ số bằng 0 thì xóa phần tử khỏi đa thức
- Nếu hai phần tử trong đa thứ có cùng số mũ thì thay thế hai phần tử này bằng một phần tử khác có cùng số mũ và hệ số bằng tổng hệ số của hai phần tử được thay thế
Hàm được phát biểu như sau :
- Sắp xếp đa thức theo thứ tự giảm dần của số mũ
- Dùng một con trỏ p duyệt từ phần tử thứ nhất tớ phần tử n-1 của đa thức và thực hiện các công việc:
+ Khai báo một biến q kiểu dslk và gán cho q bằng p, gán cho p bằng p->next
+ Nếu q->hs bằng 0 thì xóa q ra khỏi đa thức
+ Nếu >hs bằng p->hs thì gán cho p->hs giá trị tổng của
q->hs và p-q->hs rồi sau đó xóa q khỏi đa thức
- Kiểm tra hệ số của phần tử thứ n của đa thức xem có bằng 0 không, nếu đúng thì xóa phần tử này khỏi đa thức
3.6.3 Hàm đổi dấu của đa thức
void ddau(dslk &l)
Trang 23Hàm này được dùng để đổi dấu của đa thức hay tương đương với việc ta nhân đa thức đó với -1
Hàm này được phát biểu như sau: duyệt lần lượt từng phần tử của đa thức
và nhân hệ số của nó với -1
3.6.4 Hàm đưa đa thức về dạng đầy đủ
void full(dslk &l)
Hàm này được dùng để đưa đa thức l (ở dạng chuẩn tắc) về dạng đầy đủ số
phần tử này được thêm vào không làm thay đổi giá trị của đa thức
Hàm được phát biểu như sau:
- Nếu l bằng NULL (đa thức có giá trị 0) thì thoát khỏi hàm
- Dùng một con trỏ p để duyệt lần lượt các phần tử có số mũ lớn hơn hoặc bằng 1 từ đầu tới cuối của đa thức l, nếu không có phần tử tiếp theo hoặc có nhưng số mũ của phần tử tiếp theo không bé hơn mũ của phần tử hiện tại là 1 thì chèn một phần tử có hệ số là 0 và số mũ
là số mũ của phần tử hiện tại trừ đi 1 vào sau phần tử hiện tại
Trang 26Hàm được phát biểu như sau:
- Khai báo hai con trỏ p (dùng để duyệt đa thức l1) và q (dùng để duyệt đa thức l2), gán p bằng l1, q bằng l2; khai báo và khởi tạo một
đa thức lr dùng để lưu kết quả tạm thời
- Lặp cho tới khi cả p và q đồng thời bằng NULL thực hiện các công việc sau:
+ Nếu p bằng NULL thì chèn q vào vị trí 1 lr sau đó dịch chuyển q tới phần tử tiếp theo của đa thức l2
+ Nếu p khác NULL thì kiểm tra xem q có bằng NULL không, nếu đúng thì chèn p vào vị trí thứ 1 của lr sau đó dịch chuyển
p tới phần tử tiếp theo của đa thức l1
+ Nếu p và q đồng thời khác NULL thì kiểm tra:
Nếu số mũ của phần tử p lớn hơn số mũ của phần tử q thì chèn p vào vị trí 1 lr sau đó dịch chuyển p tớ phần tử tiếp theo của đa thức l1
Nếu số mũ của phần tử q lớn hơn số mũ của phần tử p thì chèn q vào vị trí 1 lr sau đó dịch chuyển q tới phần
tử tiếp theo của đa thức l2
Nếu số mũ của hai phần tử p và q bằng nhau thì chèn một phần tử là tổng của hai phần tử p và q vào vị trí 1 của lr sau đó dịch chuyển p tới phần tử tiếp theo của l1
và q tới phần tử tiếp theo của l2
Trang 27- Xóa giá trị cũ của đa thức l1, chuẩn hóa đa thức lr sau đó gán cho đa thức l1 giá trị của đa thức lr
Hàm được phát biểu như sau:
- Đổi dấu đa thức l2
- Cộng đa thức l1 với đa thức l2 đã được đổi dấu
3.6.7 Hàm nhân hai đa thức
void mul(dslk &l1,dslk l2)
Trang 28l1=lr;
}
Hàm này được dùng để nhân đa thức l1 với đa thức l2, kết quả thu được trả
về cho đa thức l1
Hàm được phát biểu như sau:
- Khai báo một con trỏ p dử dụng để duyệt đa thức l1, khai báo và khởi tạo một đa thức lr được dùng để lưu trữ kết quả tạm thời
- Dùng con trỏ p để duyệt từng phần tử từ đầu tới cuối của đa thức l1 Với mỗi phần tử p ta dùng một con trỏ q để duyệt lần lượt từ đầu tới cuối từng phần tử của đa thức l2 Với mỗi phần tử q ta chèn một phần tử là tích của p và q vào vị trí 1 lr
- Xóa giá trị cũ của đa thức l1, chuẩn hóa đa thức lr và gán giá trị của
lr cho l1
3.6.8 Hàm chia hai đa thức
void div(dslk &l1,dslk l2,dslk &lr)