Tải bản đầy đủ (.pdf) (38 trang)

Tiểu luận LẬP TRÌNH SYMBOLIC VÀ ỨNG DỤNG

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 (2.47 MB, 38 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

CHƢƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT QUA MẠNG







ĐỀ TÀI:
LẬP TRÌNH SYMBOLIC
VÀ ỨNG DỤNG











Giảng viên: PGC.TS. Đỗ Văn Nhơn
Học viên: Nguyễn Mai Thƣơng - MSHV: CH1101124









Tp.HCM, Tháng 1/2013
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
2
MỤC LỤC
LỜI MỞ ĐẦU 5
CHƢƠNG 1 : TỔNG QUAN VỀ LẬP TRÌNH SYMBOLIC 7
1.1 Các hàm tính toán cơ bản 7
1.1.1 Tính toán số chính xác và gần đúng 7
1.1.2 Tính toán symbolic 7
1.1.3 Tính toán số nguyên, số hữu tỉ, số thực, số phức 8
1.1.4 Tính đạo hàm 10
1.1.5 Tính tổng vô hạn 10
1.1.6 Khai triển Maclaurin 11
1.1.7 Giải phương trình, hệ phương trình (có thể tính theo tham số) 11
1.1.8 Đơn giản biểu thức 11
1.2 Các kiểu cấu trúc cơ bản 11
1.2.1 Sequence (dãy) 11
1.2.2 Lists (danh sách) 12
1.2.3 Sets (tập hợp) 13
1.2.4 Arrays (mảng) 14
1.2.5 Tables (bảng) 15
1.2.6 Strings 15
1.3 Xử lý các biểu thức 16
1.4 Tính toán đa thức 17

1.4.1 Các hàm tiện ích 17
1.4.2 Các toán tử trên các đa thức 18
1.5 Tìm nghiệm phương trình, hệ phương trình, bất phương trình 19
CHƢƠNG 2: LẬP TRÌNH SYMBOLIC TRONG MAPLE 20
1.1 Các yếu tố của ngôn ngữ lập trình 20
1.2 Lệnh cơ sở, lệnh điều khiển 20
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
3
1.2.1 Lệnh điều kiện IF 20
1.2.2 Vòng lặp While 20
1.2.3 Vòng lặp for 21
1.2.4 Lệnh Break 22
1.2.5 Lệnh Next 22
1.2.6 Hàm Return, Error 23
1.3 Thủ tục, hàm hay chu trình (procedure) 23
1.3.1 Cấu trúc thủ tục 24
1.3.2 Cấu trúc chu trình 24
1.4 Giải một số bài tập sử dụng hàm trong Maple 26
1.4.1 Giải phương trình bậc 2 26
1.4.2 Giải hệ phương trình 26
1.4.3 Giải bất phương trình 26
1.4.4 Tìm hình chiếu của 1 đường thẳng 26
CHƢƠNG 3: LẬP TRÌNH MỘT SỐ ỨNG DỤNG TRONG MAPLE 28
1.5 Giải và biện luận hệ phương trình bậc nhất hai ẩn số: 28
1.5.1 Đặt vấn đề bài toán 28
1.5.2 Biểu diễn bài toán 28
1.5.3 Thuật toán 28
1.5.4 Cài đặt thuật toán 29

1.5.5 Chạy thử nghiệm 31
1.6 Giải bài toán hình học vectơ trong mặt phẳng hình học không gian: 32
1.6.1 Đặt vấn đề bài toán 32
1.6.2 Biểu diễn bài toán 32
1.6.3 Thuật toán 33
1.6.4 Cài đặt thuật toán 33
1.6.5 Chạy thử nghiệm 36
KẾT LUẬN 37
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
4
TÀI LIỆU THAM KHẢO 38

Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
5
LỜI MỞ ĐẦU
aple là một hệ phần mềm chuyên dụng cho công việc tính toán, bao gồm các tính toán
thuần túy bằng ký hiệu toán học, tính toán số và các tính toán đồ thị Sản phẩm này do
trường Đại học Tổng hợp Waterloo (Canada) và trường Đại học kỹ thuật Zurich (ETZ) xây
dựng và đưa vào thương mại đầu tiên vào năm 1985. Qua nhiều lần cải tiến và phát triển,
Maple trở nên phổ biến và là công cụ hỗ trợ tính toán không thể thiếu trong quá trình dạy và
học toán trên máy tính.
Những đặc tính cơ bản của Maple là dễ sử dụng, đòi hỏi cấu hình máy tính không lớn, đáp
ứng được nhu cầu tính toán của nhiều đối tượng. Ngoài ra, Maple còn được thiết kế thích hợp
với chế độ tương tác người và máy, cho phép người dùng phát triển các modul chuyên dụng,
lập trình hoặc tạo thư viện tính toán riêng bên trong phần mềm.
Trong khuôn khổ bài bài thu hoạch này em xin trình bày khái quát về các lệnh, thủ tục và hàm

tính toán cơ bản trong Maple (version 16), xây dựng ứng dụng đơn giản để minh họa quá trình
xử lý và tính toán.
Vì thời gian nghiên cứu có hạn nên không tránh khỏi sai sót, mong được sự góp ý, phê bình từ
thầy cô và các bạn.
Em xin chân thành cảm ơn:
- Trường Đại Học Công Nghệ Thông Tin TP HCM đã tạo điều kiện cho em được nghiên cứu
và học tập.
- Thầy PGS.TS. Đỗ Văn Nhơn đã tận tâm giảng dạy và giúp đỡ em trong suốt quá trình học
tập môn Lập trình Symbolic.
- Các anh chị học viên trong nhóm của lớp CH6 đã giúp đỡ em trong suốt quá trình học, trau
đổi, thực hiện bài thu hoạch.
Em xin chân thành cảm ơn !


M
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
6
NHẬN XÉT CỦA GIẢNG VIÊN HƢỚNG DẪN





















Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
7
CHƢƠNG 1 : TỔNG QUAN VỀ LẬP TRÌNH SYMBOLIC
1.1 Các hàm tính toán cơ bản
1.1.1 Tính toán số chính xác và gần đúng
- Tính toán biểu thức chính xác dạng số hữu tỉ, căn thức, số phức.
- Sử dụng lệnh evalf.
Ví dụ:
> a := 2^(1/3);
evalf(a,20);
Kết quả:


1.1.2 Tính toán symbolic
- Xác định loại tính toán: dùng lệnh type và whattype
Ví dụ:
> A := (1+x)^2 *(3-2*x)^2;
whattype(A);

type(A,`*`);
expand(A);
Kết quả:





- Biến và phép gán
Ví dụ:
> x := 'x':
eqn := x^2+y^2 = 2;
#x := 'x';
Kết quả:

- Toán tử nối tên (concatenation operator)
Ví dụ:
> a || b;
Kết quả:
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
8

- Ký hiệu "->" trong định nghĩa hàm
Ví dụ:
> f := (x,y) -> 2*x^2 -3*x*y + 4*y^2;
f(m,2*m+1);
Kết quả:



1.1.3 Tính toán số nguyên, số hữu tỉ, số thực, số phức
Maple được sử dụng giống như 01 máy tính tính toán, nó có khả năng nhận biết
được các toán tử như giai thừa, tìm ước chung lớn nhất, bội chung nhỏ nhất, tính toán
trên các số nguyên cực lớn
- Các tính toán số nguyên gồm:
+ Biểu thức thông thường
Ví dụ: nhân 2 số 17x15
>17*15;

Kết quả:
255




+ Giai thừa, hàm length (tính chiều dài của 1 số)
Ví dụ: Tính giai thừa của 10 và tính chiều dài của 1 số
> 10!

Kết quả:

> length(100000)

Kết quả:

+ Các hàm:
Hàm
Ý nghĩa
Ví dụ

abs
Lấy giá trị tuyệt đối
> abs(-11);

ifactor
Phân tích ra thừa số nguyên
tố
>

Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
9
iquo
Lấy số nguyên của phép
chia
iquo(m, n) iquo(m,
n, 'r')

> irem(23,4,'q');

> q;

> iquo(23,4,'r');

> r;

irem
Lấy số dư của phép chia
irem(m, n) irem(m,

n, 'q')
gcd

Ví dụ: bộ số chung nhỏ
nhất của 10 vá 15 là 5
>

igcd

Ví dụ: bộ số chung nhỏ
nhất của a vá b?
> a := 3486231590;
b := 8500576883815068;
d := igcd(a,b);
Kết quả:



isprime
Kiểm tra 1 số có phải là số
nguyên hay không?
>

ithprime
Xác định số nguyên tố thứ n
(mặc định 2 là số nguyên tố
thứ 1)
>

prevprime(n)

nextprime(n)
Số nguyên tố lớn nhất nhỏ
hơn n và nhỏ nhất lớn hơn n
>

>

max
Tìm số lớn nhất
>

min
Tìm số nhỏ nhất

mod
Chia lấy dư
>

convert
Chuyển một số từ dạng này
sang dạng khác
> convert(9, binary);
>
convert(1.23456,rational);
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
10



- Tính toán sơ cấp: bao gồm các hàm toán học
+ sin, cos, tan,
+ sinh, cosh, tanh,
+ arcsin, arccos, arctan,
+ exp
+ ln, log[10]
+ sqrt
+ round, trunc
+ Zeta
v.v
- Và hằng số Pi.
Ví dụ:
> a := Pi^2+1;
evalf(a,30);
x := 5;
Kết quả:



1.1.4 Tính đạo hàm
Ví dụ:
> Diff(sin(x)*ln(x), x);
#value(%);
diff(sin(ln(x))-x^3,x);
Kết quả:


1.1.5 Tính tổng vô hạn
Ví dụ:
> Sum(n^2, n);

#value(%);
sum(n^2,n);
Kết quả:

Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
11

1.1.6 Khai triển Maclaurin
Ví dụ:
> series(sin(x), x=0, 10);
Kết quả:

1.1.7 Giải phương trình, hệ phương trình (có thể tính theo tham số)
Ví dụ:
> #solve(x^2+x-1=0, x);
solve(x^2+m*x+1=0,x);
Kết quả:

1.1.8 Đơn giản biểu thức
Ví dụ:
> expr := cos(x)^5+sin(x)^4+2*cos(x)^2-2*sin(x)^2-
cos(2*x);
simplify(expr);
Kết quả:


1.2 Các kiểu cấu trúc cơ bản
1.2.1 Sequence (dãy)

- Kiểu Sequence là một nhóm các đối tượng được sắp xếp theo thứ tự và ngăn
cách nhau bởi dấu phẩy.
- Dãy có thể được gán cho biến. Dãy rỗng thì kí hiện là NULL.
Ví dụ:

- Maple cung cấp lệnh để tạo dãy và có cú pháp như sau:
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
12


Tạo dãy bằng cách cho f tác động lên các thành phần của biểu thức expression.
Expression có thể là tập hợp, danh sách hoặc biểu thức dạng tổng tích.Ký hiệu toán tử
$.
Cú pháp:
> seq(a^n,n=0 10);
a$4;
Kết quả:




1.2.2 Lists (danh sách)
- Danh sách List trong Maple được bao bọc bởi [ ], cũng tương tự như dãy, danh sách
List có thể lưu những phần tử giống nhau.
- Cú pháp:
> L := [1,2,3,a,b];
x := 'x':
polys := [1,x,x^2];

Kết quả:


- Để truy cập các phần tử trong danh sách, ta dùng lệnh nops, op hoặc dùng
listname[index] để thay đổi phần tử trong danh sách.

Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
13
>

Kết quả:



- Ghép hai List lại với nhau:

1.2.3 Sets (tập hợp)
- Cú pháp
> A := {1,2,3,x,3};
B := {1,m,x,y,z};
Kết quả:


- Các toán tử: union, intersect, minus, subset
> A intersect B;
A union B;
A minus B;
Kết quả:




- Chuyển đổi kiểu giữa sequence, set, list
> S := 1,2,3;
A := {S};
L := [S];
L1 := [op(A)];
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
14
convert(L, set);
Kết quả:





> A:=[a,b,c];
B:=[1,2,3,4];
C:=A,B;



1.2.4 Arrays (mảng)
- Mảng có các chỉ số của mảng là số nguyên. Phạm vi của chỉ số được ghi rõ trong
lệnh khai báo mảng array.
- Để tạo mảng, chúng ta cần 02 thông số: số chiều và phạm vi chỉ số.
Sparse: gán các phần tử của mảng

Symmetric: dùng để tạo ma trận đối xứng
Antisymetric: tính phản xứng
Identity: tạo ma trận đơn vị
Map(f,expr): tính giá trị hàm với đối số là 1 thành phần biểu thức. Expr có thể
là list, set, phương trình, mảng, bảng… hoặc có dạng tổng, tích.
Sort(expr): sắp xếp theo thức tự abc hoặc số mũ.
Sort(expr, varlist, plex): sắp xếp bt theo kiểu từ điển.
Sort(expr, varlist, tdeg): sắp xếp theo tổng bậc.
Sort(list), sort(list, odering): sắp xếp list theo trật tự cho bởi odering
- Cú pháp:
> squares := array(1 3);
squares := array(1 3,
[1,8,127]);
squares[2];
Kết quả:



Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
15
1.2.5 Tables (bảng)
- Cấu trúc bảng gồm hai thành phần có cú pháp như sau:

- Hàm table tạo ra bảng với giá trị khởi đầu được chỉ ra bởi L. Nếu L có dạng dãy các
đẳng thức thì vế trái sẽ là khóa, vế phải là giá trị tương ứng với khóa. Nếu L có dạng
dãy của các giá trị thì các chỉ số là 1,2,3,…
- Dùng 02 hàm indices(bảng) và entries(bảng) để tạo ra một dãy gồm các khóa và giá
trị của bảng.

- Bảng là công cụ thích hợp để lập sổ tra cứu.
> table();

> table([22,42]);

> S := table([(2)=45,(4)=61]);

> S[1], S[2];

1.2.6 Strings
- Chuỗi gồm các ký tự giữa 2 nháy kép (“”).
Ví dụ:
> s := "hello.";
length(s);
s[2 4];
Kết quả:



- Lệnh parse: phân tích 1 chuỗi

> expr := parse("x^2+y^2=1");
Kết quả:

> s := convert(expr,string);
Kết quả:

Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng

16


1.3 Xử lý các biểu thức
- Các kiểu biểu thức bao gồm các lệnh:
+ simplify
+ factor
+ expand
+ convert
+ normal
+ combine
+ map
+ lhs, rhs
+ numer, denom
+ nops, op
+ subs, algsubs
Ví dụ:
>

Kết quả:


>
Kết quả:



- Các lệnh khác: value, eval, evalf.

> L := a+b^2+c;

nops(L);
op(L);
op(2,L);
Kết quả:


Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
17


> L := a+b^3+c;
algsubs(b^2=(a+1)^3,L);
Kết quả:



1.4 Tính toán đa thức
1.4.1 Các hàm tiện ích
- Các hàm:
Hàm
Ý nghĩa
Ví dụ
coeff
Lấy một hệ số của một đa thức
> p := 2*x^2 + 3*y^3 -
5
#lấy hệ số x
2


> coeff(p,x,2);

> coeff(p,x^2);

coeffs
Lấy tất cả các hệ số của một đa
thức
> s :=
3*v^2*y^2+2*v*y^3;

> coeffs( s );

> coeffs( s, v, 't' );

degree
Lấy số mũ cao nhất của 1 biến
trong đa thức
> a := x^4-10*x^2+1;

> degree(a,x);

> ldegree(a,x);

ldegree
Lấy số mũ thấp nhất của 1 biến
trong đa thức
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng

18
lcoeff
Lấy hệ số của biến có mũ cao nhất
> p := x + 4*x*y + 5*y
- 7*x^2;

> lcoeff(p);

> tcoeff(p);

tcoeff
Lấy hệ số của biến có mũ thấp nhất
collect
Rút gọn biểu thức
> f := a*ln(x)-ln(x)*x-
x;

> collect(f,ln(x));

Ví dụ:
> p := 2*x^3-x^2*y +5*y^3-4;
Kết quả:

> coeffs(p);
Kết quả:


> coeff(coeff(p,x,0),y,0);

> tcoeff(p);

lcoeff(p);


1.4.2 Các toán tử trên các đa thức
Bao gồm các phép toán sau:
+, -
Cộng và trừ
*, ^
Nhân và lũy thừa
content
Nội dung của đa thức
divide
Phép chia chính xác
gcd
USCLN của 2 đa thức
lcm
Bội số chung nhỏ nhất của 2 đa thức
prem

primpart
Phần nguyên của đa thức
rem

Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
19
quo
Thương của 2 đa thức
1.5 Tìm nghiệm phương trình, hệ phương trình, bất phương trình

Để tìm nghiệm các phương trình, bất phương trình và hệ phương trình… trong maple
cho sử dụng hàm solve và fsolve để tìm nghiệm cho các phương trình trên.
Ví dụ:
Phƣơng trình bậc 2
> #solve(x^2+x-1=0, x);
solve(x^2+m*x+1=0,x);

Kết quả: cho 2 nghiệm x1,x2

Bất phƣơng trình
>


Kết quả:



Phƣơng trình bậc 6
> solve( x^6-2*x^2+2*x, x );

Kết quả:

Sử dụng fsolve
> fsolve( tan(sin(x))=1, x );

Kết quả:

> poly := 23*x^5 + 105*x^4 - 10*x^2 +
17*x:
fsolve( poly, x, -1 1 );

Kết quả:





Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
20
CHƢƠNG 2: LẬP TRÌNH SYMBOLIC TRONG MAPLE
1.1 Các yếu tố của ngôn ngữ lập trình
1.2 Lệnh cơ sở, lệnh điều khiển
1.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;
Chức năng: 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.
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.

Ví dụ:
> a:= 3: b:=5: if evalb(a > b) then a else b end if;
5*(Pi + `if`(a > b,a,b));


>
1.2.2 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
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
21
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. 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. Để thoát ra khỏi
vòng lặp, ta có thể sử dụng các lệnh sau: RETURN, break hoặc quit, done, stop.
1.2.3 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 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, done, stop, RETURN giống như trong vòng lặp while.
Ví dụ:
1) In các số chẵn từ 6-100
> for i from 6 by 2 to 100 do print(i) end do;
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
22
2) Tính tổng của 1 dãy

