Học Pascal/Hàm và Thủ tục

Tủ sách mở Wikibooks
Bước tới điều hướng Bước tới tìm kiếm

Chương trình con[sửa]

Là chương trình thực hiện nhiệm vụ, chức năng nào đó

Thủ tục[sửa]

Định nghĩa[sửa]

Thủ tục là một tập hợp của nhiều dòng lệnh mà việc thực hiện thủ tục không trả về giá trị kết quả qua tên thủ tục.

Cú pháp[sửa]

Procedure <tên th tc>(<danh sách tham s>);
<phn khai báo>
Begin
   <dãy lnh>
End;

Trong đó:

  • <danh sách tham số> có thể có hoặc không.
  • <phần khai báo> dùng để xác định các hằng, kiểu, biến và cũng có thể xác định các chương trình con khác được sử dụng trong thủ tục. Lưu ý : các kiểu, biến, hằng này chỉ có thể sử dụng trong thủ tục này.
  • <dãy lệnh> sẽ đựợc thực hiện khi chạy thủ tục.

Loại thủ tục[sửa]

  • Thủ tục trống dùng để thực thi một việc mà không cần đến thông số.
  • Thủ tục cần thông số là Thủ tục cần phải biết giá trị của các thông số trước khi nó thực thi chức năng của mình và trả về một kết quả

Thí dụ thủ tục trống[sửa]

Uses crt;
Procedure OK; 
  Begin
    {Đổi màu màn hình cho đến khi có một phím được nhấn}
    randomize;
       textbackground(10);
       clrscr;
       delay(500);
    End;
Begin
  ok;
  readln
End.

Thí dụ thủ tục cần thông số[sửa]

Chương trình Giải
var a, b: integer;
Procedure Doi(a, b : byte); 
  Begin
    a:= iny;
    b:= inx;
  End;
Begin
  write('Nhập a, b: '); readln(a,b);
  Doi(a,b);
  writeln('Sau khi hoán đổi: a=',a,' và b=',b);
  readln
End.




Nhập a, b: 1 2

Ban đầu:a =1 b=2

Doi(a,b):

a:= iny; {a = 2}

b:= inx: {b = 1}

Kết quả:

a=2 b=1

Hàm Pascal[sửa]

Định nghĩa[sửa]

Hàm Pascal là một tập hợp của nhiều dòng lệnh từ các lệnh mặc định để thực thi một việc. Việc thực hiện hàm luôn trả về giá trị kết quả thuộc kiểu xác định và giá trị đó được gán cho tên hàm.

Cấu trúc[sửa]

Function <tên hàm>(<danh sách tham s>):<kiu d liu>;
<phn khai báo>
Begin
   <dãy lnh>
end;

Trong đó:

  • <danh sách tham số> có thể có hoặc không.
  • <phần khai báo> dùng để xác định các hằng, kiểu, biến và cũng có thể xác định các chương trình con khác được sử dụng trong hàm. Lưu ý các hằng, biến, kiểu chỉ sử dụng trong hàm này.
  • <kiểu dữ liệu> hàm có kiểu dữ liệu bởi vì nó cho ra đáp một đáp án.
  • <dãy lệnh> là các câu lệnh khi chạy hàm này.

Thí dụ[sửa]

Chương trình Giải
Program S_nh_nht;
Var a, b, c:real;
Function Min(a, b:real):real;
  begin
    if a<b then Min:=a else Min:=b;
  end;
Begin
  write('Nhập a, b, c: ');
  readln(a,b,c);
  writeln('Số nhỏ nhất là: ', Min(Min(a,b),c));
  readln
End.

Nhập a, b, c: 1 9 5
Ta có: 1<9 → a<b → Min(a,b)=a=1
Mặt khác: 1<5→ Min(a,b)<c → Min(Min(a,b),c)=Min(a,b)=a=1
Số nhỏ nhất là: 1


Nhập a, b, c: 5 5 3
Ta có: 5=5 → a=b → Min(a,b)=b=5
Ta lại có: 5>3 → Min(a,b)>c → Min(Min(a,b),c)=c=3
Số nhỏ nhất là: 3

Chương trình con và những điều cần lưu ý[sửa]

Lợi ích của chương trình con (hàm và thủ tục)[sửa]

  • Tạo đựợc câu lệnh cho riêng mình.
  • Khi sử dụng chương trình con khi thực hiện một thuật toán lớn, thì khi có lỗi thì chỉ việc xem lỗi ở đâu rồi sửa tại đó.
  • Khi chạy có cấu trúc song song sẽ dễ hiểu code hơn, hoặc có thể xem thuật toán đúng chưa trước khi ráp chương trình lại.
  • Khi cần thực hiện một thuật toán nào đó nhiều lần thì chỉ vỏn vẹn 1 câu lệnh trong chương trình chính.

Khi nào cần dùng Hàm ? Khi nào cần dùng Thủ tục ?[sửa]

Dùng hàm khi cần trả về một giá trị hay giải thuật đệ quy. Dùng thủ tục khi trả về nhiều giá trị và có nhiều câu trúc. Một điều thú vị đó là nếu thuật toán chạy được ở hàm thì khi chuyển qua thủ tục vẫn làm được nhưng sẽ tốn thời gian và công sức hơn bởi vì khi chuyển qua rất phức tạp (chỉ những toán lớn và phức tạp).

Học Pascal/Danh sách lệnh-->