Tải bản đầy đủ (.pdf) (34 trang)

Tiểu luận Cấu trúc dữ liệu và giải thuật "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"

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (556.01 KB, 34 trang )




TRƯỜNG ĐH HỒNG ĐỨC
KHOA 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”



SVTH : Bùi Hữu Giáp
Lớp : Đại học tin – K15
MSV : 1261030003




Thanh Hóa, 11/2013


TRƯỜNG ĐH HỒNG ĐỨC
KHOA 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”




SVTH : Bùi Hữu Giáp
Lớp : Đại học tin – K15
MSV : 1261030003
GVHD : Trịnh Thị Phú





Thanh Hóa, 11/2013


LỜI CẢM ƠN

Trong 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






MỤC LỤC

CHƯƠ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

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


SVTH: Bùi Hữu Giáp
1
GVHD: Trịnh Thị Phú


CHƯƠ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
1.2.1. Mục tiêu đề tài
Đề 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…
1.2.2. Nhiệm vụ đề tài
- Tổ chức lưu trữ một đa thức một biến cụ thể.
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


SVTH: Bùi Hữu Giáp
2
GVHD: Trịnh Thị Phú


- 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
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


SVTH: Bùi Hữu Giáp

3
GVHD: Trịnh Thị Phú


mộ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.


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


SVTH: Bùi Hữu Giáp
4
GVHD: Trịnh Thị Phú


CHƯƠ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
P(x)=a
0
+a
1
x+ +a
n-1
x
n-1
+a
n

x
n
với các hệ số a
i
∊ℝ là một đa thức một biến trên ℝ. Nếu a
n
≠ 0 thì P(x) là đa
thức một biến bậc n.
Đa thức trên có thể viết ngắn gọn nhờ ký hiệu xich-ma là
(x) =








2.2. Phép cộng trừ hai đa thức.
Cho hai đa thức:
(x) =








(x) =









Khi đó phép cộng và trừ hai đa thức P(x) và Q(x) được thực hiện theo từng
hệ số của x
k
, tức là

(

)
+() =

(


±

)




{,}



2.3. Phép nhân hai đa thức.
Cho hai đa thức:
(x) =








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


SVTH: Bùi Hữu Giáp
5
GVHD: Trịnh Thị Phú


(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ị x
0
∊(a;b) và giá trị x∊(a;b).
Đặt Δx = x − x
0
thì x = x
0
+Δx. Δx được gọi là số gia đối số.
Đặt Δy = f(x)-f(x

0
). Δy được gọi là số gia hàm số.
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 đó
được gọi là đạo hàm của hàm số y=f(x) tại điểm x
0
kí hiệu là ʄ'(x) hay
̇
().
ʄ

(
x
)
= lim
→
ʄ
(


+Δx
)
−ʄ(

)


Công thức tính đạo hàm đa thức một biến:

(u+v)'=u'+v'
(x
α
)'=α.x
α-1

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


SVTH: Bùi Hữu Giáp
6
GVHD: Trịnh Thị Phú


2.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


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


SVTH: Bùi Hữu Giáp
7

GVHD: Trịnh Thị Phú


CHƯƠ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:
struct node
{
int mu;
float hs;
node *next;
};
typedef node *dslk;

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
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


SVTH: Bùi Hữu Giáp
8

GVHD: Trịnh Thị Phú


void 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);
printf("\n\t%s0: Thoat.",choice==0?s1:s2);
printf("\n\nSu lua chon cua ban: %d",choice);
}
int menu()
{
int choice=1;
while (1)
{
system("cls");
inmenu(choice);
char c;
c=getch();
if (c==13)
{
system("cls");
return choice;

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


SVTH: Bùi Hữu Giáp
9
GVHD: Trịnh Thị Phú


}
else if (c>='0'&&c<='7')
choice=c%48;
else if (c==72)
{
if (choice==0)
choice=7;
else
choice ;
}
else if (c==80)
{
if (choice==7)
choice=0;
else
choice++;
}
}
}
Hàm void inmenu(int choice) dùng để hển thị menu ra ngoài màn hình với
một con trỏ dùng để trỏ vào lựa chọn choice tương ứng của người dùng.
Hàm int menu() trả về sự lựa chọn của người dùng. Trong hàm, một biến

