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

Đại số đa thức và các phương án cài đặt

58 876 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 58
Dung lượng 336 KB

Nội dung

Đại số đa thức là một lĩnh vực quan trọng của đại số. Nó là công cụ để nghiên cứu các phương trình đại số trong toán học và nhiều lý thuyết của Toán học hiện đại.

Trang 1

LỜI MỞ ĐẦU

Đại số đa thức là một lĩnh vực quan trọng của đại số Nó là công cụ

để nghiên cứu các phương trình đại số trong toán học và nhiều lý thuyết của Toán học hiện đại Chúng ta đã tiếp xúc với các phép toán về đa thức ngay từ học trung học phổ thông Với học sinh phổ thông việc thực hiện các phép toán đa thức là rất cần thiết mặc dầu mất khá nhiều thời gian

Ngày nay tin học đã thâm nhập vào tất cả mọi hoạt động của xã hội loài người và máy tính điện tử trở thành công cụ đắc lực không chỉ giảm nhẹ lao động (kể cả lao động có trí tuệ) mà còn giúp thêm cho con người những năng lực mới mà trước đây chúng ta khó hình dung được Việc xây dựng một chương trình có thể thực hiện được các phép tính đa thức nhằm hiểu sâu hơn các vấn đề về cài đặt dữ liệu và các giải thuật thích hợp với các dữ liệu ấy Nó sẽ là một công việc có ích cho bản thân đồng thời có thể giúp các học sinh trung học tự kiểm tra các kết quả tính toán khi làm toán với các đa thức

Với ý nghĩa đó đề tài đã tiến hành nghiên cứu các vấn đề về đại số đa thức và các phương án cài đặt đa thức Nội dung của đề tài được trình bày trong năm chương, ngoài phần mở đầu, kết luận và tài liệu tham khảo Kết quả chính thu được của đề tài:

Chương 1: Đa thức và phép tính đa thức

Trong chương này trình bày đa thức như là một tổng đại số của các đơn thức một biến và các phép toán cơ bản trên tập hợp các

Trang 2

đa thức một biến (cộng, trừ, nhân, chia, giá trị của đa thức tại một điểm và khái niệm về ước chung lớn nhất của hai đa thức).

Chương 2: Cài đặt đa thức bằng mảng

Dựa vào định nghĩa cũng như các phép toán về đa thức đưa

ra được cách lưu trữ đa thức trong mảng là mảng một chiều gồm -1 -> n phần tử (n là một số cố định cho trước), trong đó phần tử đầu tiên lưu giá trị bậc của đa thức Từ đó cài đặt các phép toán: cộng, trừ, nhân, tính giá trị của đa thức và tìm ước chung lớn nhất của hai

đa thức trên mảng Tuy nhiên với cách lưu trữ này cũng có một số thuận lợi và khó khăn khi cài đặt chương trình

Chương 3: Cài đặt đa thức bẳng mảng con trỏ

Đa thức được lưu trữ bởi một bản ghi gồm hai trường, một trường để lưu bậc của đa thức trường còn lại là mảng con trỏ Trong quá trình cài đặt các phép tóan, khi cần thiết để lưu các hệ số của đa thức tương ứng với lũy thừa ta mới cấp phát biến động tương ứng với chỉ số của mảng con trỏ

Dựa trên lưu trữ đa thức bằng mảng con trỏ để thực hiện các phép toán đối với đa thức, cài đặt thuật toán cũng giống như đối với mảng

Chương 4: Cài đặt đa thức bảng danh sách liên kết

Các phương pháp lưu trữ đã trình bày ở trên dễ dàng cài đặt nhưng rất tốn bộ nhớ Để khắc phục bằng cách lưu trữ đa thức dưới dạng là một danh sách liên kết bao gồm các nút được liên kết với nhau

Trang 3

Mỗi nút là gồm ba trường: hệ số, lũy thừa và một con trỏ để lưu địa chỉ của nút tiếp theo trong danh sách, ngoài ra còn có một nút để chứa bậc của đa thức, nút này là nút đầu trong danh sách.

Lưu trữ bằng danh sách liên kết phức tạp hơn đối với mảng và mảng con trỏ, vì vậy việc thực hiện cài đặt các phép toán khó khăn hơn Bằng cách lưu trữ này cũng đã thực hiện thành công việc cài đặt các phép toán cộng, trừ, nhân, chia, tính giá trị và tìm ước chung lớn nhất của hai đa thức

Chương 5: Thiết kế đồ họa

Để giao diện thân thiện hơn với người sử dụng, đề tài còn nghiên cứu về kỹ thuật đồ họa trong Pascal trong việc tạo menu, dùng tiếng việt trong Pascal và có sử dụng ngắt 33h và các hàm của BIOS để điều khiển chuột

