1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tiểu luận Lập trình cấu trúc C++ "Xây dựng lớp đa thức"

34 4,8K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 563,04 KB

Nội dung

Đ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.Để định nghĩa một kiểu dữ liệu mới đồng thời 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 lớp đa thức”. Để 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.

Trang 1

- -

BÀI TIỂU LUẬN

HỌC PHẦN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Trang 2

- -

BÀI TIỂU LUẬN

HỌC PHẦN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Trang 3

Trong quá trình học tập tại trường, chú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ô Nguyễn Thị Xuân Đài – người đã trực tiếp giảng dạy chúng em học phần Lập trình hướng đối tượng C++ và cũng là 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 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/2014

Sinh viên thực hiện

Trang 4

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 3

2.1 Khái niệm đa thức một biến 3

2.2 Phép cộng trừ hai đa thức 3

2.3 Phép nhân hai đa thức 3

2.4 Phép chia có dư của hai đa thức 4

2.5 Đạo hàm của đa thức 4

2.6 Nguyên hàm của một đa thức 4

CHƯƠNG III: NỘI DUNG 6

3.1 Xây dựng lớp phân số 6

3.2 Xây dựng lớp đơn thức 8

3.3 Lưu trữ và chuẩn hóa đa thức 10

3.3.1 Lưu trữ 10

3.3.2 Chuẩn hóa 10

3.4 Xây dựng các hàm tạo cho đa thức 11

3.5 Xây dựng các toán tử cho đa thức 12

3.5.1 Nhóm các toán tử số học 12

3.5.2 Toán tử gán 16

Trang 5

3.5.6 Nhóm các toán tử khác 19

3.6 Hàm tính đạo hàm đa thức 19

3.7 Hàm tính nguyên hàm của đa thức 20

3.8 Hàm tính giá trị của đa thức 21

3.9 Nhóm các hàm khác của đa thức 22

3.10 Xây dựng giao diện chương trình 22

CHƯƠNG IV: KẾT LUẬN 27

4.1 Tóm tắt kết quả nghiên cứu 27

4.2 Đề xuất và hướng phát triển 27

TÀI LIỆU THAM KHẢO 29

Trang 6

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

Để định nghĩa một kiểu dữ liệu mới đồng thời 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 lớp đa thức” Để 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 định nghĩa một kiểu dữ liệu mới đồng thời 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

Trang 7

- Tổ chức lưu trữ một đa thức một biến cụ thể

- Chuẩn hóa đa thức theo đúng những quy tắc trong toán học

- Xây dựng hàm tạo cho lớp

- Xây dựng các toán tử cho lớp

- Xây dựng hàm tính đạo hàm của một đa thức

- Xây dựng hàm tính nguyên hàm của một đa thức

- Xây dựng giao diện cho chương trình

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 lớp đa thức và một chương trình demo 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

Lớp đa thức và 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

Trang 8

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

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)

Đặt Δx = x − x0 thì x = x0 + Δx Δx được gọi là số gia đối số

Đặt Δy = f(x) – f(x0) Δ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 x0 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

2.6 Nguyên hàm của một đa thức

Trang 10

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 11

CHƯƠNG III: NỘI DUNG 3.1 Xây dựng lớp phân số

Trong chương trình, chúng tôi đã xây dựng lớp phân số trong thư viện

fraction.h với nội dung như sau:

class fraction

