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

Lập Trình Maple - Kết Nối Maple Với Ngôn Ngữ Khác

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 (472.88 KB, 20 trang )

BỘ GIÁO DỤC & ĐÀO TẠO
ĐẠI HỌC QUỐC GIA TP HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÀI BÁO CÁO MÔN HỌC:
LẬP TRÌNH SYMBOLIC VÀ TRÍ
TUỆ NHÂN TẠO
Đề Tài: Lập Trình Maple - Kết Nối Maple Với
Ngôn Ngữ Khác
TP.HCM,Tháng 2,năm
2013
GVHD:

PGS.TS Đỗ Văn Nhơn
SINH VIÊN THỰC HIỆN:
PHẠM QUANG DIỆU CH1101077
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
Lời cảm ơn
Qua đây em xin được bày tỏ lòng biết ơn đến thầy PGS.TS Đỗ Văn Nhơn. Thầy
là người đã truyền thụ cho chúng em rất nhiều kiến thức quý báu trong quá trình học tập
tại trường. Thầy đã rất nhiệt tình hướng dẫn và giúp đỡ em trong suốt quá trình thực hiện
bài thuyết trình này
LỜI MỞ ĐẦU

Maple là một hệ thống tính toán trên các biểu thức đại số và minh họa toán học
mạnh mẽ của công ty Warterloo Maple Inc. ( ), ra đời khoảng
năm 1991,đến nay đă phát triển đến phiên bản 10. Maple có cách cài đặt đơn giản, chạy
trên tất cả các hệ điều hành, có cấu trúc linh hoạt để sử dụng tối ưu cấu h́nh máy và đặc
biệt có tŕnh trợ giúp ( Help) rất dễ sử dụng.
Từ phiên bản , Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói
lệnh tự học gắn liền với toán phổ thông và đại học. Ưu điểm đó làm cho nhiều nước trên
thế giới lựa chọn sử dụng Maple cùng các phần mềm toán học khác trong dạy học toán


trước đ̣i hỏi của thực tiễn và sự phát triể n của giáo dục.
Các tính năng cơ bản của Maple:
• 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ệc đợc
hầu hết các phép toán cơ bản trong chương tŕnh toán đại học và phổ thông;
• Cung cấp các công cụ minh họa h́nh học thuận tiện gồm: vẽ đồ thị tĩnh và
động của các đường và mặt được cho bởi các hàm tùy ư trong nhiều hệ tọa
độ khác nhau;
• Một ngôn ngữ lập tŕnh đơn giản và mạnh mẽ có khả năng tương tác với các
ngôn ngữ lập tŕnh khác;
HVTH: PHẠM QUANG DIỆU Trang 2
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
• Cho phép trích xuất ra các định dạng khác nhau 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;
• Hỗ trợ rất hữu ích cho sinh viên trong việc tự học.

• Khi khởi động Maple nhân của Maple được kích hoạt. Maple tự động nạp
các lệnh cũng như những chức năng cơ bản vào môi trường làm việc. Lúc
này chúng ta có thể thực hiện các tính toán cơ bản. Những tính toán chuyên
ngành chúng ta sẽ sử dụng các lệnh chứa trong các gói tương ứng.
I. Lập Trình Maple
I.1. Các lệnh lập trình cơ bản
I.1.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.
HVTH: PHẠM QUANG DIỆU Trang 3
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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.
I.2. Vòng lặp for
Cấu trúc cú pháp:
for name from start by change to finish
do
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
HVTH: PHẠM QUANG DIỆU Trang 4
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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.
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.
I.2.1. 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:
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.

HVTH: PHẠM QUANG DIỆU Trang 5
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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.
I.2.2. 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).
I.2.3. 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 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à
HVTH: PHẠM QUANG DIỆU Trang 6
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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
I.2.4. 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.
I.3. Cách Thiết lập một chu trình
I.3.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
HVTH: PHẠM QUANG DIỆU Trang 7
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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, ).
I.3.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.
HVTH: PHẠM QUANG DIỆU Trang 8
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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.
I.3.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.
I.3.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:
Biến toàn cục được khai báo sau từ khoá global trong khai báo chu trình. 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ộ:
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ị.
HVTH: PHẠM QUANG DIỆU Trang 9
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
ham 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ử.
I.3.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.
I.3.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:
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.
HVTH: PHẠM QUANG DIỆU Trang 10
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
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:
HVTH: PHẠM QUANG DIỆU Trang 11
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
traperror(expr1, expr2, )
Tham số: expr1, expr2, là các biểu thức.
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.
II. Kết Nối Maple với ngôn ngữ khác
Kết nối Maple với Java, C#, C++, VB Như ta đã biết Maple là một công cụ tính
toán, đặt biệt là tính toán hình thức rất mạnh (một điều mà các nhà sản xuất chip

hiện nay đang đi tìm lời giải), và hỗ trợ cả lập trình và có thể tạo giao diện với gói
maplet, tuy nhiên lại rất hạn chế . Điểm hạn chế này có thể khắc phục được bằng cách kết
nối nó với các ngôn ngữ lập trình khác. Điều này rất quan trọng khi bạn cần lập trình một
bài toán liên quan nhiều tới các tính toan hình thức
Một số thông tin về Maple được cung cấp trên Wikipedia:
Chức năng: Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán học
truyền thống. Có thể dễ dàng tạo ra những giao diện người dùng tùy chọn. Maple hỗ trợ
cho cả tính toán số và tính toán hình thức, cũng như hiển thị. Nhiều phép tính số học
được thực hiện dựa trên thư viện số học NAG; trong Maple, các chương trình con NAG
đã được mở rộng để cho phép độ chính xác ngẫu nhiên lớn Maple cũng có một ngôn ngữ
lập trình cấp cao đầy đủ. Cũng có giao diện cho những ngôn ngữ khác (C, Fortran, Java,
HVTH: PHẠM QUANG DIỆU Trang 12
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
MatLab, và Visual Basic). Cũng có một giao diện dành cho Excel. Kiến trúc: Phần lớn
chức năng toán học của Maple được viết bằng ngôn ngữ Maple, và được thông dịch bởi
nhân Maple. Nhân Maple được viết bằng C. Maple chạy trên tất cả các hệ điều hành
chính. Ngôn ngữ lập trình Maple là một ngôn ngữ kiểu động. Cũng giống như các hệ
thống đại số máy tính, các biểu thức hình thức được lưu trữ trong bộ nhớ theo đồ thị
không chu trình có hướng (DAG). Ngôn ngữ cho phép các biến có phạm vi nhất định
(lexical scoping). Ngôn ngữ có hình thức lập trình hàm, nhưng cũng có hỗ trợ đầy đủ cho
lập trình truyền thống, theo kiểu mệnh lệnh.Một điều lạ đối với chương trình thương mại,
đa số mã nguồn đều có thể xem tự do. Ở đây mình giới thiệu cách kết nối Maple với 2
ngôn ngữ lập trình dưa trên 2 nền tảng rất mạnh hiện nay đó là dot Net (lấy VS với C#
làm ví dụ) và Java ( lấy IDE NetBean làm ví dụ)
II.1. Kết nối Maple với C#
Sử dụng maplec.dll, ví dụ
using System;
using System.Text;
using System.Runtime.InteropServices;
static class MapleEngine

