Tải bản đầy đủ (.doc) (14 trang)

Tiểu luận LẬP TRÌNH SYMBOLIC LẬP TRÌNH TRÊN MAPLE

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 (374.31 KB, 14 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
________ ________
BÀI THU HOẠCH MÔN HỌC
Môn: LẬP TRÌNH SYMBOLIC
LẬP TRÌNH TRÊN MAPLE
Học viên thực hiện:
CH1101154
TRẦN THỊ TƯỜNG VI
TP. HCM, năm 2013
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Mở đầu
Được biết đến như là một hệ thống tính toán trên các biểu thức đại số, khả
năng minh họa toán rất mạnh mẽ, cùng với việc cài đặt đơn giản và liên tục nâng cấp,
Maple trở thành sự lựa chọn sử dụng của nhiều nước trên thế giới trong lĩnh vực toán
học.
Một số tính năng cơ bản của Maple như sau:
- Là một hệ thống tính toán trên các biểu thức đại số;
- Có thể thực hiện hầu hết các phép toán cơ bản trong chương trình toán học phổ
thông và đại học;
- Cung cấp các công cụ minh họa hình học thuận tiện như: Vẽ đồ thị tĩnh hoặc
động của các đường, các mặt được cho bởi các hàm tùy ý trong nhiều hệ trục tọa độ
khác nhau;
- Ngôn ngữ lập trình đơn giản và mạnh mẽ có khả năng tương tác với các ngôn
ngữ khác như Latex, Word, HTML,
- Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học
tương tác trực tiếp;
- Một chương trình trợ giúp hiệu quả cho giảng viên và sinh viên trong việc dạy
và học.
Trong nội dung của bài thu hoạch này, đứng với phương diện người lập trình, em


chỉ xin trình bày cách lập trình trên Maple và áp dụng những kiến thức thu nhặt được
để giải vài bài toán nhỏ.
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 1 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
MỤC LỤC
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG 1
TP. HCM, năm 2013 1
Mở đầu 1
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG 2
PHẦN I : LÝ THUYẾT 2
I. TỔNG QUAN 2
I.1. Giới thiệu về Maple 2
I.2. Giới thiệu một số hàm cơ bản 3
I.3. Khái niệm biến số, hằng số 3
II. CÁC LỆNH LẬP TRÌNH CƠ BẢN 4
II.1. Vòng lặp While 4
II.2. Vòng lặp for 4
II.3. Lệnh điều kiện if 5
II.4. Lệnh break 6
II.5. Lệnh next 6
II.6. Sử dụng các hàm RETURN, ERROR 7
III. CÁCH THIẾT LẬP MỘT CHU TRÌNH 7
III.1. Giới thiệu 7
III.2. Khai báo chu trình 8
III.3. Tham biến 8
III.4. Phạm vi các biến (biến toàn cục, biến cục bộ và tham biến) 8
III.5. Định giá trên các biến 9
III.6. Các chức năng khác 9
PHẦN II : ÁP DỤNG 11

I. THUẬT TOÁN QUICKSORT 11
II. THUẬT GIẢI SUY DIỄN TIẾN 12
Tài liệu tham khảo 13
PHẦN I : LÝ THUYẾT
I. TỔNG QUAN
I.1. Giới thiệu về Maple
Maple là một phần mềm tính toán do hãng Maple Soft, một bộ phận
chủ yếu của liên hợp công ty Waterloo Maple phát triển.
Cho đến nay Maple đã được phát triển qua nhiều phiên bản khác
nhau và ngày càng hoàn thiện.
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 2 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Với phần mềm Maple, chúng ta có thể:
- Thực hiện các tính toán với khối lượng lớn, với thời gian nhanh
và độ chính xác cao.
- Sử dụng các gói chuyên dụng của Maple để giải quyết các bài
toán cụ thể như: vẽ đồ thị (gói plot), hình học giải tích (gói
geometry), đại số tuyến tính (gói linalg), …
- Thiết kế các đối tượng 3 chiều
- Và dùng nó như một ngôn ngữ lập trình chuyên cho toán học
I.2. Giới thiệu một số hàm cơ bản
Ta đi qua một vài hàm để làm quen với maple, cần tìm hiểu thêm để có thể lập trình
tốt.
- Tính toán số học thông dụng
Các phép toán số học: +, -, *, /
Lũy thừa: ^, giai thừa: x!
Logarit: ln(x), log[a](b), exp(x)
Các hàm lượng giác: sin(x), cos(x), tan(x), cot(x),
Một số hàm khác: abs(x) - |x|, sqrt(x) - căn bậc 2 của x

> (-10+5^2)*(4-sqrt(36)):
- Tính toán với độ chính xác theo yêu cầu
Lệnh evalf
- Cú pháp 1: evalf(bieu_thuc) - tính toán chính xác giá trị của biểu thức và
biểu diễn kết quả với mặc định là 10 chữ số.
- Cú pháp 2: evalf(bieu_thuc, k) - tính toán chính xác giá trị của biểu thức
và biểu diễn kết quả với k chữ số.
> evalf(Pi,500):
- Giải phương trình nghiệm nguyên
Lệnh isolve:
- Cú pháp 1: isolve(phuong_trinh/he_phuong_trinh);
- Cú pháp 2:isolve(phuong_trinh/he_phuong_trinh,<danh_sach_tham_so>);
> isolve({x+y=36,2*x+4*y=100}):
> isolve(x+y=5,{a,b,c}):
- Tính đạo hàm
Lệnh Diff
Cú pháp: diff(ham_so, bien, bien);
> f := x->x^2*sqrt(x^2+1):
> Diff(f(x),x):
I.3. Khái niệm biến số, hằng số
- Trong Maple, biến số được sử dụng thoải mái mà không cần khai
báo, định nghĩa trước
- Biến số, hằng số được đặt tên thỏa mãn một số quy tắc sau:
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 3 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
+ Không bắt đầu bằng chữ số
+ Không chứa khoảng trắng và một số ký tự đặc biệt như:
%,^,&,*,$,#,
+ Không được trùng với tên một số hàm và lệnh của Maple:

sin, cos, ln, min, max,
- Một biến số sẽ trở thành hằng số ngay khi nó được gán cho một giá
trị nào đó.
- Nếu muốn biến một hằng số trở lại biến số, ta dùng phép gán:
ten_bien:='ten_bien';
II. CÁC LỆNH LẬP TRÌNH CƠ BẢN
II.1. Vòng lặp While
Cấu trúc cú pháp:
While <điều kiện> do <dãy lệnh> od;
Chức năng:
- Vòng lặp while cho phép lặp chuỗi các câu lệnh giữa do và od khi mà điều
kiện condition vẫn còn đúng (tức là biểu thức điều kiện cho giá trị true). Điều
kiện condition được kiểm tra ngay tại đầu mỗi vòng lặp, nếu nó thỏa mãn (giá
trị của nó là đúng) thì các câu lệnh bên trong được thực hiện, sau đó lại tiếp tục
kiểm tra điều kiện condition cho đến khi điều kiện không còn thỏa mãn nữa.
Vòng lặp while thường được sử dụng khi số lần lặp một hay một chuỗi biểu
thức là không xác định rõ, đồng thời ta muốn các biểu thức đó cần được lặp
trong khi một điều kiện nào đó còn được thỏa mãn.
- Điều kiện condition trong vòng lặp phải là một biểu thức boolean, tức là giá trị
của nó chỉ có thể là đúng hoặc sai, nếu không thì sẽ sinh ra lỗi.
- Trong trường hợp muốn thoát ra khỏi vòng lặp ngay từ trong giữa vòng lặp, ta
có thể thực hiện bằng cách dùng câu lệnh RETURN, break hoặc quit.
- Chú ý rằng vòng lặp while- do- od; không bắt buộc phải nằm trên nhiều dòng
lệnh nhưng người ta thường viết trên nhiều dòng để câu lệnh dễ đọc và dễ hiểu
hơn.
- Vòng lặp While cho phép lặp chuỗi các câu lệnh nằm giữa do và od khi mà
điều kiện vẫn còn đúng.
II.2. Vòng lặp for
Cấu trúc cú pháp:
for name from start by change to finish

do
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 4 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
statement sequence
od;
Hoặc dạng phát biểu khác:
for name in expression
do
statement sequence
od;
Chức năng:
- Vòng lặp for được dùng để lặp một chuỗi các biểu thức được đặt giữa do và
od, mỗi lần lặp tưng ứng với một giá trị phân biệt của biến chỉ số name đứng
sau từ khoá for. Ban đầu, giá trị start được gán cho biến chỉ số. Nếu giá trị của
biến name nhỏ hơn hay bằng giá trị finish thì chuỗi lệnh nằm giữa do và od
được thực hiện, sau đó biến name được gán giá trị tiếp theo bằng cách cộng
thêm vào nó giá trị change (name:=name+change). Sau đó, biến name được so
sánh với finish để quyết định xem việc thực hiện chuỗi lệnh có được tiếp tục
nữa không. Quá trình so sánh biến chỉ số name và thực hiện chuỗi lệnh được
lặp liên tiếp cho đến khi giá trị của biến name lớn hơn giá trị finish. Giá trị
cuối cùng của biến name sẽ là giá trị vượt quá finish đầu tiên. Chú ý. Nếu các
từ khóa from start hoặc by change bị bỏ qua thì mặc định from 1 và by 1 được
dùng.
- Vòng lặp for- in- do- od thực hiện việc lặp với mỗi giá trị mà biến chỉ số name
lấy từ biểu thức expression đã cho. Chẳng hạn vòng lặp này được sử dụng hiệu
quả khi mà giá trị của biến name là một phần tử của một tập hợp hoặc danh
sách.
- Trong trường hợp muốn thoát khỏi từ giữa vòng lặp, ta có thể dùng các câu
lệnh break, quit, RETURN giống như trong vòng lặp while.

II.3. Lệnh điều kiện if
Cấu trúc cú pháp:
if condition then
statement sequence
| elif condition then statement sequence |
| else statement sequence |
fi;
Ghi chú: Các câu lệnh trong cặp dấu ngoặc đứng là các lệnh tuỳ chọn. Thí dụ: biểu
thức | statement | cho biết rằng statement là một câu lệnh tuỳ chọn.
Chức năng:
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 5 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
- Nếu bạn muốn một dãy biểu thức được thực hiện khi điều kiện nào đó được
thoả mãn và một dãy biểu thức khác được thực hiện nếu trái lại thì có thể dùng
câu lệnh if- then- else- fi. Trong câu lệnh trên, nếu điều kiện condition là đúng
thì chuỗi biểu thức đứng sau then được thực hiện, nếu trái lại thì điều kiện
condition sau từ khoá elif sẽ được kiểm tra, nếu nó đúng thì chuỗi lệnh tương
ứng sau then được thực hiện, cứ tiếp tục cho đến khi các điều kiện condition
đều không thỏa mãn, thì các biểu thức sau lệnh else được thực hiện.
- Lưu ý rằng cấu trúc lệnh (tuỳ chọn) elif then được lặp lại với số lần tuỳ ý.
Từ khoá elif là dạng viết tắt của else if.
- Các biểu thức điều kiện condition được sử dụng trong câu lệnh if phải được tạo
thành từ các bất đẳng thức, các đẳng thức (các phép toán quan hệ), các biến số,
các phép toán logic, các hàm có giá trị trả lại là giá trị logic. Nếu trái lại thì sẽ
gây ra lỗi.
II.4. Lệnh break
Cấu trúc cú pháp:
break
Chức năng:

- Trong lúc vòng lặp while/for đang được thực hiện, nếu lệnh break được gọi thì
chương trình sẽ thoát ngay lập tức ra khỏi vòng lặp while/for tận trong cùng
nhất mà có chứa lệnh break (vì cũng có thể có nhiều vòng lặp while/for được
lồng nhau). Một ví dụ khá điển hình trong việc sử dụng lệnh break là trong quá
trình tìm kiếm search, rõ ràng là bạn sẽ muốn dừng quá trình quét lại ngay khi
bạn tìm thấy đối tượng cần tìm. Khi đó, ngay tại thời điểm tìm thấy, bạn dùng
lệnh break để nhảy ra khỏi vòng lặp tìm kiếm. Trước lệnh break thường có một
câu lệnh điều kiện if then
- Nếu lệnh break dùng ngoài các vòng lặp while/for thì sẽ sinh ra lỗi. Chú ý:
break không phải là từ khoá (từ dành riêng cho Maple), vì vậy ta có thể gán giá
trị cho biến có tên là break mà không hề sinh ra lỗi (mặc dù điều này là không
nên).
II.5. Lệnh next
Cấu trúc cú pháp:
next
Chức năng:
- Cũng giống như câu lệnh break, lệnh next được thực hiện trong vòng lặp
while/for với mục đích bỏ qua một số lệnh bên trong vòng lặp để nhảy qua lần
lặp tiếp theo. Khi gặp lệnh next trong vòng lặp, chương trình bỏ qua các lệnh
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 6 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
tiếp theo của vòng lặp tận cùng nhất chứa next cho đến khi gặp từ khoá xác
định kết thúc vòng lặp (ở đây là lệnh od). Đến đây vòng lặp tiếp tục nhảy qua
lần lặp tiếp theo (nếu có thể) bằng cách tăng chỉ số hoặc kiểm tra điều kiện để
quyết định xem có nên thực hiện vòng lặp tiếp theo.
- Lệnh next sinh ra lỗi nếu nó được gọi ngoài vòng lặp while/for. Tương tự như
break, next cũng không phải là từ khóa, do đó ta hoàn toàn có thể gán cho next
một giá trị (xem như next là một biến). Ngay trước lệnh next cũng thường là
một câu lệnh điều kiện if then

II.6. Sử dụng các hàm RETURN, ERROR
- Hàm RETURN được sử dụng để cho giá trị hàm trước khi thoát khỏi chu trình.
Nếu không có lệnh RETURN, chu trình tự động cho kết quả của phép tính cuối
cùng trong chu trình.
- Hàm ERROR được sử dụng để đưa thông điệp lỗi ra màn hình từ bên trong
chu trình.
III. CÁCH THIẾT LẬP MỘT CHU TRÌNH
III.1. Giới thiệu
- Maple là một ngôn ngữ lập trình hướng chu trình (procedure). Chúng ta có thể
làm việc với Maple bằng hai chế độ khác nhau: Chế độ tương tác trực tiếp
thông qua việc nhập từng lệnh đơn lẻ ngay tại dấu nhắc lệnh của Maple và
nhận được ngay kết quả của lệnh đó. Chế độ chu trình được thực hiện bằng
cách đóng gói một dãy các lệnh xử lí cùng một công việc vào trong một chu
trình (procedure) duy nhất, sau đó ta chỉ cần gọi chu trình này và Maple tự
động thực hiện các lệnh có trong chu trình đó một cách tuần tự và sau đó trả lại
kết quả cuối cùng.
- Maple chứa một lượng rất lớn các hàm tạo sẵn đáp ứng cho những yêu cầu tính
toán khác nhau trong nhiều lĩnh vực. Các hàm này được lưu trữ trong các gói
chu trình (package) và người sử dụng có thể dễ dàng gọi đến mỗi khi cần thiết.
Tuy nhiên, người dùng Maple có thể tự tạo cho riêng mình những gói chu trình
cũng như có thể trao đổi dùng chung những gói chu trình nào đấy, phục vụ cho
công việc mang tính đặc thù riêng của mình.
- Các khái niệm cơ bản cần phải nắm vững để tạo ra một chu trình (procedure)
là: Cấu trúc proc() end; cùng với các khai báo trong cấu trúc này (global,
local, option, ).
- Các cấu trúc dữ liệu và các hàm có liên quan (dãy-sequence, tập hợp-set, danh
sách-list, mảng-array, bảng-table).
- Các hàm lập trình cơ bản (đã nêu ở trên) và các hàm liên quan đến việc xử lí
dữ liệu (eval, evalf, subs, map, convert, ).
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 7 -

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
III.2. Khai báo chu trình
Lời gọi khai báo một chu trình:
procedure_name:=proc(parameter_sequence)
[local local_sequence]
[global global_sequence]
[options options_sequence]
statements_sequence;
end;
Giải thích các khai báo:
parameter_name: Là một dãy các kí hiệu, ngăn cách nhau bởi các dấu phẩy, chứa tên
các tham biến truyền cho chu trình.
local_sequence: Là một dãy các tên được khai báo là biến cục bộ trong chu trình, nó
chỉ có giá trị sử dụng trong phạm vi chu trình đang xét (local được sử dụng để khai
báo cho các biến chỉ sử dụng bên trong một chu trình).
global_sequen: Dãy các tên biến toàn cục có giá trị sử dụng ngay cả bên ngoài chu
trình.
options_sequence: Dãy các tuỳ chọn cho một chu trình.
statements_sequence: Dãy các câu lệnh do người lập trình đưa vào.
III.3. Tham biến
- Tham biến (parameter) là các biến được đặt giữa hai dấu ngoặc trong biểu thức
proc( ). Tham biến được dùng để nhận dữ liệu truyền cho chu trình khi gọi
chu trình đó. Ví dụ ta có thể khai báo chu trình tính tổng của 2 số
[tong:=proc(x,y) x+y; end.] thì khi gọi chu trình này để tính tổng của hai số 10
và 5 ta phải truyền các dữ liệu này cho các tham biến (cho x nhận giá trị là 10,
y nhận giá trị là 5), tức là tại dấu nhắc lệnh ta phải viết tong(10, 5); và sau khi
thực hiện chu trình trả lại kết quả là 15.
- Tham biến có tính cục bộ: chúng chỉ được sử dụng bên trong chu trình đã được
khai báo, bên ngoài chu trình này chúng không mang ý nghĩa gì.

- Kiểu của tham biến có thể được khai báo trực tiếp.
III.4. Phạm vi các biến (biến toàn cục, biến cục bộ và tham
biến)
- Biến toàn cục được khai báo sau từ khoá global trong khai báo chu trình.
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 8 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
- Biến toàn cục được khai báo bên trong một chu trình, nhưng có phạm vi giá trị
trong toàn bộ chương trình, tức là bên ngoài phạm vi của chu trình mà nó được
khai báo trong đó.
- Biến cục bộ được khai báo sau từ khoá local trong khai báo chu trình.
- Biến cục bộ chỉ có giá trị bên trong chu trình mà nó được khai báo. Ngoài chu
trình này nó không mang ý nghĩa gì.
- Tham biến: Cũng giống như biến cục bộ, các tham biến chỉ có giá trị bên trong
phạm vi của chu trình mà nó được khai báo. Sau khi chu trình kết thúc, chúng
không còn giá trị.
- Tham biến còn được sử dụng để trả lại kết quả, như các ngôn ngữ lập trình
truyền thống. Ngoài ra, do Maple có những hàm có khả năng trả lại nhiều hơn
một giá trị. Ta có thể gộp các giá trị này vào một danh sách để trả lại như một
phần tử.
III.5. Định giá trên các biến
Định giá tên hàm và tham biến
Như đã đề cập trước đây, các tên biến trong một biểu thức được Maple định giá trước
khi thực hiện các phép tính trên chúng. Đối với việc thực hiện các hàm cũng tương tự
như vậy. Trước tiên là tên chu trình được định giá. Sau đó lần lượt đến các đối số
trong danh sách các đối số truyền cho chu trình (được định giá từ trái sang phải). Nếu
tên chu trình được định giá trỏ đến một chu trình, thì chu trình ấy được thực thi trên
các đối số đã được định giá. Tuy nhiên vẫn có một số chu trình ngoại lệ: đó là các
hàm eval, assigned, seq.
Định giá biến cục bộ và biến toàn cục

Các biến cục bộ và tham biến truyền cho chu trình được định giá một cấp (định giá
một lần), còn các biến toàn cục thì được định giá hoàn toàn (full evaluation). Hàm
eval( ) được dùng để ép định giá hoàn toàn cho biến cục bộ và tham biến, và định
giá một mức cho các biến toàn cục.
III.6. Các chức năng khác
Muốn in ra màn hình các "vòng lệnh ẩn" ta sử dụng biến printlevel. Đây là cách đơn
giản nhất để xem xét các quá trình thực hiện lệnh. Khi printlevel được gán giá trị âm
thì không hiện gì cả, nếu được gán giá trị 0 thì chỉ có kết quả của các câu lệnh được
hiện ra.
Dò từng lệnh trong chu trình:
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 9 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
trace(f)
trace(f, g, h, . . .)
Tham số: Các hàm f, g, h, là các hàm cần chạy từng bước.
Lệnh trace cho in cách thức hiện từng lệnh của một chu trình ra màn hình.
Lệnh dò trace() hoạt động tương tự như khi ta gán cho biến printlevel một số đủ lớn
để có thể hiện ra màn hình tất cả các câu lệnh cũng như điểm vào và điểm ra của hàm
mà ta đang thực hiện.
Trong suốt quá trình thực hiện, các điểm vào, các kết quả của các câu lệnh, các điểm
ra của hàm cần dò được hiện ra màn hình. Các tham biến được hiện ra ở điểm vào chu
trình, giá trị trả lại của hàm được hiện ra ở điểm cuối chu trình.
Chú ý: Không thể dò từng bước một số hàm có quy tắc định giá đặc biệt, bao gồm:
assigned, eval, evalhf, evalf, evaln, traperror, seq, userinfo.
Xem mã nguồn một chu trình:
showstat(procName)
showstat(procName, statRange)
Tham số:
• procName: Tên của chu trình cần hiển thị mã nguồn.

• statRange: Phạm vi các dòng lệnh cần được hiển thị (từ dòng nào đến dòng
nào).
Phần lớn các lệnh trong Maple đều được viết bằng ngôn ngữ Maple, do đó chúng ta
có thể đọc được mã nguồn của những lệnh này. Maple cung cấp hàm showstat() để
hiện đoạn chương trình là mã nguồn của các lệnh trên. Nhờ có hàm này mà người học
lập trình trên Maple có thể dễ dàng học được cách thức cũng như đặc trưng ngôn ngữ
bằng cách nghiên cứu phương thức mà các lệnh của Maple thực hiện (thông qua việc
xem mã nguồn của chúng). Ta có thể hiển thị một phần mã nguồn của các chu trình
bằng cách định rõ phạm vi của các dòng cần thể hiện.
Chúng ta cũng có thể sử dụng các hàm print() và interface() để đọc mã nguồn của các
hàm trong Maple. Thông thường thì Maple không hiển thị phần thân của các chu trình
đó nếu ta cho hiển thị chúng. Muốn làm điều này, ta phải gọi lệnh interface() với tham
số verbosepro =2 trước, sau đó dùng lệnh print thì ta có thể xem được thân của chu
trình.
Chặn bắt lỗi
traperror(expr1, expr2, )
Tham số: expr1, expr2, là các biểu thức.
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 10 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Maple sử dụng biến lasterror để lưu thông báo lỗi của lỗi xảy ra mới nhất trong quá
trình tính toán. Ta có thể sử dụng biến này giống như bất cứ biến nào khác trong
Maple, cụ thể là ta có thể gán giá trị bất kì nào đó cho nó, tính toán trên biến này và
ghi giá trị nó đang lưu trữ ra màn hình. Tuy nhiên khi xảy ra lỗi, Maple tự động gán
cho biến này xâu kí tự thông báo lỗi mà hàm ERROR() sẽ hiển thị ra màn hình.
Cùng với biến lasterror, hàm traperror() được sử dụng để chặn bắt một lỗi nào đó
trong một biểu thức trước khi lỗi đó được thông báo ra màn hình. Nếu có lỗi nào đó
xảy ra trong lúc định giá trị hoặc đơn giản biểu thức, hàm traperror() sẽ trả lại xâu kí
tự thông báo lỗi của lỗi đầu tiên gặp phải khi tính toán biểu thức đó. Nếu không có
lỗi, hàm traperror() trả lại kết quả tính toán biểu thức. Mỗi lần gọi đến hàm

traperror(), Maple tự động xoá đi giá trị cũ có trong bốn lần tính toán trước.
PHẦN II : ÁP DỤNG
I. THUẬT TOÁN QUICKSORT
quicksort := proc(A::array(1, numeric),
m::integer, n::integer)
local partition, p;
partition := proc(m,n)
i := m;
j := n;
x := A[j];
while i<j do
if A[i]>x then
A[j] := A[i];
j := j-1;
A[i] := A[j];
else
i := i+1;
end if;
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 11 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
end do;
A[j] := x;
p := j;
end proc:
if m<n then # if m>=n there is nothing to do
p:=partition(m, n);
quicksort(A, m, p-1);
quicksort(A, p+1, n);
end if;

eval(A);
end proc:
II. THUẬT GIẢI SUY DIỄN TIẾN
Facts := {A,B,C,D,E,F,G,H,N,M}
Rules := {[{A,B},{C}], [{D},{E,F}],[{DG},{H,N,M}]}
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 12 -
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
CHƯƠNG TRÌNH ĐẠO TẠO THẠC SĨ CNTT QUA MẠNG
Ghi chú: Phần áp dụng được thực hiện trong file ApDung.mw
Tài liệu tham khảo
1. Bài giảng môn học ‘Lập Trình Symbolic’
TS. Đỗ Văn Nhơn – ĐH Công Nghệ Thông Tin
2. Giáo Trình Giới thiệu Maple
Thạc sĩ Nguyễn Ngọc Trung – ĐH. Sư Phạm HCM
3. Lập Trình Trên Maple
Thạc sĩ Nguyễn Ngọc Trung – ĐH. Sư Phạm HCM
4. Maple Introductory Programming Guide
M. B. Monagan K. O. Geddes K. M. Heal
G. Labahn S. M. Vorkoetter J. McCarron P. DeMarco
5. Maple Advanced Programming
M. B. Monagan K. O. Geddes K. M. Heal
G. Labahn S. M. Vorkoetter J. McCarron P. DeMarco
MÔN HỌC : LẬP TRÌNH SYMBOLIC - 13 -

×