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

LẬP TRÌNH SYBOLIC -MAPLE 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.61 MB, 43 trang )

ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
_____  _____

BÀI THU HOẠCH MÔN HỌC
LẬP TRÌNH SYBOLIC


Đề tài:
LẬP TRÌNH SYBOLIC -
MAPLE VÀ ỨNG DỤNG


Giao viên hướng dẫn : PGS.TS Đỗ Văn Nhơn
Học viên thực hiện: Nguyễn Thị Thu Thủy
Mã số: CH1101142



Năm 2013
TP. Hồ Chí Minh, tháng 01 năm 2013
MỤC LỤC
CHƯƠNG 1 TÍNH TOÁN SYMBOLIC TRONG MAPLE 5
1.1 Giới thiệu Maple 5
1.2 Các hàm tính toán cơ bản 6
1.2.1 Tính toán số chính xác và gần đúng 6
1.2.2 Tính toán symbolic 6
1.2.3 Tính toán số nguyên, số hữu tỉ, số thực, số phức 7
1.2.4 Tính đạo hàm: 9
1.2.5 Tính tổng vô hạn 10
1.2.6 Khai triển Maclaurin 10


1.2.7 Giải phương trình, hệ phương trình (có thể tính theo tham số) 10
1.2.8 Đơn giản biểu thức 10
1.3 Các kiểu cấu trúc cơ bản 11
1.3.1 Sequence (dãy) 11
1.3.2 Lists (danh sách) 12
1.3.3 Sets (tập hợp) 13
1.3.4 Arrays (mảng) 14
1.3.5 Tables (bảng) 15
1.3.6 Strings 15
1.4 Xử lý các biểu thức 16
1.5 Tính toán đa thức 17
1.5.1 Các hàm tiện ích 17
1.5.2 Các toán tử trên các đa thức 19
1.6 Tìm nghiệm phương trình, hệ phương trình, bất phương trình 19
CHƯƠNG 2 CƠ SỞ LẬP TRÌNH SYMBOLIC TRONG MAPLE 21
2.1 Các yếu tố của ngôn ngữ lập trình 21
2.2 Lệnh cơ sở, lệnh điều khiển 21
2.2.1 Lệnh điều kiện IF 21
2.2.2 Vòng lặp While 22
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
2
2.2.3 Vòng lặp for 22
2.2.4 Lệnh Break 24
2.2.5 Lệnh Next 24
2.2.6 Hàm Return, Error 25
2.3 Thủ tục, hàm hay chu trình (procedure) 25
2.3.1 Cấu trúc thủ tục 26
2.3.2 Cấu trúc chu trình 27

2.4 Giải một số bài tập sử dụng hàm trong Maple 29
2.4.1 Giải phương trình bậc 2 29
2.4.2 Giải hệ phương trình 29
2.4.3 Giải bất phương trình 30
2.4.4 Tìm hình chiếu của 1 đường thẳng 30
CHƯƠNG 3 : LẬP TRÌNH MỘT SỐ ỨNG DỤNG TRONG MAPLE 31
Chương trình xây dựng trên thư viện hỗ trợ tính toán Maple 16. 31
3.1 Giải phương trình bậc 2: 31
3.1.1 Đặt vấn đề bài toán 31
3.1.2 Biểu diễn bài toán 31
3.1.3 Thuật toán 31
3.1.4 Cài đặt thuật toán 32
3.1.5 Chạy thử nghiệm 33
3.2 Giải bài toán đại số vector 2D: 33
3.2.1 Cơ sở lý thuyết về vector 33
3.2.2 Đặt vấn đề bài toán 38
3.2.3 Cài đặt thuật toán 38
3.2.4 Chạy thử nghiệm 39
CHƯƠNG 4 KẾT LUẬN 41
* * *
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
3
LỜI CẢM ƠN
Trong suốt thời gian học vừa qua, chúng em đã nhận được sự quan tâm,
động viên và tận tình dạy dỗ của thầy, đã cung cấp những kiến thức hết sức bổ
ích và cần thiết để chuẩn bị cho các môn học tiếp theo ở khóa học.
Chúng em xin chân thành cảm ơn quý thầy cô trường Đại học Công Nghệ
Thông Tin, Ban Giám Hiệu đã tạo cho chúng em một môi trường học tập, rèn

