Biết viết chương trình con dưới hai dạng thủ tục Chương trình con là một đoạn chương trình, các câu lệnh của chúng được bao giữa cặp từ khoá Begin … End; Chúng ta có thể gọi một hoặc
Trang 1Giáo án tin học 9
BÀI CHƯƠNG TRÌNH CON (Sub program)
KIẾN THỨC YÊU CẦU:
Biết khi nào cần sử dụng đến chương trình con, tầm vực hoạt động của nó
Biết cách khai báo và sử dụng
Biết nắm vững vị trí khai báo biến
KIẾN THỨC ĐẠT ĐƯỢC
Biết các khái niệm về chương trình con
Biết cách khai báo và sử dụng chương trình con trong chương trình chính
8
Trang 2 Biết hai dạng của chương trình con là thủ tục (Procedure) và hàm (Function), các bước cơ bản để viết một chương trình con
Biết nắm vững biến toàn cục và biến địa phương, đặc biệt là tầm vực hoạt động của các biến loại này
Biết nắm vững cách truyền tham số cho chương trình con dưới dạng tham trị và tham biến
Biết viết chương trình con dưới hai dạng thủ tục
Chương trình con là một đoạn chương trình,
các câu lệnh của chúng được bao giữa cặp từ khoá
Begin … End; Chúng ta có thể gọi một hoặc nhiều
Trang 3lần trong chương trình qua tên của chương trình con
đó Nơi gọi có thể cung cấp những thông số cho chương trình con và chương trình con có thể làm thay đổi giá trị của một vài thông số đó
Chúng ta dùng các chương trình con khi:
Có một công việc được thực hiện ở nhiều nơi
(mỗi nơi có thông số riêng) nhưng quá trình thực hiện công việc thì không có gì thay đổi) Khi cần phân đoạn chương trình để chương
trình được trong sáng và dễ hiểu
2 Phân loại chương trình con
Có hai loại chương trình con đó là thủ tục
(Procedure) và hàm (Function) Hàm thì có sự trả
về Như đã giới thiệu ở các bài trước, thủ tục và hàm
sẽ được đặt trước thân của chương trình chính Khi gọi chương trình con tại vị trí nào đó trong chương trình chính, máy sẽ nhảy đến địa chỉ của đoạn mã chương trình con (đã được dịch sang chương trình
Trang 4máy khi Compiler) để thực hiện, sau khi thực hiện xong sẽ quay về câu lệnh sau lệnh gọi chương trình con để thực hiện tiếp
3 Các bước cơ bản để viết chương trình con
Phải biết cấu trúc của một chương trình con, nên dùng thủ tục hay hàm trong yêu cầu của đầu bài, biết
sử dụng các thông số …
Ghi chú: Khi cần tính ra chỉ một giá trị, nên dùng
Function, không nên dùng Procedure
II/ Chương trình con
Chương trình con được bắt đầu bằng từ dành riêng,
đó là Procedure hoặc Function, tiếp theo là tên của
chương trình con, sau đó là các tham số được bao bằng hai dấu ngoặc đơn (có thể có hoặc không, nếu
có nhiều thì được cách nhau bằng dấu chấm phẩy
“;”) Những tham số hình thức không đứng sau từ
Trang 5khoá Var được gọi là tham số hình thức trị, nếu có Var được gọi là tham số biến
Trang 6Ghi chú: Thủ tục thì không có kiểu trả về, sau End là
For i:=1 to m do gt:= gt * i;
End;
2 Dạng Function
FUNCTiON Tên (Thamsố1 : Kiểu;
…,ThamsốN: kiểu) : Kiểu;
Const
Trang 8gt : Real;
Begin gt:= 1;
For i:=1 to m do gt:= gt * i;
giaithua:= gt; (* Gán trị kết quả cho tên hàm*)
End;
III/ Một số đặc tính của chương trình con
1 Biến toàn cục và biến địa phương
Giả sử có một chương trình chính trong đó có một chương trình con, những biến nằm trong phần khai báo của chương trình chính được gọi là những biến toàn cục (global variable)
Những biến thuộc phần khai báo Var của chương trình con được gọi là những biến cục bộ
Trang 9(local variable) hay còn được gọi là biến địa phương của chương trình con đó
Trang 10 i, gt là các biến địa phương của chương trình
con, các biến này không có ý nghĩa gì trong thân chương trình chính, tức là không hề được biết đến
Ví dụ:
Trong thân chương trình chính của ví dụ trên, nếu bạn viết câu lệnh Write(‘Ket qua’, gt); thì khi compiler sẽ bị báo lỗi, vì biến gt chưa được khai báo trong chương trình chính
Ghi chú:
Tầm vực của một biến là phạm vi của khối (chương trình con hay chương trình khai báo nó)
Trang 112 Chuyển tham số cho chương trình con Tham trị - tham biến
Các tham số trong sự gọi chương trình con được gọi là các tham số thực (actual parameter) Khi gọi thì các tham số thực sẽ chuyển cho chương trình con tương ứng với các tham số hình thức theo thứ tự xuất hiện của chúng trong danh sách tham số
Trang 12là a, b sẽ được truyền tương ứng cho hàm khi gọi Cong(a,b) a tương ứng với x, b tương ứng với y Bạn thử thay lại lời gọi hàm là Cong(b,b) thì kết quả sẽ là
Trang 13b+b, số a nhập vào không tham gia gì trong việc gọi hàm
Tham trị (value parameter):
Không đi sau từ khoá Var trong danh sách các tham số hình thức
Được cấp ô nhớ riêng khi chương trình con
được gọi và bị xoá bỏ khi chương trình con thực hiện xong
Tham số thực tương ứng là một biểu thức
Tham trị thực chất là một biến cục bộ, khi
chương trình con được gọi, tham trị sẽ nhận trị là trị của tham số thực, trước khi chương trình con bắt đầu thực hiện
Những thay đổi của tham trị không ảnh hưởng
gì đến chương trình chính, nghĩa là không kéo theo sự thay đổi của tham số thực tương ứng
Tham biến (variable parameter):
Trang 14 Đi sau tứ khoá Var trong danh sách các tham
số
Tham số thực tương ứng phải là một biến
Những thay đổi trên tham biến thực chất là
được thực hiện trên tham số thực tương ứng
Thực chất của sự truyền tham số đối với tham biến là sự truyền địa chỉ
3 Viết chương trình con
Như chúng ta đã biết, chương trình con có hai dạng, đó là Procedure hoặc Function
Trang 15Procedure Cong(x:real; y:real; z:real;); Begin
Trang 16Begin (*Chương trình chính*) Write(‘Ban nhap vao so a = ‘); Readln(a);
Write(‘Ban nhap vao so b = ‘); Readln(b);
Trang 17Function Cong(x:real; y:real) : real;
Trang 19Chia:=z;
End;
Begin (*Chương trình chính*) Write(‘Ban nhap vao so a = ‘);
Qua hai ví dụ viết chương trình con dạng thủ tục
và hàm, các bạn cần lưu ý cách gọi, các bước thực
Trang 20hiện, phân biệt sự khác nhau để nắm vững và tránh sai sót khi viết các chương trình sau này
Ghi chú:
Tầm vực của một chương trình con là toàn bộ cha của nó (tại một vị trí bất kỳ của cha thì có thể gọi các chương trình con của nó)
4 Tính đệ quy của chương trình con
Đệ quy là một khái niệm cơ bản trong toán học
và khoa học máy tính Định nghĩa đơn giản của một chương trình đệ quy là chương trình mà gọi đến chính nó (và một hàm đệ quy là một hàm được định nghĩa dựa trên chính nó) Một chương trình đệ quy thì không thể gọi đến chính nó mãi mãi (và một hàm
đệ quy không thể lúc nào cũng định nghĩa dựa vào chính nó trừ khi định nghĩa bị xoay vòng) Một điều kiện cần thiết là phải có điều kiện kết thúc khi chương trình không gọi đến chính nó nữa (và khi hàm không được định nghĩa dựa trên chính nó) Tất
Trang 21cả các tính toán trong thực tế đều có thể diễn đạt bằng khuôn mẫu đệ quy
Giaithua := N * Giaithua(N - 1);
End;
Nó gọi đến chính nó (với một giá trị đối số nhỏ hơn) và nó có điều kiện kết thúc khi tính kết quả trực tiếp của nó
Trang 22Ví dụ 2:
Tính dãy Fibonacci:
Fn = Fn-1 + Fn-2 với n = 2 và F0 = F1 = 1 Quan hệ này định nghĩa dãy
End;
Trang 23TÓM LƯỢC
Chương trình con là một đoạn chương trình, các
câu lệnh của chúng được bao giữa cặp từ khoá
Begin … End; Chúng ta có thể gọi một hoặc nhiều
lần trong chương trình qua tên của chương trình con
là đến tên của chương trình con, tiếp theo là các tham số được bao trong dấu ngoặc đơn, các tham số
có thể có hoặc không và được cách nhau bởi dấu chấm phẩy
Hàm thì có sự trả về
Trang 24 Cần xác định nên dùng chương trình con là thủ tục
Khi gọi thì các tham số thực sẽ chuyển cho chương trình con tương ứng với các tham số hình thức theo thứ tự xuất hiện của chúng trong danh sách tham số
Tham trị Không đi sau từ khoá Var trong danh sách các tham số hình thức Được cấp ô nhớ riêng khi chương trình con được gọi và bị xoá bỏ khi chương trình con thực hiện xong Tham số thực
Trang 25tương ứng là một biểu thức Tham trị thực chất là một biến cục bộ, khi chương trình con được gọi, tham trị sẽ nhận trị là trị của tham số thực, trước khi chương trình con bắt đầu thực hiện Những thay đổi của tham trị không ảnh hưởng gì đến chương trình chính, nghĩa là không kéo theo sự thay đổi của tham
số thực tương ứng
Tham biến đi sau tứ khoá Var trong danh sách các tham số.Tham số thực tương ứng phải là một biến.Những thay đổi trên tham biến thực chất là được thực hiện trên tham số thực tương ứng Thực chất của sự truyền tham số đối với tham biến là sự truyền địa chỉ
Đệ quy là một khái niệm cơ bản trong toán học và khoa học máy tính Định nghĩa đơn giản của một chương trình đệ quy là chương trình mà gọi đến chính nó (và một hàm đệ quy là một hàm được định nghĩa dựa trên chính nó)
Trang 26PHẦN THỰC HÀNH:
1 Viết lại chương trình tính bốn phép toán cơ bản, cộng - trừ - nhân – chia bằng thủ tục và hàm
2 Viết chương trình con kiểm tra xem số tự nhiên n
có phải là số nguyên tố hay không?
3 Viết chương trình con kiểm tra xem trong mảng a[]
có mặt phần tử x hay không?
4 Viết chương trình con cho biết số các phần tử dương, số các phần tử âm, số các phần tử 0 của một mảng số nguyên
5 Cho hàm tính giai thừa như sau:
Function giaithua(m : integer) : Real;
Var
i : integer;
gt : real;
Trang 27Viết chương trình nhập vào một số nguyên dương
và cho ra kết quả với chương trình con như trên
6 Hàm tính giai thừa trên có phải chương trình đệ quy hay không, giải thích tại sao như vậy