Trường Đại học Điện lực Tập đoàn Điện lực Việt Nam


Truyền tham số cho chương trình con



tải về 1.67 Mb.
trang46/48
Chuyển đổi dữ liệu18.07.2016
Kích1.67 Mb.
#1821
1   ...   40   41   42   43   44   45   46   47   48

8.4. Truyền tham số cho chương trình con

8.4.1. Vai trò của tham số


- Các tham số hình thức trong phần khai báo tiêu đề chương trình con là công cụ để chương trình con giao tiếp với môi trường bên ngoài. Khi thực hiện chương trình con các tham số được dùng để gửi các giá trị vào để chương trình xử lý.

- Các tên tham số khai báo được dùng trong chương trình con như tên biến địa phương đã được khai báo, vì thế không được khai báo các biến riêng của chương trình con trùng với tên các tham số của nó.

- Điểm khác biệt giữa tham số và biến riêng của chương trình con là khi bắt đầu tham gia câu lệnh, các tham số chỉ có tên chứ chưa có giá trị như các biến. Chỉ khi xuất hiện lời gọi chương trình con thì các tham số mới được truyền giá trị từ bên ngoài vào và chương trình con sẽ được thực hiện với bộ giá trị đó. Cũng vì lý do đó mà chúng được gọi là tham số hình thức.

- Khi gọi chương trình con, các tham số hình thức có thể nhận bất cứ một tên biến nào khác với tên hình thức đã khai báo, chỉ cần giá trị của những tên này là tương thích kiểu với kiểu của tham số tương ứng.

- Các tên bên ngoài được truyền vào chương trình con được gọi là tham số thực vì chúng thực sự tham gia chương trình con với tư cách là một giá trị.

- Khi thực hiện lời gọi chương trình con, các tham số được truyền vào cần đảm bảo rằng việc truyền là tương ứng một-một về cả kiểu dữ liệu và thứ tự.

- Các tham số thực sự được truyền cho các tham số hình thức khi có lời gọi CTC theo hai phương thức sau:


  • truyền theo tham trị,

  • truyền theo tham biến.

8.4.2. Truyền theo tham trị


Các tham trị hay các tham số thực sự truyền cho các tham số hình thức theo phương hướng truyền tham trị được khai báo:

:

Đối với các tham trị khi có lời gọi chương trình con, hệ thống sẽ cấp phát một vùng nhớ khác và sao giá trị của tham số thực sự vào đó. Chương trình con thao tác với tham số hình thức tương ứng sẽ thực hiện với dữ liệu trên bản sao này và không ảnh hưởng đến tham số thực sự.

Như vậy khi kết thúc chương trình con các bản sao bị xóa đi và giá trị của tham thực sự là giữ nguyên như trước khi truyền vào chương trình.

Việc truyền theo tham trị có những đăc điểm sau:

- Giá trị của biến được truyền theo tham trị ở đầu vào sẽ không bị thay đổi sau lời gọi chương trình con.

- Tốn thêm bộ nhớ khi thực hiện chương trình con do tạo bản sao.

- Khi gọi chương trình con cho phép giá trị ở đầu vào có thể là những giá trị của hằng, biến, hàm hoặc biểu thức.

Ví dụ 8.6:

Program vidu_8_6;

Var t,k: integer;


Procedure test(t,k: integer);
Begin

k:=k+5;


t:=t+5;

End;


Begin

k:=5; t:=5;

writeln(‘k=‘,k,’ va t=‘,t);

test(i,k);

writeln(‘k=‘,k,’ va t=‘,t);

readln;


End.


{Khai báo 2 biến t, k là hai biến toàn chương trình chính.}

{Khai báo tham số hình thức của chương trình con: t, k đều là tham trị.}
{In ra giá trị k = 5 và t = 5}

{Lời gọi thủ tục test}

{In ra màn hình k = 5 và t = 5}

8.4.3. Truyền theo tham biến


Các tham biến được khai báo trong tiêu đề của chương trình con.

Var :;

Đối với các tham biến, chương trình con thao tác với các tham số thực sự sẽ được thực hiện trực tiếp với dữ liệu trên chính bộ nhớ của tham số thực sự nên khi kết thúc chương trình con thì giá trị của tham số thực sự chính là giá trị đã được chương trình con thay đổi.

Truyền theo tham biến có những đặc điểm sau:

- Giá trị của biến được truyền theo tham biến ở đầu vào sẽ bị thay đổi sau lời gọi chương trình con.

- Không tốn thêm bộ nhớ khi thực hiện chương trình con do không tạo bản sao.

- Khi gọi chương trình con giá trị ở đầu vào chỉ có thể là biến.



Ví dụ 8.7:

Program vidu_8_7;

Var t,k: integer;

{Khai báo biến của chương trình chính: 2 biến t, k là hai biến toàn chương trình chính.}

Procedure test(k:integer; var t: integer);



{Khai báo biến hình thức của chương trình con:

k là tham trị, t là tham biến.}

Begin


k:=k+5;

t:=t+5;


End;

Begin


k:=5; t:=5;

writeln(‘k = ‘,k,’ va t = ‘,t);{In ra giá trị k=5 và t=5}

test(i,k); {Lời gọi thủ tục test}

writeln(‘k = ‘,k,’ va t = ‘,t);{In ra màn hình k=5 và t=10}

readln;

End.
Khi nào thì nên dùng tham biến?

- Nếu cần thay đổi giá trị thực sự theo quản lý của chương trình con

- Tránh sao lưu dữ liệu lớn.


Ví dụ 8.8: Viết chương trình hoán vị giá trị của hai biến a, b.
Program vidu_8_8;

Var a,b: real;

Procedure hoanvi(var a,b: real); {a, b là tham biến}

Var tg: real;

Begin

tg:=a;


a:=b;

b:=tg;


End;

Begin


Write(‘ nhap hai so a, b: ’);readln(a,b);

Writeln(‘Hai so truoc hoan vi la: ’, a:8:2, b:8:2);

Hoanvi(a,b);

Writeln(‘Hai so sau hoan vi la: ’, a:8:2, b:8:2);

Readln;

End.
Trong ví dụ trên nếu khai báo tham số hình thức a, b ở đầu chương trình con là tham trị thì sẽ không thể hoán đổi giá trị của hai biến đó cho nhau.


8.5. Tính đệ qui của chương trình con

8.5.1. Khái niệm về đệ qui


Các chương trình mà chúng ta đã xem xét đều có chung cấu trúc dạng chương trình gọi các chương trình con khác dưới dạng mô hình phân cấp. Tuy nhiên đối với một số bài toán, việc dùng chương trình con gọi ngay chính nó rất hữu dụng. Có thể định nghĩa chương trình con đệ qui là chương trình con sẽ gọi đến chính nó trực tiếp hay gián tiếp thông qua các chương trình con khác.

Cách tiến hành giải một bài toán đệ qui nhìn chung có những điểm chung sau: Trước tiên gọi chương trình con đệ qui để giải bài toán, chương trình con đệ qui thực ra chỉ biết cách giải bài toán trong trường hợp đơn giản nhất (hay còn gọi là trường hợp cơ sở). Nếu chương trình con đệ qui được gọi trong trường hợp cơ sở, chương trình con chỉ cần đơn giản trả lại kết quả. Nếu chương trình con được gọi trong các trường hợp phức tạp hơn, chương trình con đệ qui sẽ chia công việc cần giải quyết thành hai phần. Một phần hàm biết cách giải quyết như thế nào, còn phần kia vẫn không biết cách giải quyết như thế nào tuy nhiên để được gọi là có khả năng đệ qui, phần sau phải giống với bài toán ban đầu nhưng đơn giản hơn hay nhỏ hơn bài toán ban đầu. Bởi vì bài toán mới giống với bài toán ban đầu nên chương trình con sẽ thực hiện gọi chính nó để giải quyết công việc đơn giản hơn này - đây chính là lời gọi đệ qui hay còn gọi là một bước đệ qui. Để đảm bảo việc đệ qui có kết thúc, mỗi một lần gọi đệ qui thì bài toán phải đảm bảo đơn giản hơn và các bước đệ qui này còn thực hiện tiếp cho đến khi nào bài toán đơn giản dần, đơn giản tới mức trở thành trường hợp cơ sở. Có thể nhận thấy hàm đệ qui xử lý trường hợp cơ sở để trả lại kết quả tính được cho các chương trình con mức phức tạp hơn, rồi đến lượt các chương trình con này lại tính trả lại kết quả cho các chương trình con phức tạp hơn nữa ... cứ như vậy cho đến lời gọi chương trình con ban đầu.



Каталог: images
images -> Hướng dẫn sử dụng Dropbox Để sử dụng được Dropbox
images -> BÀi thuyết trình cách xáC ĐỊnh và chế ĐỘ pháp lý CỦa các vùng biển theo công ưỚc của liên hiệp quốc về luật biển năM 19821
images -> Céng hßa x· héi chñ nghÜa viÖt nam Độc lập tự do hạnh phúc
images -> Lúa gạo Việt Nam Giới thiệu
images -> Trung Tâm kt tc-đl-cl
images -> Số: 105/2008/QĐ-ttg CỘng hòa xã HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
images -> ChuyêN ĐỀ ĐẠi số TỔ HỢP, XÁc suất kiến thức cơ bản Đại số tổ hợp
images -> BỘ giáo dục và ĐÀo tạo trưỜng đẠi học luật tp. HỒ chí minh dưƠng kim thế nguyên thủ TỤc phá SẢn các tổ chức tín dụng theo pháp luật việt nam
images -> Review of Condor, Sun Grid Engine and pbs

tải về 1.67 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   40   41   42   43   44   45   46   47   48




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương