Baiso8 (Laptrinhtrongmaple2)

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 19

LậP TRÌNH TRONG MAPLE…

Người soạn: LêMinh Trung


Vòng lặp While…

 Cú pháp:
while
Phải là kiểu
điều_kiện
Boolean
do
công_việc
od;
 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 In ra x

r := x mod y

x:=y

y:=r
Minh hoạ thuật toán…

x 12
630 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?

You might also like