Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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ừ 1020 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?