Đề tài được hoàn thành dưới sự hướng dẫn của thầy giáo Tiến

sỹ Nguyễn Trung Hòa Nhân dịp này em xin được bày tỏ lòng biết ơn sâu sắc tới thầy giáo hướng dẫn vì sự giúp đỡ và chỉ dẫn hết sức nhiệt tình, chu đáo

Em xin gửi lời cảm ơn tới Nhà trường, khoa Công nghệ Thông tin đã tạo điều kiện cho chúng em được học tập và rèn luyện trong suốt bốn năm học vừa qua

Em xin tỏ lòng biết ơn sâu sắc tới các thầy giáo, cô giáo, bạn

bè trong khoa đã giúp đỡ trong quá trình học tập và nghiên cứu

Trang 4

Đề tài không tránh khỏi nhiều thiếu sót Em kính mong nhận được sự chỉ bảo của các thầy giáo, cô giáo và sự góp ý của các bạn trong khoa.

Sinh viên Trần Thị Lê Na

CHƯƠNG 1: ĐA THỨC VÀ CÁC PHÉP TOÁN ĐA THỨC

Trang 5

- Nhấn mạnh ở đây rằng ta luôn đồng nhất biểu thức (1) với các biểu thức dẫn dắt từ (1), tức là tổng theo thứ tự tuỳ ý các đơn thức tham gia trong (1) Như vậy biểu thức viết theo thứ tự ngược lại với (1).

Ở đây nếu bậc của hai đa thức không bằng nhau ta viết thêm các số hạng với hệ số bằng không

Trang 6

f(x) - g(x) = (an - bn) xn + (an-1 - bn-1) xn-1 + + (a1 - b1)x + (a0 - b0)được gọi là hiệu của hai đa thức f(x) và g(x).

Ở đây nếu bậc của hai đa thức không bằng nhau ta viết thêm các số hạng với hệ số bằng không

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

Cho hai đa thức:

2.4) Phép chia hai đa thức

Giả sử f, g Є K[x] và g ≠ 0 khi đó f có thể viết duy nhất dưới dạng:(1) f = gq + r

Với q, r Є K[x] và degr < degq

Biểu thức (1) được gọi là phép chia có dư đa thức f(x) cho đa thức g(x) ≠ 0 Đa thức f(x) được gọi là đa thức bị chia, đa thức g(x) là đa thức chia, đa thức q(x) là thương còn đa thức r(x) là phần dư của phép

Trang 7

Nếu r(x) = 0 ta nói f(x) chia hết cho g(x), khi đó ta cũng nói g(x) là một ước của f(x).

2.5) Tính giá trị của đa thức.

Cho đa thức f(x) = anxn + an-1xn-1 + + a0

Với các hệ số của đa thức a0, a1, , an-1, an và x cho trước

Để tính giá trị của đa thức ta dùng thuật toán Horner

P = ( ((anx + an-1)x + an-2)x + + a1)x + a0, trong đó quá trình truy hồi được tiến hành như sau:

2.6) Ước chung lớn nhất của hai đa thức.

Nhắc lại rằng g Є K[x], g ≠ 0 được gọi là ước chung của f Є K[x] nếu

f chia hết cho g và ta viết f | g

Cho f, g, h Є K[x] Ta nói

+ h là ước chung của f và g nếu h | f và h | g

+ h là ước chung lớn nhất (UCLN) của f và g, nếu nó là ước chung của f

và g và chia hết cho mọi ước chung khác

Áp dụng thuật chia ECLIDE ta có thể tìm ước chung lớn nhất của hai

đa thức f và g không đồng thời bằng không

Trang 8

Thật vậy ta coi g ≠ 0 Chia f cho g ta được phần dư r1 Nếu r1 ≠ 0, ta chia g cho r1, được phần dư r2 Cứ tiếp tục vì bậc của các phần dư giảm dần nên tồn tại k ≥ 1 sao cho rk-1 | rk Ta sẽ kiêm lại khi đó rằng.

rk = (f, g)Thật vậy xuất phát từ đẳng thức rk-1 = rkhk+1

Suy ra rk | rk-2 và cũng vậy rk|rk-3 Cứ như vậy ta nhận được

rk|g và rk|fBây giờ nếu φ là một ước chung tuỳ ý của f và g thì φ | r1 và cũng vậy φ | r2 Cứ như thế ta lại nhận được φ | rk

CHƯƠNG 2: CÀI ĐẶT ĐA THỨC BẰNG MẢNG