luyện đạo đức, nhân cách trong suốt thời gian học đã cung cấp những kiến thức
cũng như những kinh nghiệm hết sức cần thiết cho việc học tập và nghiên cứu.
Đặc biệt, chúng em xin gửi lời cảm ơn chân thành đến PGS.TS Đỗ Văn
Nhơn, Thầy đã truyền đạt những kiến thức quý báu về môn học Lập trình
Symbolic trong Trí tuệ nhân tạo, tận tình hướng dẫn chúng em thực hiện tiểu
luận môn Lập trình Symbolic trong Trí tuệ nhân tạo.
Tuy nhiên, do những hạn chế về mặt thời gian, chúng tôi rất mong nhận
được sự chỉ bảo tận tình của quý thầy cô và sự phản hồi góp ý của các bạn đối
với những thiếu xót còn tồn tại trong đề tài này. Nhóm chúng em rất mong được
sự đóng góp nhiệt tình của quý Thầy Cô để bài luận được hoàn thiện hơn.


Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
4
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN





















Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
5
CHƯƠNG 1 TÍNH TOÁN SYMBOLIC TRONG MAPLE
1.1 Giới thiệu Maple
Maple là 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. Maple ra đời năm 1991 đến nay đã
phát triển đến phiên bản 16. Maple có cách cài đặt đơn giản, chạy được trên
nhiều 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ó
trình trợ giúp rất dễ sử dụng. Từ phiên bản 7, 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 học phổ thông và
đại học. Ưu điểm đó làm cho nhiều người 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 áp dụng trong dạy học toán và các công việc
tính toán đòi hỏi của thực tiễn và sự phát triển của giáo dục.
Có thể nhận thấy rằng ngoài các tính năng tính toán và minh họa rất mạnh
mẽ bằng các câu lệnh riêng biệt (thường chỉ cho ta kết quả cuối cùng), Maple
còn là một ngôn ngữ lập trình hướng thủ tục (procedure). Thủ tục là một dãy các
lệnh của Maple theo thứ tự mà người lập trình định sẵn để xử lí một công việc
nào đó, khi thực hiện thủ tục này Maple sẽ tự động thực hiện các lệnh có trong
thủ tục đó một cách tuần tự và sau đó trả lại kết quả cuối cùng.
Maple có các chức năng cơ bản 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 được hầu hết các phép toán cơ bản trong chương trình
toán đại học và sau đại học.
+ Cung cấp các công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị động
và tĩnh của các đường và mặt được cho bởi các hàm tùy ý và trong các hệ tọa độ
khác nhau.
+ Là một 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ữ lập trình khác.
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
6
+ Cho phép trích xuất ra các định dạng khác nhau như 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 trợ giáo hữu ích cho học sinh sinh viên trong việc tự học.
1.2 Các hàm tính toán cơ bản
1.2.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.2.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ả:





Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
7
- 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ả:

- 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.2.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
>

Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
8
+ giai thừa, hàm length
Ví dụ: Tính giai thừa của 10 và tính chiều dài của 1 số
>

>

+ 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ố
>

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)
>

Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
9
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);


- Tính toán số phức: 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à số Pi.
Ví dụ:
> a := Pi^2+1;

evalf(a,30);
x := 5;
Kết quả:



1.2.4 Tính đạo hàm:
Ví dụ:
> Diff(sin(x)*ln(x), x);
#value(%);
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
10
diff(sin(ln(x))-x^3,x);
Kết quả:


1.2.5 Tính tổng vô hạn
Ví dụ:
> Sum(n^2, n);
#value(%);
sum(n^2,n);
Kết quả:


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


1.2.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.2.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ả:


Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
11
1.3 Các kiểu cấu trúc cơ bản
1.3.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:


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ả:




Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
12
1.3.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.

>

Kết quả:




- Gép hai List lại với nhau:
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
13

1.3.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)];
convert(L, set);
Kết quả:




Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
14


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



1.3.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 “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
15



1.3.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.3.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];
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
16
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ả:



1.4 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ả:

Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
17


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

> L := a+b^2+c;
nops(L);
op(L);
op(2,L);
Kết quả:





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



1.5 Tính toán đa thức
1.5.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;


Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
18
> 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
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);
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
19
lcoeff(p);


1.5.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

quo
Thương của 2 đa thức
1.6 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ả:

Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
20


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 “Lập trình Sybolic – Maple và ứng dụng”


GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
21
CHƯƠNG 2 CƠ SỞ LẬP TRÌNH SYMBOLIC TRONG MAPLE
2.1 Các yếu tố của ngôn ngữ lập trình
2.2 Lệnh cơ sở, lệnh điều khiển
2.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: 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.
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));


Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”


GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
22
>
2.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 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.
2.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
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”


GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
23
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;
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;
Bài thu hoạch “Lập trình Sybolic – Maple và ứng dụng”

GVHD: PGS.TS Đỗ Văn Nhơn SVTH: Nguyễn Thị Thu Thủy
24
2.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).
2.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

×