Baiso8(Laptrinhtrongmaple2)

Download Report

Transcript Baiso8(Laptrinhtrongmaple2)

LậP TRÌNH TRONG MAPLE…
Người soạn: LêMinh Trung
Vòng lặp While…

Cú pháp:
while
điều_kiện
do
công_việc
od;


Phải là kiểu
Boolean
Trong khi điều_kiện đúng , thực thi công việc.
Dùng các câu lệnh như RETURN,break,quit để thoát
ra giữa vòng lặp.
Tìm USCLN và BSCNN cuả x,y…

Dùng thuật toán Euclide:
Nhập x,y
Y<>0
r := x mod y
x:=y
y:=r
In ra x
Minh hoạ thuật toán…
x
12
6
30
While y<> 0 do
r = x mod y
y
12
6
0
x:= y
y := r
r
6
0
In ra x=6
Chương trình…
> x:=30;
y:=12;
m:=x;
n:=y;
while y<>0 do
r:=irem(x,y);
x:=y;
y:=r;
od:
USCLN:=x;
BSCNN := (m*n)/x;
print(`USCLN la:`);
value(USCLN);
print(`BSCNN la:`);
value(BSCNN);
Ví dụ khác…

In ra các phần tử từ 1020 cuả dãy Fibonacci
F(0):=1:
F(1):=1: n:=2:
while n<=20 do
F(n):=F(n-1)+F(n-2):
n:=n+1:
od:
seq(F(k),k=10..20);

Viết proc trả về list chứa dãy n số fibonacci đầu tiên,
không dùng đệ quy
Vòng lặp for…

Cú pháp:
for name from start by change to finish
do
dãy_câu_lệnh
od;
| for <name> | | from <expr> | | by <expr> | | to <expr> | | while <expr> |
do <statement sequence> end do;
OR
| for <name> | | in <expr> | | while <expr> |
do <statement sequence> end do;
Ví dụ…
1) Print even numbers from 6 to 100.
> for i from 6 by 2 to 100 do print(i) end do;
2) Find the sum of all two-digit odd numbers.
> tot := 0;
for i from 11 by 2 while i < 100 do
tot := tot + I end do;
3) Multiply the entries of an expression sequence.
> tot := 1;
for z in 1, x, y, q^2, 3 do tot := tot*z;
end do;
Ví dụ…
Viết chương trình để tính tổng các phần tử dương trong một
list.
> restart;
> myList:=[1,4,8,-3,-5,7,3,-2,-3];
tong:=0:
for number in myList do
if number > 0 then
tong:=tong +number;
end if
end do;
print(`Tong cac phan tu duong trong list la`); tong;

Lệnh rẽ nhánh if…
Cú pháp:
if <conditional expression> then
<statement sequence>
| elif <conditional expression> then
<statement sequence> |
| else <statement sequence> |
end if

Ví dụ…
Tạo một mảng ngẫu nhiên gồm 15 phần tử và
sắp xếp mảng theo thứ tự tăng dần.
mang:=array[1..15]:
for i from 1 to 15 do
mang[i]:=rand(1..100)():
end do;
print(`Mang truoc khi sap xep`);
seq(mang[i],i=1..15);
for i from 2 to 15 do
x:=mang[i]: j:=i;
while (mang[j-1]>x) and (j>1) do
mang[j]:=mang[j-1]: j:=j-1:
end do;
mang[j]:=x:
end do;
print(`Mang sau khi sap xep`);
seq(mang[i],i=1..15);
Ví dụ…
Tìm phần tử nhỏ nhất trong một danh sách
aList:=[2,-4,6,-45,23,100,0,0,4,-7]:
m:=op(1,aList):
for k from 2 to nops(aList) do
if op(k,aList)<m then
m:=op(k,aList):
end if;
end do;
print(`Phan tu nho nhat cua list:`); value(m);
Ví dụ…
> a := 3; b := 5;
a := 3
b := 5
> if (a > b) then a else b end if;
5
> 5*(Pi + `if`(a > b,a,b));
5 Pi + 25
> x := `if`(a < b,NULL,b);
x :=
> if FAIL then 3 else 5 end if;
5
Ví dụ…
> restart;
> gptbh:=proc(a,b,c)
local delta,x1,x2;
delta:=b^2-4*a*c;
if delta < 0 then
print(`Phuong trinh vo nghiem`);
elif delta = 0 then
x1:=-b/(2*a);
print(`Phuong trinh co nghiem kep:`,x1);
else
print(`Phuong trinh co hai nghiem phan biet`);
x1:=(-b+sqrt(delta))/(2*a):
x2:= (-b-sqrt(delta))/(2*a):
print(x1,x2);
end if;
end proc;
> gptbh(1,2,1);
Break;


Dùng để thoát ra ngay lập tức vòng lặp
for/while.
Break không đặt trong vòng lặp nào sẽ gây
ra lỗi.
Ví dụ…
> L := [1, 2, "abc", "a", 7.0, infinity]:
for x in L do
if type(x, 'string') then
print(x);
break;
end if;
end do;
Next;


Next nằm trong vòng lăp for/while dùng để
bỏ qua một số lệnh cuả vòng lặp.
Khi lệnh next thực thi các lệnh sau next sẽ bị
bỏ qua và ngay lập tức nhảy tới vòng lặp kế
tiếp.
Ví dụ…
> for n from 1 to 3 do
if n=2 then next; end if;
print(n);
end do;
Bài tập


Viết proc trả về danh sách các số nguyên tố
trong khoảng cho trước.
Không dùng hàm isprime, hãy viết hàm kiểm
tra xem một số có là số nguyên tố hay
không?