{
public delegate void TextCallBack(IntPtr data, int tag, IntPtr output);
public delegate void ErrorCallBack(IntPtr data, IntPtr offset, IntPtr msg);
public delegate void StatusCallBack(IntPtr data, IntPtr used, IntPtr alloc, double
time);
public delegate IntPtr ReadLineCallBack(IntPtr data, IntPtr debug);
public delegate long RedirectCallBack(IntPtr data, IntPtr name, IntPtr mode);
public delegate IntPtr StreamCallBack(IntPtr data, IntPtr stream, int nargs, IntPtr
args);
public delegate long QueryInterrupt(IntPtr data);
public delegate IntPtr CallBackCallBack(IntPtr data, IntPtr output);
HVTH: PHẠM QUANG DIỆU Trang 13
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
public struct MapleCallbacks
{
public TextCallBack textCallBack;
public ErrorCallBack errorCallBack;
public StatusCallBack statusCallBack;
public ReadLineCallBack readlineCallBack;
public RedirectCallBack redirectCallBack;
public StreamCallBack streamCallBack;
public QueryInterrupt queryInterrupt;
public CallBackCallBack callbackCallBack;
}
[DllImport(@"maplec.dll")]
public static extern IntPtr StartMaple(int argc, String[] argv, ref MapleCallbacks cb,
IntPtr data, IntPtr info, byte[] err);
[DllImport(@"maplec.dll")]
public static extern IntPtr EvalMapleStatement(IntPtr kv, byte[] statement);
[DllImport(@"maplec.dll")]

public static extern IntPtr IsMapleStop(IntPtr kv, IntPtr obj);
[DllImport(@"maplec.dll")]
public static extern void StopMaple(IntPtr kv);
}
class MainApp
{
public static void cbText(IntPtr data, int tag, IntPtr output)
{
string s = Marshal.PtrToStringAnsi(output);
HVTH: PHẠM QUANG DIỆU Trang 14
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
Console.WriteLine(s);
}
public static void cbError(IntPtr data, IntPtr offset, IntPtr msg)
{
string s = Marshal.PtrToStringAnsi(msg);
Console.WriteLine(s);
}
public static void cbStatus(IntPtr data, IntPtr used, IntPtr alloc, double time)
{
Console.WriteLine("cputime=" + time
+ "; memory used=" + used.ToInt64() + "kB"
+ " alloc=" + alloc.ToInt64() + "kB"
);
}
public static void Main(string[] args)
{
MapleEngine.MapleCallbacks cb;
byte[] err = new byte[2048];
IntPtr kv;

string[] argv = new string[2];
argv[0] = "maple";
argv[1] = "-A2";
cb.textCallBack = cbText;
HVTH: PHẠM QUANG DIỆU Trang 15
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
cb.errorCallBack = cbError;
cb.statusCallBack = cbStatus;
cb.readlineCallBack = null;
cb.redirectCallBack = null;
cb.streamCallBack = null;
cb.queryInterrupt = null;
cb.callbackCallBack = null;
try
{
kv = MapleEngine.StartMaple(2, argv, ref cb, IntPtr.Zero, IntPtr.Zero, err);
}
catch (DllNotFoundException e)
{
Console.WriteLine(e.ToString());
return;
}
catch (EntryPointNotFoundException e)
{
Console.WriteLine(e.ToString());
return;
}
if (kv.ToInt64() == 0)
{
Console.WriteLine("Fatal Error, could not start Maple: "

+ System.Text.Encoding.ASCII.GetString(err, 0, Array.IndexOf(err,
(byte)0))
);
HVTH: PHẠM QUANG DIỆU Trang 16
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
return;
}
for (; ; )
{
//Dấu nhắc lệnh để gọi lệnh trong Maple
Console.Write("> ");
string expr = Console.ReadLine();
IntPtr val = MapleEngine.EvalMapleStatement(kv,
Encoding.ASCII.GetBytes(expr + ";"));
// Nhấn quit/done/stop
if (MapleEngine.IsMapleStop(kv, val).ToInt32() != 0)
break;
}
MapleEngine.StopMaple(kv);
}
}
II.2. Kết nối Maple với Java
Các thao tác để tạo kết nối trước:
• Đặt biến môi trường (My Computer  Properties  Advanced  Environment
Variable  ở hộp thoại phía dưới tìm dòng có chữ “Path”  chọn dòng này
rồi click “Edit”  trên dòng có chứa “Variable Value” di chuyển đến cuối 
đặt dấu chấm phẩy (rồi paste đường dẫn vào (đường dẫn đến bin.win của thư
mục cài đặt maple))
• Add 2 thư viện jar là externalcall.jar và jopenmaple.jar trong thư mục cài đặt
vào chương trình

• Reset lai máy
HVTH: PHẠM QUANG DIỆU Trang 17
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
III. Chương Trình Demo
Chương trình demo kết nối Java và Maple:
MÁY TÍNH BỎ TÚI
Giao Diện Chương Trình
Hình 1 : Giao diện thẻ Calculator
HVTH: PHẠM QUANG DIỆU Trang 18
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
Hình 2 : Giao diện thẻ Graphics
Chức năng:
Chương trình có tất cả các chức năng của một máy tính bỏ túi thông thường, có
thể thao tác thông qua các nút một cách dễ dàng. Ngoài ra, một số phép tính và lệnh
không có trên giao diện nhưng vẫn có thể tính toán được bằng cách nhập lệnh giống như
trong Maple (không có dấu ;), các tính toán được thực hiện thông qua Maple.
Nút Matrix hỗ trợ nhập ma trận, đặt tên cho ma trận nhằm giúp cho thao tác nhập
ma trận trở nên trực quan hơn, đơn giản hơn việc sử dụng dòng lệnh.
Thẻ graphic để vẽ đồ thị: nhập hàm số vào phần input, nhập giới hạn quan sát đồ
thị vào các giá trị x, y, sau đó enter để vẽ. Phần vẽ đồ thị sử dụng maple để vẽ.
Hướng dẫn sử dụng:
Chương trình được viết bằng Netbeans nên để hiển thị chính xác và ít lỗi, xin thầy sử
dụng Netbeans để kiểm tra chương trình.
chương trình không hiểu gói com.maplesoft.openmaple.* và gói
com.maplesoft.externalcall.MapleException thì xin thầy vào File\Project Properties,
HVTH: PHẠM QUANG DIỆU Trang 19
LẬP TRÌNH SYMBOLIC VÀ TRÍ TUỆ NHÂN TẠO
trong phần Libraries, bấm Add JAR/Folder và thêm 2 file externalcall.jar và
jopenmaple.jar trong thư mục %Maple%\java vào tất cả các thẻ.
• Kết nối Maple với Java Đặt biến môi trường (My Computer  Properties 

Advanced  Environment Variable  ở hộp thoại phía dưới tìm dòng có chữ
“Path”  chọn dòng này rồi click “Edit”  trên dòng có chứa “Variable
Value” di chuyển đến cuối  đặt dấu chấm phẩy (rồi paste đường dẫn vào
(đường dẫn đến bin.win của thư mục cài đặt maple))
• Add 2 thư viện jar là externalcall.jar và jopenmaple.jar trong thư mục cài đặt
vào chương trình
• Reset lai máy
IV. Tài liệu tham khảo


HVTH: PHẠM QUANG DIỆU Trang 20

×