1 Lý do cài đặt bằng mảng

Cấu trúc mảng là cấu trúc rất quen thuộc ở mọi ngôn ngữ lập trình Đặc biệt trong ngôn ngữ lập trình Pascal Nếu như chúng ta biết cách khai thác và sử dụng sẽ giúp chúng ta giải quyết được nhiều bài toán

1.1) Ưu điểm:

Trang 9

- Dùng mảng có lợi điểm là có thể đọc ngược, đọc xuôi một cách dễ dàng và truy xuất đến một phần tử mảng cũng hết sức nhanh chóng.

- Mảng được lưu trữ kế tiếp nên việc truy nhập vào phần tử của mảng được thực hiện trực tiếp dựa vào địa chỉ tính được, nên tốc

độ nhanh và đồng đều đối với mọi phần tử

2.2) Nhược điểm:

Mặc dầu có rất nhiều ứng dụng ở đó mảng có thể được sử dụng để thể hiện mối quan hệ về cấu trúc giữa các phần tử dữ liệu Tuy nhiên cũng lộ rõ một số nhược điểm như:

- Không có phép bổ sung phần tử hoặc loại bỏ phần tử được thực hiện đối với mảng

- Không tận dụng được các vùng nhớ có kích thước nhớ nhỏ

vì các thành phần của mảng cần được lưu trữ một cách kế tiếp

- Khi dùng mảng đều phải khai báo trước kích thước của mảng Trong khi đó chúng ta lại không thể dự đoán trước kích thước của dữ liệu vì thế thường xảy ra tình trạng: khai báo kích thước gây lãng phí bộ nhớ hoặc ngược lại khai báo thiếu thì máy bị treo không chạy nổi chương trình

Ví dụ cộng (3x^2 – x + 3)

Với (2x^2 + x - 3)

Để có kết quả là (5x^2)

Có thể dùng mảng một chiều để biểu diễn: hệ số của số hạng

xi sẽ được lưu trữ ở phần tử thứ i của mảng một chiều, ta quy ước

Trang 10

bậc của đa thức được lưu trữ ở phần tử -1 Như vậy phép cộng hai

đa thức chính là phép cộng hai mảng Cách biểu diễn đã đưa tới phép xử lý đơn giản Tuy nhiên ta cũng thấy một số nhược điểm:

Đa thức: 3x^2 – x + 3 được lưu trữ

Chỉ số mảng -1 0 1 2

Các hệ số tương ứng các lũy thừa

Đa thức: 2x^2 + x – 3 được lưu trữ

-1 0 1 2

Kết quả khi cộng hai đa thức trên:

-1 0 1 2

Ta thấy kết quả là một mảng mới biểu diễn nhiều phần

tử bằng 0, nó vẫn chiếm ô nhớ trong bộ nhớ, trong khi đó các giá trị

đó không sử dụng tới khuynh hướng này tạo ra sự lãng phí bộ nhớ rất rõ

2 Định nghĩa kiểu mảng.

Hệ số

Trang 11

Kiểu mảng (Array) là một kiểu dữ liệu có cấu trúc gồm một số

cố định các phần tử có cùng một kiểu dữ liệu đặt sau tên mảng Nói cách khác, dữ liệu kiểu mảng là một mảng (dãy) của nhiều dữ liệu thuộc một kiểu khác

Kiểu mảng có những đặc trưng sau:

- Các phần tử của mảng phải cùng kiểu, kiểu đó gọi là kiểu

cơ sở hay kiểu thành phần

- Các phần tử trong mảng có chỉ số, tức là vị trí số thứ tự của chúng trong mảng Kiểu của chỉ số phải là kiểu rời rạc Mỗi phần

tử có thể được truy nhập trực tiếp thông qua chỉ số

- Các chỉ số là các biểu thức nằm trong dấu ngoặc vuôn [] đặt ngay sau tên mảng và kiểu của chúng gọi là kiểu chỉ số

- Kiểu chỉ số là một kiểu nguyên hoặc miền con, giá trị của chỉ số có thể là âm hoặc dương

<Tên biến mảng> = Array[<chỉ số>] of <kiểu>;

4 Ý tưởng giải thuật

Trang 12

Bài toán đặt ra phải xử lý được các phép toán trên đa thức cài đặt

bằng mảng

Đặc trưng của đa thức là một bộ hệ số, mỗi hệ số tương ứng với số

luỹ thừa và bậc cuả đa thức

Trong đó:

maxbac là một số cố định cho trước

a[-1] = n là bậc của đa thức

4.1) Cộng hai đa thức

Cho hai đa thức f(x) và g(x) như sau:

