//
you're reading...
00 - Chủ đề chung, Dùng cho cấp THCS, Dùng cho cấp THPT

Chương trình con: Thủ tục (Procedure) và Hàm (Function)

1.Chương trình con


Với một số bài toán và phức tạp, người ta thường chia nó thành nhiều đoạn chương trình nhỏ. Ta tiến hành giải các bài toán nhỏ này rồi ghép vào được kết quả của bài toán lớn ban đầu. Trong Turbo Pascal cũng cho phép chúng ta làm như vậy. Bài học này chúng ta sẽ đề cập đến:

• Một số khái niệm về chương trình con……………………Start
• Thủ tục không có tham chiếu……………………………Start
• Thủ tục có tham chiếu…………………………………Start
• Hàm…………………………………………………Start
• Chương trình con đệ quy……………………………….Start


2. Một số khái niệm về chương trình con


Chương trình là một dãy lệnh được xây dựng cho máy tính nhằm hoàn thành một công việc nào đó. Công việc này có thể bao gồm nhiều công việc nhỏ và đến lượt chúng lại được tổ chức như những chương trình. Như vậy, lời gọi các chương trình này sẽ được xuất hiện trong các lệnh của chương trình đang xét. Chúng được gọi là những chương trình con.


3. Vai trò của chương trình con


– Cho phép phân chia bài toán phức tạp thành nhiều bài toán đơn giản hơn
– Nâng cao tính độc lập trong việc xây dựng chương trình.
– Là phương thức thực hiện kĩ thuật lập trình từ trên xuống .
– Cho phép xây dựng thư viện lập trình, kế thừa các kết quả đã có, giảm chi phí và công sức trong việc viết chương trình.

Nói chung khi viết chương trình, những đoạn chương trình nào được thực hiện nhiều hơn 1 lần thì nên viết dưới dạng chương trình con
Giống như mọi đối tượng tham gia chương trình, mỗi chương trình con đều phải đặt tên theo qui tắc đặt tên. Mỗi khi gọi tên của chương trình con nào thì chương trình con ấy được thực hiện.
Các chương trình con được gọi trong một chương trình cần được hệ thống nhận biết. Tất cả các chương trình con còn lại trong chương trình đều phải được khai báo trước khi dùng.
Một số khái niệm về chương trình con


4. Cấu trúc của chương trình con


+ Phần tiêu đề
+ Phần khai báo ( ở đây là khai báo địa phương)
+ Phần thân chương trình con

