Tài liệu này hướng dẫn các bạn cách lập trình giao diện maplet trong maple. Các bạn sẽ được tiếp xúc với những câu lệnh, những đối tượng cơ bản nhất để các bạn có thể tự mình thiết kế giao diện maplet qua phần mềm maple. Để các bạn nắm rõ hơn mình có giới thiệu một số chương trình bằng về đại số tuyến tính và giải tích.
Trang 1SƠ LƯỢC VỀ MAPLET TRONG MAPLE
1 Giới thiệu về Maplet
Maple tuy là một công cụ giải toán rất tuyệt với nhưng những câu lệnh còn phức tạp và rất khó nhớ Để đơn giản cho những người không thường sử dụng, từ Maple 7 trở đi, một gói lệnh (Package) cho phép người sử dụng ở trình độ cao có thể tạo những “cửa sổ tính toán” nhăm đơn giản hóa các câu lệnh thông qua giao diện gồm các nút (button), các hộp văn bản (textbox), các hộp kiểm tra (checkbook),…đó là Maplet
Maplet có tầm ứng dụng rất rộng rãi Các Maplet có thể cho chúng ta có thể lập trình thành các form hay gọi là “máy tính” trong Maple, các giao diện này được người dùng thiết kế tùy thuộc vào các yêu cầu khác nhau, các đối tượng trên Maplet được liên kết
với các gói lệnh hoặc các thủ tục(proc()) mình tự tạo trong Maple
Tài liệu này được biên soạn một cách sơ lược về Maplet Nếu bạn là một người thường xuyên sử dụng hoặc muốn tìm hiểu sâu hơn về Maplet thì những câu lệnh sau sẽ giúp bạn rất nhiều
[Alert , Con firm, GetColor , GetEquation, GetExpression,
GetFile, GetInput , Integration,KernelOpts, LinearAlgebra,
Message, Question, Selection, ShowTable, SignQuery]
[> Integration();
1.2 Tạo ra các giao diện đến các thủ tục và các gói lệnh trong Maplet
Một giao giao diện Maplet có thể dễ dàng thay đổi các giá trị tính toán và các tùy chọn trong các thủ tục và các gói lệnh của Maplet Ví dụ một gói lệnh sẽ tạo ra danh sách các thiết lập ban đầu mà người sủ dụng hoặc khi cần có thể thay đổi Một giao diện Maplet đến một gói lệnh có thể được tạo ra để giúp người sử dụng hiểu về câu lệnh đó Ví dụ sau sẽ cho người sử dụng học về cách tính định thức của một vector trong gói lệnh
LinearAlgebra() (Gói lệnh về đại số tuyến tính)
[>with(LinearAlgebra):
Trang 2[>Message("You are correct!");
2 Gói lệnh trong Maplet
Gói lệnh trong Maplets bao gồm 3 gói lệnh con: Elements(các thành phần), Examples(các
ví dụ), Tools(các công cụ) và thủ tục Display để chạy các ứng dụng được viết
Trong đó:
Elements: gồm các thành phần độc lập được sử dụng để tạo nên một Maplet như: Cửa
sổ, các nút lệnh, các hộp kiểm tra…Trong gói lệnh con Maplets[Example] có nhiều thành phần khác nhau được sử dụng, mỗi thành phần có các mô tả và tùy chọn khác nhau
Examples: Gồm các ví dụ chỉ cách sử dụng các Maplet, trong đó có nhiều ví dụ phức tapj được liên kết đến các trang trợ hướng dẫn và các worksheet mô tả cách thành lập các Maplet này
Tools: Gồm các cộng cụ cho người sử dụng Maple thàh lập các Maplet
3 Giới thiệu một số thành phần trong Maplet
3.1 Các thành phần trong cửa sổ chính
Tất cả các thành phần được giới thiệu ở đây chỉ nhằm giải thích ý nghĩa và nêu ý nghĩa về cách dùng Còn cú pháp sử dụng ta luân xem dễ dàng bằng lệnh ?<tên thành phần[> hoặc bôi đen thành phần cần tìm kiếm và nhấn F2
3.1.1 Button(nút lệnh)
Các nút lệnh có thể xuất hiện nhiều lần trong một cửa sổ Maplet Mỗi nút lệnh được liên quan đến một hoạt động cụ thể khi được kích hoạt Các trạng thái thể hiện của nút lệnh được thay đổi trong các tùy chọn của câu lệnh khởi tạo nút lệnh Ví dụ sau tạo ra hai nút
lệnh Ok, Cande trong một maplet bằng lệnh:
Trang 33.1.2 Checkbox
Là một điều khiển gồm nhiều ô lựa chọn Giống như nút lệnh mỗi hộp kiểm tra liên quan đến một hoạt động cụ thể, khi được kích hoạt người sử dụng phải đánh dấu chọn lựa một hoặc nhiều danh sách chọn Ví dụ:
[> with(Maplets[Elements]):
[> maplet := Maplet([["Chon mon hoc ma ban thich: ",
[> ComboBox['CoB1']("Giai Tich", sort([
[> "Dai So","Giai Tich", "XSTK", "Hinh Hoc"], lexorder))],
[> [Button("OK", Shutdown(['CoB1'])), Button("Cancel",
Trang 4[> "Thang 05","Thang 06","Thang 07", "Thang 08",
[> "Thang 09", "Thang 10","Thang 11", "Thang 12"], lexorder))], [> [Button("OK", Shutdown(['DDB1'])), Button("Cancel",
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>[Label("Nhap ho va ten: ", 'font' = Font("courier", 14)),
[>TextField['IF1'](20)],
[>[Label("Vi du ", 'font' = Font("helvetica", 12)),
[>Label("Bin Laden", 'font' = Font("helvetica", italic, 12))], [>[Button("OK", Shutdown(['IF1'])), Button("Cancel",
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>["Chon mot mau ban thich: ", ListBox['LB1'](sort([
[>"xanh", "do", "tim", "vang", "xam", "nau", "den",
[>"da cam", "hong"], lexorder))],
[>[Button("OK", Shutdown(['LB1'])), Button("Cancel",
3.1.7 MathMLViewer ( Cửa sổ hiển thị các công thức toán)
Là một điều khiển cho phép hiển thị các công thức toán chứa trong nó Các biểu thức được hiển thị dưới dạng công thức toán học bình thường thay cho các cú pháp câu lệnh định nghĩa Chú ý các đối tượng trong điều khiển này không thể copy hoặc paste như trong môi
Trang 5trường soạn thảo của maple Ví dụ:
[>Maplets[Display]( Maplet([
[>Label("Nhap vao mot cong thuc toan:",
[>'font' = Font( 'family'=".VnTime", italic, 20 ) ),
[>'font' = Font('family' = ".VnTime", italic, 18)),
TextField['x1']("-3")], [>[Label("X2:", 'font' = Font('family' =
".VnTime", italic, 18)), [>TextField['x2']("3")],
Plotter['PL1'](), [Button("Display", Evaluate('PL1' [>= 'plot(TF1,
[>[RadioButton['RB1']("1", 'value'=true, 'group'='BG1'),
[>RadioButton['RB2']("2", 'value'=false, 'group'='BG1')],
[>[Button("OK", Shutdown(['RB1', 'RB2'])), Button("Cancel",
Trang 6[>["Select a value: ", Slider['SL1'](0 100, 10, 'showticks',
[>'majorticks'=20, 'minorticks'=10, 'snapticks'=false)],
[>[Button("OK", Shutdown(['SL1'])), Button("Cancel", Shutdown())] [>]):
[>Maplets[Display](maplet);
Giống như TextBox, điều khiển này cũng cho hiển thị văn bản nhưng chỉ có trên một dòng Việc xuất nhập văn bản phụ thuộc vào tùy chọn Editable mang giá trị True hay False Ví dụ:
[>with(Maplets[Elements]):
[>maplet := Maplet([
[>["Enter your name: ", TextField['IB1'](30)],
[>[Button("OK", Shutdown(['IB1'])), Button("Cancel", Shutdown())] [>]):
Trang 7[>Maplets[Display](maplet);
3.2 Tạo Menu
Các thành phần trong một menu trong maplet bao gồm:
MenuBar (Thanh menu): Phải là thành phần trong một thành phần trong một của số nào đấy của maplet
MenuItem(Các menu thành phần): Là một thành phần trong một menubar hoặc một menu chọn nhanh(PopupMenu ) nào đó
MenuSeparator(Dấu phân cách các Menu thành phần): Là một thành phần trong một menubar hoặc trong một menu chọn nhanh nào đó dùng đề phân cách các menuItem
Một thanh menu có thể chứa nhiều menu, mỗi menu có thể có nhiều menu thành phần, các dấu phân cách dùng để nhóm các menu thành phần và cũng để phân cách với các menu thành phần khác Ví dụ:
3.3 Thanh công cụ (ToolBar)
Các khái niệm về thanh menu hay thanh công cụ rất quen thuộc với những người sử dụng window Trong maplet cũng vậy ta cũng có thể tạo ra các thanh công cụ để thực hiện các công việc chính trong maplet của mình Thành phần trong thanh công cụ gồm các nút
lệnh, các nút phân cách.Ví dụ:
Trang 9Dùng để hiển thị một hộp thoại nào đó trong maplet nếu hộp thoại đã được hiển thị thì khi chạy sẽ không có vấn đề gì xãy ra Ví dụ:
Lệnh này dùng để đóng một maplet đang chạy Đặc biệt trong lệnh này có thể gán giá trị
trả về Ví dụ về lệnh này đã được trình bày ở phần trên
Trang 103.5 Giới thiệu một sô hộp thoại thường dùng
Các cửa sổ (Dialogs) là các cửa sổ nhỏ trong ứng dụng Maplet nhằm cung cấp thông tin, đưa ra các cảnh báo hoặc nhận thông tin…Ngoài một số ký hiệu mặc định trong hộp thoại, người lập trình maplet có thể định dạng lại một số thuộc tính như: Ký tự xuất hiện trên thanh tiêu đề hay trên nút lệnh, hay trên các thông báo Chú ý Dialog không có giá trị trả
về
3.5.1 AlertDialog (Hộp thoại cảnh báo)
Dùng hộp thoại này khi muốn cảnh báo một điều gì cho người dùng maplet Ví dụ:
> Maplets[Display]( Maplet( AlertDialog(
> "Canh bao, sap mat dien",
> 'onapprove' = Shutdown('true'),
> 'oncancel' = Shutdown("FAIL")
> ) ) );
3.5.2 ColorDialog (Hộp thoại màu)
Dùng hộp thoại này người dùng có thể chọn một màu trong các màu chuẩn để hiển thị trên một đối tượng nào trên maplet Ví dụ:
3.5.4 FileDialog (Hộp thoại chọn file)
Dùng hộp thoại này khi muốn chọn một file nào trong máy tính Ví dụ:
> with(Maplets[Elements]):
> maplet := Maplet(FileDialog['FD1'](
Trang 113.5.6 Massage (hộp thoại thông báo)
Dùng hộp thoại này để thông báo cho người dùng một thông tin gì đấy Hộp thoại này chỉ
có 2 phần: Phần thông báo cần hiển thị và nút tắt hộp thoại Ví dụ:
3.5.7 QuestionDialog (hộp thoại truy vấn)
Hộp thoại này dùng cho người sử dụng có thể xác nhận một vấn đề gì đó với hai trạng thái
3.6 Tạo bảng trong maplet
Trong cửa sổ maplet có thể tạo ra các bảng(table) mỗi bảng gồm có các tiêu đề, các ô Nếu khai báo một bảng mà không có thanh tiêu đề thì thanh tiêu đề mặc định là A…Z , AA…ZZ Ví dụ:
> IL := [1,x,exp(x),a^x, sin(x), cos(x), tan(x), cot(x)]:
> Maplets[Display]( Maplet( [
Trang 12> BoxCell(Table( ["Ham so co ban", "Nguyen ham"], [seq( [i, int(
có thể dêt dàng khai thác đươc tiềm năng của phần mền này Trong maple có một phần nhỏ
là maplet, maplet là một mảng giúp cho những người dùng maple tự tạo nên các giao diện tính toán tùy theo yêu cầu của người sử dụng Mọi thao tác trên maplet giống như chúng ta đang làm việc với môi trường Window của máy tính vậy Trong phần này chúng tôi sẽ trình bày một số maplet về các vấn đề trong toán cao cấp của chương trình Đại học, bao gồm:
Maplet ứng dụng trên Đại số tuyến tính
Maplet ứng dụng trên phép tính vi tích phân hàm một biến
Maplet ứng dụng trên phương trình vi phân Toán Lý
2 Giới thiệu tổng quan về một số maplet ứng dụng
2.1 Maplet ứng dụng trên Đại số tuyến tính
2.1.1 Maplet tính toán trên ma trận vuông
Maplet này cho phép người sử dụng tính toán trên ma trận vuông, bằng việc nhập vào một
ma trận sau đó thực hiện các phép toán điển hình như: Tính định thức ma trận, Hạng ma trận, Giá trị riêng, Vector riêng, Đa thức đặc trưng, Tính lũy thừa, Tìm ma trận
nghịchđảo, Đa thức tối tiểu và Chéo hóa ma trận
Hình ảnh minh họa:
Trang 13Giao diện nhập ma trận.
Trang 14Giao diện tính toán ma trận
Trang 15else Maplets[Tools][Set](('ketqua')(value) = Determinant(A))
fi: end: DTDT := proc () if t = 0 then Thongbao() else Maplets[Tools][Set](('ketqua')(value)
Trang 16gt := select(t-> type(t[1], realcons), LinearAlgebra[Eigenvectors](A, output = list))):
ok1 := is(sum(gt[k][2], k = 1 nops(gt)) = RowDimension(A)):
toán",'font'=Font(15),'foreground'="#FF3399"),
BoxCell(MathMLViewer['ketqua'](height=200
Trang 17,background="#E8EEEE",foreground="#253BA3"),hscroll=always,vscroll=always)] )],
[BoxRow(border=true,background="#998B52",
Button("Nhập ma trận",foreground = red,background = green,Evaluate('function'='Nhap()')), Button("Hạng ma trận",foreground = red,background = green,Evaluate('function'='Hang()')), Button("Định thức", foreground = red,background = green,Evaluate('function'='Dinhthuc()')), Button("Đa thức đặc trưng ",foreground
[BoxRow(border = true, background = "#998B52",
Button("Luy Thừa",foreground = "#6632A7",background = "#0A9EB0",Evaluate('function'
Button("Xóa Dữ Liệu",foreground = "#6632A7",background = "#0A9EB0",
Action(SetOption(target = 'nhap', value = ""),SetOption(target = 'ketqua', value =
""),Evaluate('function' = 'Capnhat()')),
Button("Thoát",foreground = "#6632A7",background =
"#0A9EB0",Action(RunWindow('W2')))
)]]), MenuBar['MNB'](Menu("File", MenuItem("Exit Alt+F4",
Shutdown())),Menu("Help", MenuItem("Quick Help ", RunWindow('W3'))),
Window['W2']("Maplet-Tính toán trên Ma trận vuông thông báo:",[["Bạn thực sự muốn thoát khỏi hệ thống?"],[Button("Ok", Action(Evaluate('function' = 'Capnhat()'),
Shutdown())),Button("Cancel", CloseWindow('W2'))]]),
Window['W3']("Giới thiệu, trợ giúp",[["GIỚI THIỆU-TRỢ
GIÚP"],[TextBox['IB1'](background = "#BFE9E6",foreground = "#1015E9",10 40,editable
2.1.2 Maplet giải hệ phương trình tuyến tính
Maplet này được sử dụng giải hệ phương trình tuyến tính theo phép khử Gauss Việc nhập ma
Trang 18trận vào tương tự như phần trên Ngoài nút nhập vào ma trận thì maplet cho ta hai thông tin khác đó là cho phép người dùng thấy được ma trận sau khi biến đổi theo phương pháp khử Gauss Ngoài ra nút nghiệm cho phép ta thấy được các ngiệm của hệ
Hình ảnh minh họa:
Giao diện về ma trận sau khi biến đổi Gauss
Trang 19Giao diện cho thấy ngiệm của hệ phương trình
Giao diện trợ giúp
Trang 20Thân chương trình:
restar; with(LinearAlgebra); with(Student[LinearAlgebra]): with(linalg): Thongbao:=proc()
Maplets[Display]( Maplet( AlertDialog(title="Maplet-Giải hệ phương trình tuyến tính thông báo!", " Bạn vui lòng nhập vào ma trận! ",
while true do A:=MatrixBuilder(C,2,5,square=false,sqrstatic=true,augmented=true,augstatic=true);
if RowDimension(A) # ColumnDimension(A)-1 then Maplets[Examples][Message]("Chu y ma tran suy rong <A|b>, A la ma tran vuong."); else
Trang 21Maplets[Examples][Message]("He phuong trinh vo nghiem, Det(A)=0 !")
maplet:=Maplet('onstartup' = 'A1', Window['W1']("Maplet giai he - PP khu Gauss
",'menubar'='MNB' ,[Label("\\nGIẢI PHƯƠNG TRÌNH A.x=b BẰNG PHƯƠNG PHÁP KHỬ
GAUSS\\n",'font'=Font(16),'foreground'="#1E05E9", ), [BoxColumn(border=true, background
="#57E9CD", Label("Ma trân suy rộng",'foreground'=blue, 'font' = Font( bold, 12)),
MathMLViewer['nhap'](height=200, background="#E8EEEE",foreground="#253BA3") ),
BoxColumn(border=true,background ="#57E9CD", Label("K?t qu? tính toán",'foreground'=blue,
'font' = Font( bold, 12)),
MathMLViewer['kq'](height=200, background="#E8EEEE",foreground="#253BA3") )],
BoxRow(border=true, background ="#9EBA66",Button("Nhập Ma Trận",
Evaluate('function'='NhapMT()')), Button("Ma Trận Khử Gauss",Evaluate('function'='PPGausse()')),
Button("Nghiệm", Evaluate('function'='NghiemGauss()')),ưButton("Xoa Du Lieu",Action(
SetOption(target='nhap',value=""),
Evaluate('function'='Capnhat()'),
SetOption(target='kq',value=""))), Button("Thoát", Action(RunWindow('W2'))) ) ]),
MenuBar['MNB'](Menu("File", MenuItem("Exit Alt+F4",Shutdown())),
Menu("Help", MenuItem("Quick Help ",RunWindow('W3')),
Window['W2']("Maplet-Ma tran vuong thong bao:", [["Ban thuc su muon thoat khoi he thong?
"],[Button("Ok", Action(Evaluate('function'='Capnhat()'),Shutdown())),
Button("Cancel", CloseWindow('W2'))]] ),
Window['W3']"Giới thiệu-Trợ giúp",[["GIỚI THIỆU-TRỢ GIÚP”]
[TextBox['IB1'](background = "#BFE9E6" ,foreground = "#1015E9" ,10 40,editable = false,
“
+Giới thiệu
Họ và tên: Phan Văn Cương
Trường: Đại học Khoa Học Huế
Ngành: Toán tin Ứng Dụng
Lớp: Toán Tin K32
+Hướng dẫn sử dụng
Bạn nhấn vào Nhập Ma Trận, bạn sẽ thấy một giao diện chuên nhập ma trận hiện ra Trên đó bạn có
thể điều chỉnh các thông số theo ý ma trận mà bạn muốn nhập Thực hiện xong việc nhập bạn có thể
nhấn vào Ma Trận Khử Gauss để thấy được ma trận sau khi biến đổi đưa về dạng tam giác hoặc chọn
vào nút Nghiệm để biết được nghiệm của hệ
\n”)],
[Button("Thoát", Shutdown())]]),
Action['A1'](RunWindow('W1')):
Maplets[Display](maplet);