f(x) = anxn + an-1xn-1 + + a0, an ≠ 0

g(x) = bmxm + bm-1xm-1 + + b0, bm ≠ 0

* Phép tính cộng hai đa thức được thực hiện như sau:

Ta biểu diễn từng đa thức dưới dạng mảng một chiều, trong đó phần

tử đầu tiên của mảng chính là bậc của đa thức, các phần tử còn lại chứa

Trang 13

Phép cộng hai đa thức được thực hiện là phép tính cộng lần lượt các

hệ số cùng luỹ thừa lại với nhau Ở đây nếu luỹ thừa của hai đa thức không bằng nhau ta viết thêm các số hạng với hệ số bằng không

Khi cộng hai đa thức với nhau ta sẽ được một đa thức mới, đa thức c với:

c[i] = a[i] + b[i] (i: 0->max(n,m))

4.2) Trừ hai đa thức

Thực hiện phép trừ đa thức a cho đa thức b

Tương tự như phép tính cộng hai đa thức, ta chỉ thay dấu cộng bởi dấu trừ

4.3) Nhân hai đa thức

Cho hai đa thức f(x) và g(x) như sau:

f(x) = anxn + an-1xn-1 + + a0, an ≠ 0

g(x) = bmxm + bm-1xm-1 + + b0, bm ≠ 0

+ Biểu diễn đa thức a:

Nhân hai đa thức thực hiện như sau:

For i:=0 to n+m do

Begin

c[i]:=0;

For k:=0 to i do

If (k<=n) and (i-k<m) then

c[i]:= c[i] + a[k]*b[i-k] ;

End;

4.4) Chia hai đa thức

Trang 14

Cho hai đa thức f(x) và g(x) như sau:

f(x) = anxn + an-1xn-1 + + a0, an ≠ 0

g(x) = bmxm + bm-1xm-1 + + b0, bm ≠ 0

Dựa vào định nghĩa phép chia hai đa thức đã trình bày ở chương 1 để thực hiện phép chia đa thức a cho đa thức b

4.5) Tính giá trị của đa thức

Áp dụng thuật toán Horner để tính giá trị của đa thức

4.6) Tìm ước chung lớn nhất của hai đa thức

Áp dụng thuật chia ECLIDE

Trang 15

Procedure TruDT(a,b:mang;Var c:mang);

5.3) Nhân hai đa thức.

Procedure NhanDT(a,b:mang; Var c:mang);

Trang 16

If (k<=n) and (i-k<=m) then

5.4) Chia hai đa thức

Procedure ChiaDT(a,b:mang; Var q,r:mang);

Trang 17

5.5) Tính giá trị của đa thức

Function GiaTri(x:real; a:mang):real;

5.6) Tìm ước chung lớn nhất của hai đa thức

Procedure UCLN(a,b:mang; var c:mang);

Var q,r:mang;

Begin

While b[-1]>=0 do

Trang 19

CHƯƠNG 3: CÀI ĐẶT ĐA THỨC BẰNG MẢNG ĐỘNG

1 Lý do cài đặt bằng mảng động.

Bài toán mà chúng ta đã cài đặt bằng mảng ở trên, biến mà chúng ta dùng là biến tĩnh, là biến có kích thước, kiểu dữ liệu cố định và địa chỉ của biến là không đổi Các biến này tồn tại trong suốt quá trình chạy chương trình Đó là lý do gây lãng phí bộ nhớ

Để khắc phục nhược điểm này ngôn ngữ lập trình pascal cho phép sử dụng biến động Biến động không được sinh ra lúc bắt đầu chương trình

mà sinh ra trong quá trình thực hiện chương trình Sau khi thực hiện xong có thể xoá khỏi bộ nhớ Nói cách khác, mặc dù gặp khai báo biến nhưng máy không cấp phát ô nhớ cho biến mà chỉ cấp phát khi nào biến cần tới Sau khi dùng xong có thể xoá để tiết kiệm bộ nhớ

Tuy nhiên biến động cũng có một số nhược điểm là không có địa chỉ nhất định nên không thể truy cập đến chúng được Để khắc phục nhược điểm nhà thiết kế phần mềm cung cấp cho chúng ta một loại biến đặc biệt, biến này chứa địa chỉ của biến động gọi là biến con trỏ Biến con trỏ cho phép thao tác trên các giá trị địa chỉ Mục đích của biến con trỏ giúp khai thác bộ nhớ, tiết kiệm bộ nhớ, an toàn dữ liệu

Trang 20

Var

<Tên biến con trỏ> : ^<Kiểu con trỏ>;

2.3) Lấy nội dung của một biến con trỏ đang trỏ đến