choice được dùng để lưu trữ tạm thời lựa chọn của người dùng, biến này được
khởi tạo với giá trị là 1. Một vòng while thực hiện công việc đọc kí tự được người
dùng nhập từ bàn phím, nếu người dùng lựa chọn (nhấn phím Enter có mã 13) thì
trả về sự lựa chọn choice hiện thời; nếu người dùng nhấn phím mũi tên (lên hoặc
xuống có mã tương ứng là 72 và 80) thì tăng hay giảm giá trị choice tương ứng;
nếu người dùng nhấn một phím số từ 0 đến 7 thì gán cho choice giá trị của số
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


SVTH: Bùi Hữu Giáp
10
GVHD: Trịnh Thị Phú


tươ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.
3.3. Nhập vào một đa thức
Để đọc một đa thức được người dùng nhập từ bàn phím, em sử dụng tới
hàm void enter(dslk &l). Hàm này có cấu trúc:
void enter(dslk &l)
{
int n=0;
while (1)
{
dslk p=new node;
printf("\n\nNhap lan luot he so va so mu cua phan tu thu %d: ",n+1);
scanf("%f%d",&p->hs,&p->mu);
insert(p,n+1,l);
printf("Nhan phim S de ngung hoac nhan phim khac bat ki de tiep tuc!
");

char c=getch();
if (c==115||c==83)
break;
}
}
Hàm này được dùng để nhập vào một đa thức l bằng cách nhập lần lượt hệ
số và số mũ cho từng phần tử.
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.

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


SVTH: Bùi Hữu Giáp
11
GVHD: Trịnh Thị Phú


3.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:
void in(dslk l)
{

printf("\n");
dslk p;
p=l;
if (p==NULL)
printf("0");
while (p!=NULL)
{
if (p->mu==0)
{
if ((int)p->hs==p->hs)
printf("%.0f",p->hs);
else
printf("%f",p->hs);

}
else if (p->mu==1)
{
if (p->hs==1)
printf("x");
else if (p->hs==-1)
printf("-x");
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


SVTH: Bùi Hữu Giáp
12
GVHD: Trịnh Thị Phú


else if ((int)p->hs==p->hs)

printf("%.0fx",p->hs);
else
printf("%fx",p->hs);
}
else if (p->hs==1)
printf("x^%d",p->mu);
else if (p->hs==-1)
printf("-x^%d",p->mu);
else
{
if ((int)p->hs==p->hs)
printf("%.0fx^%d",p->hs,p->mu);
else
printf("%fx^%d",p->hs,p->mu);
}

if ((p->next!=NULL)&&(p->next->hs>=0))
printf("+");
p=p->next;
}
}
Hà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:
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



SVTH: Bùi Hữu Giáp
13
GVHD: Trịnh Thị Phú


+ 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)
{
if (vt==1)
{

p->next=l;
l=p;
}
else
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


SVTH: Bùi Hữu Giáp
14
GVHD: Trịnh Thị Phú


{
dslk q;
q=l;
for (int i=2;i<vt;i++)
q=q->next;
p->next=q->next;
q->next=p;
}
}
Hàm này được dùng để chẻn một nút p vào vị trí vt của danh sách liên kết l.
Hàm được phát biểu như sau:
- Đầu tiên, kiểm tra xem vị trí chèn có phải là 1 không, nếu đúng thì:
+ Gán p->next bằng l.
+ Gán p cho l.
- 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)
{
dslk p;
p=l;
if (vt==1)
{
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


SVTH: Bùi Hữu Giáp
15
GVHD: Trịnh Thị Phú


l=l->next;
delete(p);
}
else
{
dslk q,r;
for (int i=2;i<vt;i++)
p=p->next;
r=p->next;
q=r->next;
delete (r);
p->next=q;
}
}

