Mô tả
• Cấu trúc proc()...end đ−ợc dùng để định nghĩa hàm bao gồm các lệnh đ−ợc xử lý theo bó (batch processing), tức là thực hiện một dãy các lệnh liên tiếp nhau mà không có sự can thiệp trực tiếp của ng−ời dùng.
• Cấu trúc này đ−ợc sử dụng tiện lợi khi mà ta cần thực hiện những tính toán trong đó không thể thực hiện đ−ợc bằng cách gọi các hàm lồng nhau hoặc bằng cách dùng toán tử định nghĩa hàm -> nh− ở trên, nhất là khi phép tính cần kết hợp kết quả của nhiều hàm để thực hiện một công việc. Khi thực hiện một chu trình của Maple, ta chỉ cần lấy (có thể chỉ là một phần) kết quả của hàm tr−ớc truyền cho hàm tiếp theo, và do đó ta không thể dùng hàm gọi các hàm lồng nhau hay định nghĩa bằng toán tử định nghĩa hàm đơn giản ->
đ−ợc.
• Cấu trúc này là thành phần cơ bản cho lập trình trên Maple. Chi tiết về nội dung và cách sử dụng của cấu trúc proc()..end sẽ đ−ợc trình bày trong ch−ơng sau. Trong phần này, ta chỉ đề cập đến những chu trình đơn giản nhất.
Ví dụ minh hoạ
Để định nghĩa một chu trình bằng cách sử dụng proc()..end ta cần gọi dãy các hàm giữa hai từ khoá proc() và end, tham số của chu trình đ−ợc khai trong dấu ngoặc, tên chu trình đ−ợc gán nh− gán tên các hàm thông th−ờng. Ví dụ sau là một số các chu trình định nghĩa số phức, tính tổng và tính tích hai số phức, lấy phần thực và phần ảo của một số phức. Trong các chu trình này ta chỉ kết hợp việc sử dụng các kết quả của các hàm trong Maple để tính toán:
[>#tao mot so phuc tu phan thuc va ao comp:=proc(r,i)
RETURN([r,i]); end:
#tim phan thuc cua so phuc crel:=proc(c)
RETURN(op(1,c)); end:
#tim phan ao cua so phuc cimg:=proc(c)
RETURN(op(2,c)); end:
#tong cua hai so phuc c_cong:=proc(c1,c2) local r1,i1,r2,i2,c; r1:=crel(c1);i1:=cimg(c1); r2:=crel(c2);i2:=cimg(c2); c:=comp(r1+r2,i1+i2); RETURN(c); end:
#tich cua hai so phuc c_nhan:=proc(c1,c2) local r1,i1,r2,i2,c; r1:=crel(c1);i1:=cimg(c1); r2:=crel(c2);i2:=cimg(c2); c:=comp(r1*r2-i1*i2,r1*i2+r2*i1); RETURN(c); end: [>A:=comp(1,2); := A [1 2, ] [>B:=comp(3.5,-1); := B [3.5 -1, ] [>c_cong(A,B); [4.5 1, ] [>c_nhan(A,B); [5.5 6.0, ]
Các chu trình sẽ mạnh hơn nếu chúng ta kết hợp việc sử dụng các hàm, các toán tử khai báo trong chu trình với lệnh điều kiện và các lệnh lặp nh− trong các ngôn ngữ lập trình truyền thống.
Ví dụ sau đây là một chu trình về việc xây dựng một hàm tính giá trị lớn nhất của ba số thông qua việc sử dụng lệnh điều kiện if..then..else..fi:
[>max3:=proc(a,b,c)
print(`Gia tri lon nhat trong ba so la:`); if a<b then
if b<c then c else b fi; elif a<c then c else a fi; end:
Sau khi khai báo chu trình, ta có thể sử dụng chúng bằng cách gọi chu trình nh−
sau:
[>max3(10,100,-2.34);
Gia tri lon nhat trong ba so la:
100
Sau đây là một ví dụ khác về sử dụng cấu trúc proc()..end để định nghĩa hàm thực hiện tính số hạng thứ n của dãy Fibonaci, là dãy đ−ợc định nghĩa nh− sau: u[0]=1;u[1]:=1;u[n]:=u[n-1]+u[n-2];n>=2; Trong chu trình này ta sử dụng vòng lặp
for..do..od : [>u:=proc(n)
local a,b,c,i; a:=1;b:=1; if n<0 then
print(`Khong co gia tri`); elif n<=1 then
print(`Gia tri thu`,n,`bang:`,a); else for i from 2 to n do c:=a+b;a:=b;b:=c; od; print(c); fi; end:
Gọi chu trình tính giá trị của phần tử thứ n trong dãy: [>u(1000); 70330367711422815821835254877183549770181269836358732742604905 08715453711819693357974224949456261173348775044924176599108818 63632654502236471060120533741212738673391111981393731255987676 90091902245245323403501