> tot:=0;
for z in bob do
tot:=tot+z
end do;
3) Nhân các giá trị trong biểu thức với nhau
> tot := 1;
for z in 1, x, y, q^2, 3 do
tot := tot*z;
end do;
1.2.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).
1.2.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 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
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
23
1.2.6 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.
Ví dụ: Nếu không có lệnh return thì kết quả tính toán sau cùng của thủ tục chính là
kết quả trả về.
> F := proc(n)
if n = 0 or n=1 then
return 1;
end if;
return F(n-1)+F(n-2);
end proc:
1.3 Thủ tục, hàm hay chu trình (procedure)
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.
Một chương trình tính toán thường có 03 phần:
+ Dữ liệu vào
+ Phương pháp
+ Kết quả
Cấu trúc của Maple có dạng:
Tên_chương_trình := proc(các đối số)
local các_biến;
Thuật toán xử lý;
end;
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
24
1.3.1 Cấu trúc thủ tục
Cấu trúc cú pháp:
proc (argseq)
local nseq;
global nseq;
options nseq;
description stringseq;
statseq
end proc

proc (argseq)::type;
local var1::type1, var2::type2, ;
global nseq;
options nseq;
description stringseq;
statseq
end proc
Trong đó:
argseq:
Tên tham số
type
Kiểu giá trị trả về
nseq
Tên biến toàn cục
var1,var2
Tên biến cục bộ thủ tục
type1,type2
Kiểu của biến
stringseq
Mô tả cho thủ tục
statseq
Nội dung của thủ tục
Ví dụ:
> lc := proc( s, u, t, v )
description "form a linear combination of the
arguments";
s * u + t * v
end proc;
1.3.2 Cấu trúc chu trình
Khai báo chu trình:

procedure_name:=proc(parameter_sequence)
[local local_sequence]
[global global_sequence]
[options options_sequence]
statements_sequence;
end;
Trong đó:
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
Bài thu hoạch môn Lập trình Symbolic

GVHD: PGS.TS. Đỗ Văn Nhơn HVTH: Nguyễn Mai Thƣơng
25
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.
 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.
 Phạm vi biến
1.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 đó.
2.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ì.
3.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ử.
 Định giá trên các biến
1.Định giá trị tên hàm và tham biến
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.
2.Định giá biến cục bộ và biến toàn cục

×