- Thủ tục Release(Var HeapPtr : Pointer);

Thủ tục cho phép xoá toàn bộ vùng nhớ Heap đã cấp phát tính từ điểm đã đánh dấu

Đặt con trỏ HeapPtr tới địa chỉ của biến động đã được đánh dấu xoá bằng thủ tục Mark trong Heap Khi thi hành thủ tục Release sẽ xoá tất

cả vùng nhớ nằm ở phía trên địa chỉ này Không xoá những vùng nhớ được các biến động sử dụng ở giữa Heap

Trang 21

dt = Record m: mang;

bac: shortint;

End;

Var

a: ^dt;

Trong đó: maxbac: một số cố định cho trước

a.bac: bậc của đa thức

a.m[0]^ a.m[a.bac]^: hệ số tương ứng với luỹ thừa

Dựa vào cách lưu trữ đó, ta cài đặt các phép toán của đa thức hoàn toàn giống như cách cài đặt đa thức bằng mảng

* Ví dụ minh họa thực hiện nhân hai đa thứcCho hai đa thức:

Trang 22

 Sau khi thực hiện phép nhân hai đa thức ta sẽ được một đa thức mới:

If n>m then max:=n else max:=m;

For i:=0 to max do

Trang 23

If b1.m[i]<>nil then

Begin

c1.m[i]^:=a1.m[i]^+b1.m[i]^;

If c1.m[i]^=0 then Begin

Trang 24

Begin

m:=a1.bac; n:=b1.bac;

If n>m then max:=n else max:=m;

For i:=0 to max do

Trang 25

While (c1.m[i]=nil) and (i>=0) do dec(i);

c1.m[i]^:=t;

(b1.m[ik]<>nil) then t:=t+a1.m[k]^*b1.m[i-k]^;

Trang 26

4.4) Chia hai đa thức

Procedure MCT_ChiaDT(a1,b1:dt; var q1,r1:dt);

Trang 29

CHƯƠNG 4: CÀI ĐẶT ĐA THỨC BẰNG DANH SÁCH

LIÊN KẾT

1 Lý do cài đặt bằng danh sách liên kết

Trang 30

Điểm mạnh của mảng là tốc độ truy nhập Do tất cả các phần

tử của mảng được bố trí cạnh nhau trong bộ nhớ của máy tính, nên ta

có thể đi thẳng đến bất kỳ phần tử nào thông qua chỉ số Với danh sách liên kết con đường đi dài hơn: Trước hết phải đi tới phần tử đầu tiên hoặc phần tử cuối cùng, rồi từ đó lần lượt chuyển từ phần tử này qua phần tử khác cho tới phần tử cần truy nhập Do vậy ở những tình huống mà tốc độ cần hơn bộ nhớ thì mảng hay hơn danh sách liên kết

Trong trường hợp cần thiết bộ nhớ hoặc cần thường xuyên thêm vào, bớt đi các phần tử thì danh sách liên kết tiện hơn mảng Để chèn một phần tử vào mảng ta phải di chuyển nhiều phần tử để dành chỗ cho phần tử mới Khi huỷ một phần tử cũng phải dồn các phần

tử bên dưới để đè lên phần tử cần huỷ Để làm điều này đối với danh sách liên kết ta chỉ cần thực hiện các phép thay đổi địa chỉ một cách thích hợp

2 Danh sách nối đơn

2.1) Nguyên tắc

Ở đây mỗi phần tử của danh sách được lưu trữ trong một phần tử nhỏ

mà ta gọi là nút Mỗi nút bao gồm một số từ máy kế tiếp Các nút này có thể nằm bất kỳ ở chỗ nào trong bộ nhớ Trong mỗi nút, ngoài phần thông tin ứng với một phần tử, còn có chứa địa chỉ của phần tử đứng sau

nó trong danh sách Qui các của mỗi nút có thể hình dung như sau:

Ngày đăng: 25/04/2013, 09:19

HÌNH ẢNH LIÊN QUAN

Hàm này cho hiện con trỏ của con chuột lên màn hình. Sau khi gọi hàm này, ta thấy con trỏ xuất hiện trên màn hình và nó sẽ đi theo  các di chuyển của con chuột. - Đại số đa thức và các phương án cài đặt
m này cho hiện con trỏ của con chuột lên màn hình. Sau khi gọi hàm này, ta thấy con trỏ xuất hiện trên màn hình và nó sẽ đi theo các di chuyển của con chuột (Trang 49)
3. Thiết kế màn hình chính - Đại số đa thức và các phương án cài đặt
3. Thiết kế màn hình chính (Trang 52)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w