Hàm này được dùng để xóa một phần tử ở vị trí vt của danh sách liên kết l.
Hàm được phát biểu như sau:
- 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)
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


SVTH: Bùi Hữu Giáp
16
GVHD: Trịnh Thị Phú


{
while (l!=NULL)
{
dslk p=l;
l=l->next;
delete(p);
}
}

Hàm này được dùng để xóa tất cả các phần tử trong danh sách liên kết l.
Hàm được phát biểu như sau:
Lặ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.
+ Gán l bằng l->next.
+ Xóa p.
3.6. Nhóm các hàm thao tác trên đa thức
3.6.1. Hàm sắp xếp đa thức
void sort(dslk &l)
{
dslk p;
p=l;
while (p!=NULL)
{
dslk q=p->next;
while (q!=NULL)
{
if (p->mu<q->mu)
{
float tg1=p->hs;
p->hs=q->hs;
q->hs=tg1;
int tg=p->mu;
p->mu=q->mu;
q->mu=tg;
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


SVTH: Bùi Hữu Giáp
17

GVHD: Trịnh Thị Phú


}
q=q->next;
}
p=p->next;
}

}
Hàm này được dùng để sắp xếp một đa thức l có n theo thứ tự giảm dần số
mũ của các phần tử.
Hà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)
{
if (l==NULL)
return;
sort(l);
dslk p=l;
int i=1;
while (p->next!=NULL)
{
dslk q=p;

p=p->next;
if (q->hs==0)
del(i,l);
else if (q->mu==p->mu)
{
p->hs=p->hs+q->hs;
del(i,l);
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


SVTH: Bùi Hữu Giáp
18
GVHD: Trịnh Thị Phú


}
else
i++;
}
if (p->hs==0)
del(i,l);
}
Hàm này được dùng để chuẩn hóa một đa thức l có n phần tử theo các tiêu
chí :
- 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 q->hs bằng p->hs thì gán cho p->hs giá trị tổng của q-
>hs và p->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)
{
dslk p=l;
while (p!=NULL)
{
p->hs=-p->hs;
p=p->next;
}
}
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


SVTH: Bùi Hữu Giáp
19
GVHD: Trịnh Thị Phú


Hà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)
{
if (l==NULL)
return;
dslk p=l;
int i=1;
while (p->mu>=1)
{
if (p->next==NULL||p->next->mu!=p->mu-1)
{
dslk r=new node;
r->hs=0;
r->mu=p->mu-1;
insert(r,i+1,l);
}
p=p->next;
i++;
}
}
Hàm này được dùng để đưa đa thức l (ở dạng chuẩn tắc) về dạng đầy đủ số
mũ. Những phần tử được thêm vào có dạng 0x
α
với α là số mũ còn thiếu. Những
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.
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


SVTH: Bùi Hữu Giáp
20
GVHD: Trịnh Thị Phú


3.6.5. Hàm cộng hai đa thức
void add(dslk &l1,dslk l2)
{
dslk p=l1,q=l2,lr=NULL;
while (p!=NULL||q!=NULL)
{
if (p==NULL)
{
dslk r=new node;
r->hs=q->hs;
r->mu=q->mu;
insert(r,1,lr);
q=q->next;
}
else if (q==NULL)
{
dslk r=new node;
r->hs=p->hs;
r->mu=p->mu;


insert(r,1,lr);
p=p->next;
}
else
{
if (p->mu>q->mu)
{
dslk r=new node;
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


SVTH: Bùi Hữu Giáp
21
GVHD: Trịnh Thị Phú


r->hs=p->hs;
r->mu=p->mu;

insert(r,1,lr);
p=p->next;
}
else if (q->mu>p->mu)
{
dslk r=new node;
r->hs=q->hs;
r->mu=q->mu;

insert(r,1,lr);

q=q->next;
}
else
{
dslk r=new node;
r->hs=p->hs+q->hs;
r->mu=p->mu;

insert(r,1,lr);
p=p->next;
q=q->next;
}
}
}
xoa(l1);

×