{

long nume, deno;

long ucln(long a, long b);

friend fraction operator +(fraction const &a, fraction const &b);

friend fraction operator -(fraction const &a, fraction const &b);

friend fraction operator *(fraction const &a, fraction const &b);

friend fraction operator /(fraction const &a, fraction const &b);

fraction operator ++();

fraction operator ();

fraction operator ++(int);

fraction operator (int);

fraction operator +=(const fraction &f);

fraction operator -=(const fraction &f);

fraction operator *=(const fraction &f);

fraction operator /=(const fraction &f);

fraction operator ^=(long exp);

friend fraction operator ^(const fraction &f, long exp);

Trang 12

void operator =(const fraction &f);

friend long operator ==(const fraction &f1, const fraction &f2);

friend long operator !=(const fraction &f1, const fraction &f2);

friend long operator >(const fraction &f1, const fraction &f2);

friend long operator <(const fraction &f1, const fraction &f2);

friend long operator >=(const fraction &f1, const fraction &f2);

friend long operator <=(const fraction &f1, const fraction &f2);

friend istream &operator >>(istream &in, fraction &f);

friend ostream &operator <<(ostream &out, const fraction &f);

- long get_nume() và long get_deno() lần lượt là các hàm thành viên

dùng để lấy ra giá trị của tử số và mẫu số với kết quả được trả về thông

qua lời gọi hàm

- fraction(long nu=0, long de=1) là hàm tạo một phân số từ hai đối nu

và de, fraction(fraction const &f) là hàm tạo có chức năng sao chép giá trị của phân số f vào giá trị của phân số đang được con trỏ this trỏ tới

- fraction operator -() là toán tử dùng để đổi dấu của phân số (nhân giá trị của phân số với -1)

- operator float() và operator long() là hai toán tử dùng để chuyển đổi giá trị của phân số sang các kiểu tương ứng là float và long

Trang 13

- fraction operator ++(), fraction operator (), fraction operator ++(int), fraction operator (int) là các toán tử dùng để tăng giảm giá trị của phân số đi 1

- void operator =(const fraction &f) là toán tử dùng để gán cho đa thức đang được con trỏ this trỏ tới giá trị của phân số f

- Các toán tử +, -, *, / lần lượt dùng để cộng, trừ, nhân, chia hai phân số cho nhau

- Các toán tử +=, -=, *=, /= lần lượt dùng để cộng, trừ, nhân, chia phân

số đang được con trỏ this trỏ tới một phân số khác

- Hai toán tử ^ và ^= lần lượt dùng để lũy thừa phân số được trỏ tới bởi con trỏ this với đối số exp

- friend istream &operator >>(istream &in, fraction &f) và friend ostream &operator <<(ostream &out, const fraction &f) là hai toán tử dùng để nhập và xuất một phân số

3.2 Xây dựng lớp đơn thức

Lớp đơn thức được chúng tôi xây dựng trong thư viện monomial.h với nội

dung như sau:

monomial(long co_nume=0, long co_deno=1, long ex=0);

monomial(const fraction &co, int ex=0);

~monomial();

long set_monomial(long co_nume=0, long co_deno=1, long ex=0);

fraction get_coe() const;

long get_exp() const ;

int set_coe(const fraction &co);

int set_exp(const long &ex);

// -

monomial operator -();

Trang 14

friend monomial operator +(const monomial &m, const fraction &cofm); friend monomial operator -(const monomial &m, const fraction &cofm); friend monomial operator *(const monomial &m1, monomial const &m2); monomial operator ++();

monomial operator ();

monomial operator *=(const monomial &m);

monomial operator +=(const fraction &cofm);

monomial operator -=(const fraction &cofm);

monomial operator ^=(long exp);

friend monomial operator ^(const monomial &f, long exp);

void operator =(const monomial &m);

friend long operator ==(const monomial &m1, const monomial &m2);

friend long operator !=(const monomial &m1, const monomial &m2);

friend long operator >(const monomial &m1, const monomial &m2);

friend long operator <(const monomial &m1, const monomial &m2);

friend long operator >=(const monomial &m1, const monomial &m2);

friend long operator <=(const monomial &m1, const monomial &m2);

friend istream &operator >>(istream &in, monomial &e);

friend ostream &operator <<(ostream &out, const monomial &e);

- long set_monomial(long co_nume=0, long co_deno=1, long ex=0) là hàm thành viên dùng để thiết lập giá trị cho phân số co_nume ứng

Trang 15

mũ của đơn thức Khi co_deno = 0, đơn thức sẽ nhận giá trị 0, ngược lại thì chuẩn hóa phân số và gán giá trị cha đơn thức tương ứng

- fraction get_coe() const và long get_exp() const lần lượt là hai hàm thành viên dùng để lấy ra giá trị hệ số và số mũ của phân số

- int set_coe(const fraction &co) và int set_exp(const long &ex) lần

lượt là hai hàm thành viên dùng thiết lập giá trị hệ số và số mũ cho

- Các toán tử còn lại được dùng để so sánh giá trị của hai đơn thức với

vector <monomial> pol;

Trong vector, mỗi phần tử ứng với mỗi đơn thức thành viên trong đa thức 3.3.2 Chuẩn hóa

Việc chuẩn hóa đa thức được hàm thành viên void standize() đảm nhận

Trang 16

Hàm này làm những công việc sau:

- Sắp xếp các đơn thức trong vector theo thứ tự giảm dần độ lớn của các đơn thức

- Nếu đơn thức nào đó có hệ số bằng 0 thì loại bỏ đơn thức này ra khỏi

vector

- Nếu đơn thức hiện hành và đơn thức nằm ngay phía sau trong vector

có cùng số mũ thì thay thế hai đơn thức này bằng một đơn thức khác

có hệ số là tích của hai đơn thức đó, số mũ là tổng số mũ của hai đơn thức đó

- Sau quá trình ở trên, nếu vector rỗng (không còn một đơn thức thành

viên nào trong vector) thì chèn một đơn thức có giá trị 0 vào vector

Trang 17

Trong lớp đa thức, chúng tôi đã xây dựng 3 hàm tạo:

polynomial(const monomial &m=0);

polynomial(const vector <monomial> &p);

polynomial(const polynomial &p);

- polynomial(const polynomial &p) là hàm dùng để sao chép giá trị của

đa thức p cho đa thức đang được trỏ tới bởi con trỏ this Hàm này chỉ đơn giản gán giá trị của vector pol của hai đa thức cho nhau

3.5 Xây dựng các toán tử cho đa thức

3.5.1 Nhóm các toán tử số học

Nhóm các toán tử này bao gồm:

friend polynomial operator +(const polynomial &p1, const polynomial &p2);

friend polynomial operator -(const polynomial &p1, const polynomial &p2);

friend polynomial operator *(const polynomial &p1, const polynomial &p2);

friend polynomial operator /(const polynomial &p1, const polynomial &p2);

friend polynomial operator %(const polynomial &p1, const polynomial &p2);

Trong đó:

 Toán tử cộng

Toán tử này được định nghĩa như sau:

polynomial operator +(const polynomial &p1, const polynomial &p2)

Trang 19

Toán tử này làm những công việc như sau:

- Khai báo một vector rt dùng để lưu trữ kết quả tạm thời, có kiểu dữ liệu là monomial

- Khai báo hai biến i, j có kiểu nguyên lần lượt dùng để duyệt hai đa thức p1 và p2

- Thực hiện công việc cộng hai đa thức với tư tưởng như sau: Nếu i có giá trị lớn hơn chỉ số của đơn thức cuối cùng của p1 thì thêm đơn thức

có chỉ số j của p2 vào rt rồi sau đó tăng j lên 1; ngược lại, nếu j có giá trị lớn hơn chỉ số của đơn thức cuối cùng của p2 thì thêm đơn thức có chỉ số i của p1 vào rt rồi sau đó tăng i lên 1; ngược lại, nếu đơn thức

có chỉ số i của p1 và j của p2 có cùng số mũ thì thêm đơn thức có giá trị là tổng của p1[i] và p2[j] vào rt rồi tăng cả i và j lên 1, ngược lại thêm đơn thức có số mũ lớn hơn vào rt rồi sau đó tăng chỉ số lên 1

Toán tử này được định nghĩa một cách tương tự như toán tử cộng, chỉ khác

ở phép toán đại số được thực hiện trong toán tử là trừ thay vì cộng

 Toán tử nhân

Toán tử này được định nghĩa như sau:

polynomial operator *(const polynomial &p1, const polynomial &p2)

{

vector <monomial> rt;

for (int i=0; i<p1.size(); i++)

for (int j=0; j<p2.size(); j++)

rt.push_back(p1[i]*p2[j]);

polynomial result(rt);

return result;

}

Trang 20

Toán tử này được khai báo là bạn của lớp, dùng để nhân hai đa thức p1 và

p2 với nhau, đa thức kết quả được trả về qua lời gọi hàm

Toán tử này thực hiện những công việc sau:

- Khai báo vector rt có kiểu monomial dùng để lưu trữ tạm thời đa thức

- Trả về đa thức result thông qua lời gọi hàm

 Toán tử chia lấy phần nguyên

polynomial operator /(const polynomial &p1, const polynomial &p2)

Ngày đăng: 24/11/2014, 10:07

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w