• Thân chương trình con bắt đầu bằng từ khoá Begin và kết thúc bởi từ khoá End cùng với dấu chấm phẩy ( 😉 theo sau.

• Phần thân của chương trình con có cấu trúc như sau

Begin

các câu lệnh của chương trình con

End ;

• Một chương trình con là thủ tục, phần tiêu đề phải bắt đầu bằng từ khoá PROCEDURE

• Một chương trình con là hàm, phần tiêu đề phải bắt đầu bằng từ khoá FUNCTION


5.Thủ tục không có tham chiếu


5.1. Khai báo

PROCEDURE TênThủTục ;

Khai báo địa phương

Begin

Các câu lệnh

End ;

5.2. Gọi thủ tục không có tham chiếu
Để gọi thủ tục không có tham chiếu, ta chỉ cần viết tên của nó. Nhưng phải chú ý là tên thủ tục không được viết trong thành phần của một biểu thức.

5.3. Ví dụ
5.3.1. Bài toán
Người ta cần tính chu vi, diện tích và đường chéo của hình chữ nhật khi nạp vào cho máy hai kích thước của mỗi hình.

5.3.2. Chương trình:

Program Tinh_Ba_Gia_Tri ;
Uses Crt ;
Var 
     K1, K2 : Real ;
     tiep: char;
Procedure NhapKichThuoc ;
Begin
     Repeat
          Writeln(‘ Cho biet kich thuoc thu nhat cua hinh chu nhat: ‘) ;
          Readln ( k1) ;
          Writeln(‘ Cho biet kich thuoc thu hai cua hinh chu nhat: ‘) ;
          Readln ( k2) ;
          If (K1 <= 0) OR (K2 <= 0) Then writeln(‘ Kich thuoc phai la so duong ! Moi nhap lai! ‘)
     Until ( K1>0 ) And ( K2 > 0) ;
End;

Procedure Tinh_chu_vi;
Begin
       Writeln ( ‘ Chu vi la ‘ , 2*(K1 + K2) : 9 : 3 ) ;
End;

Procedure Tinh_dien_tich;
Begin
      Writeln ( ‘ Dien tich la ‘ , K1 * K2 : 9 : 3 ) ;
End;

Procedure Tinh_duong_cheo;
Begin
       Writeln ( ‘ Duong cheo la‘ ,SQRT(K1*K1 + K2*K2):9:3) ;
End ;

BEGIN
     Clrscr ;
     Repeat
        NhapKichThuoc ;
        Tinh_chu_vi;
        Tinh_dien_tich;
        Tinh_duong_cheo;
        Write('  Co thuc hien tiep khong ? (c/k) ');
        Readln(tiep);
    until upcase(tiep) ='K';
END .

5. 4. Ghi nhớ

5. 4.1. Khai báo thủ tục không có tham chiếu
a. Phần tiêu đề

Procedure TênThủTục ;
Tên thủ tục được đặt theo quy tắc đặt tên .

b. Khai báo địa phương
Tương tự như khai báo ở chương trình chính. Các hằng, kiểu, biến, chương trình con khai báo ở một thủ tục nào thì chỉ hoạt động trong thủ tục đó.
c. Thân thủ tục

Tương tự như thân chương trình chính, nhưng kết thúc là từ khoá End với dấu chấm phẩy ( 😉

5.4.2. Gọi thủ tục không có tham chiếu
Ở đâu cần đến thủ tục nào thì gọi tên thủ tục đó. Thủ tục khai báo sau thì có thể gọi thủ tục cùng cấp khai báo trước, ngoại trừ các chương trình con cục bộ của chúng.


6.Thủ tục có tham chiếu


6.1. Khai báo

PROCEDURE TênThủTục (VAR <tên biến>:<kiểu dữ liệu>,<tên biến>:<kiểu dữ liệu>, ... );

Khai báo địa phương

Begin

Các câu lệnh

End ;

(1) Những biến khai báo có từ khóa VAR sẽ dùng chung ô nhớ với chương trình chính và sẽ cập nhật biến trong quá trình thực hiện lệnh tham chiếu có tính toán dữ liệu.

(2) Những biến khai báo không có từ khóa VAR sẽ dùng riêng ô nhớ cấp phát cục bộ bên trong chương trình con và các biến này sẽ bị xóa khi thoát khỏi chương trình con .
5.2. Gọi thủ tục có tham chiếu
Để gọi thủ tục có tham chiếu, ta chỉ cần viết tên của nó và danh sách các biến tham chiếu lần lượt theo đúng trình tự và đúng kiểu dữ liệu đã khai báo. Nhưng phải chú ý là tên thủ tục không được viết trong thành phần của một biểu thức.

5.3. Ví dụ
5.3.1. Bài toán
Người ta cần tính chu vi, diện tích và đường chéo của hình chữ nhật khi nạp vào cho máy hai kích thước của mỗi hình.

5.3.2. Chương trình:

Program Tinh_Ba_Gia_Tri_ver_02 ;
Uses Crt ;
Var 
     K1, K2 : Real ;
     tiep: char;
Procedure NhapKichThuoc (VAR a, b: real);
Begin
     Repeat
          Writeln(‘ Cho biet kich thuoc thu nhat cua hinh chu nhat: ‘) ;
          Readln ( a) ;
          Writeln(‘ Cho biet kich thuoc thu hai cua hinh chu nhat: ‘) ;
          Readln ( b) ;
          If (a <= 0) OR (b <= 0) Then writeln(‘ Kich thuoc phai la so duong ! Moi nhap lai! ‘)
     Until ( a>0 ) And ( b > 0) ;
End;

Procedure Tinh_chu_vi( a, b: real); 
Begin 
     Writeln ( ‘ Chu vi la ‘ , 2*(a + b) : 9 : 3 ) ; 
End;  

Procedure Tinh_dien_tich(a, b: real); 
Begin 
       Writeln ( ‘ Dien tich la ‘ , a *b : 9 : 3 ) ; 
End; 

Procedure Tinh_duong_cheo(a,b: real); 
Begin 
      Writeln ( ‘ Duong cheo la‘ ,SQRT(a*a + b*b):9:3) ; 
End ; 

BEGIN 
     Clrscr ; 
     Repeat 
          NhapKichThuoc(a,b) ; 
          Tinh_chu_vi(a,b); 
          Tinh_dien_tich(a,b); 
          Tinh_duong_cheo(a,b); 
          Write('  Co thuc hien tiep khong ? (c/k) '); 
          Readln(tiep); 
     until upcase(tiep) ='K'; 
END .

6. 4. Ghi nhớ

6. 4.1. Khai báo thủ tục có tham chiếu
a. Phần tiêu đề

Procedure TênThủTục (<biến>:<kiểu dữ liệu>);
Tên thủ tục được đặt theo quy tắc đặt tên .

b. Khai báo địa phương
Tương tự như khai báo ở chương trình chính.

Các hằng, kiểu, biến, chương trình con khai báo ở một thủ tục nào thì chỉ hoạt động trong thủ tục đó.

Truyền bằng biến: Các biến có từ khóa VAR sẽ dùng chung ô nhớ với biến dữ liệu được truyền cho nó và sẽ cập nhật các giá trị trong quá trình thực thi chương trình con, biến dữ liệu được truyền cho nó giữ nguyên các giá trị này khi thoát khỏi chương trình con.

Trong thủ tục NhapKichThuoc(VAR a,b: real) khi được gọi đến NhapKichThuoc(K1, K2) thì a dùng chung ô nhớ với K1, b dùng chung ô nhớ với K2, giá trị nhập cho a,b trong thân thủ tục đồng thời cũng là giá trị nhập cho K1, K2 trong chương trình chính và sẽ giữ lại các giá trị nhập cho K1, K2 được truyền.

Truyền bằng trị: Các biến không có từ khóa VAR sẽ được cấp phát cục bộ trong chương trình con và sẽ bị xóa khi thoát khỏi chương trình con, do đó biến dữ liệu được truyền cho nó không được cập nhật.

Trong thủ tục Tinh_chu_vi(a,b: real) khi được gọi Tinh_chu_vi(K1, K2) thì bộ nhớ cấp phát cục bộ cho hai biến a và b, a nhận giá trị của K2, b nhận giá trị của K2, ra khỏi chương trình con thi ô nhớ a và b được thu hồi, K1 và K2 giữ nguyên giá trị trước khi gọi chương trình con.

c. Thân thủ tục

Tương tự như thân chương trình chính, nhưng kết thúc là từ khoá End với dấu chấm phẩy ( 😉

6.4.2. Gọi thủ tục có tham chiếu
Ở đâu cần đến thủ tục nào thì gọi tên thủ tục đó kèm theo danh sách biến  theo đúng thứ tự đã khai báo. Thủ tục khai báo sau thì có thể gọi thủ tục cùng cấp khai báo trước, ngoại trừ các chương trình con cục bộ của chúng.

Advertisements

About pascalteacher

Trang thông tin Toán học và Tin học

Thảo luận

Không có bình luận

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Các tác giả

Chuyên mục

Tháng Tám 2015
H B T N S B C
« Th1   Th9 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

NCT Computer

Flickr Photos

Geese Resort

Toulouse Sunset

Monolith

More Photos

Thống kê

  • 115,743 lượt xem

pascalteacher.nct@gmail.com


Trang huấn luyện học sinh giỏi Tin học

%d bloggers like this: