SKKN Chạy chương trình Pascal với vận tốc của chương trình con để về đích lập trình

SKKN Chạy chương trình Pascal với vận tốc của chương trình con để về đích lập trình

Chương trình tin học 11 cung cấp đầy đủ các kiến thức cơ bản của lập trình và hình thành kĩ năng lập trình căn bản cho học sinh. Nội dung xuyên suốt chương trình giúp học sinh dễ dàng hệ thống và tiếp cận tới từng vấn đề đặt ra. Chủ đề chương trình con (CTC) được đưa vào cuối chương trình với nội dung ở 2 bài 17 và bài 18, với các kiến thức: lợi ích của việc sử dụng chương trình con, cấu trúc chung của CTC, phân loại CTC, cấu trúc CTC, ví dụ và cách sử dụng CTC. Qua đấy thấy được lợi ích rất quan trọng của việc sử dụng CTC, yêu cầu người học vận dụng toàn bộ kiến thức đã biết để hướng tới mở rộng khả năng tư duy và kĩ năng lập trình từ cơ bản đến thành thạo và thực sự chuyên nghiệp. Điều này là quan trọng và cần thiết, không chỉ giúp ích cho học sinh ở phổ thông mà còn là hành trang để các em bước vào các bậc học cao hơn. Nhưng nội dung liên quan đến CTC lại khá khó tiếp cận với mặt bằng chung nhiều học sinh, chính là nội dung khó nên cũng là phần nội dung phân loại học sinh rõ nét nhất, tạo hứng thú để phát hiện ra những nhóm học sinh có tiềm năng tư duy lập trình chuyên nghiệp. Bản thân tôi qua quá trình giảng dạy theo dõi, đánh giá và tổng kết được chủ yếu học sinh khối 11 của mình còn khá yếu trong việc học lập trình pascal, nhất là sử dụng CTC vào lập trình. Cứ thấy nội dung khó không vận dụng được là các em dễ dàng bỏ qua phần kiến thức cần thiết và rất hay này. Chính vì lí do trên nên tôi chọn đề tài “Chạy chương trình Pascal với vận tốc của chương trình con để về đích lập trình”, “Chạy chương trình”-“Ctrl+F9”, “vận tốc”-“Debug and Compile” và “về đích”-“để kết thúc chương trình tin học 11”, hướng tới giúp học sinh sử dụng CTC để giải quyết các bài toán lập trình từ đơn giản đến phức tạp, hình thành kĩ năng lập trình căn bản, thành thạo.

doc 18 trang thuychi01 6991
Bạn đang xem tài liệu "SKKN Chạy chương trình Pascal với vận tốc của chương trình con để về đích lập trình", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
1.Mở đầu	1
1.1. Lí do chọn đề tài	1
	1.2. Mục đích nghiên cứu	1
1.3. Đối tượng nghiên cứu	1
1.4. Phương pháp nghiên cứu	1
2. Nội dung sáng kiến kinh nghiệm	2
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm	2
2.2. Thực trạng của vấn đề trước khi áp dụng sang kiến kinh nghiệm	2
2.3. Các sáng kiến kinh nghiệm, giải pháp đã sử dụng để giải quyết vấn đề	3
2.3.1. Mục đích của việc sử dụng chương trình con	3
2.3.2. Phân loại chương trình con	6
2.3.3. Cấu trúc chương trình con	6
2.3.4. Cách dùng chương trình con	9
a. Lời gọi chương trình con	9
b. Cách dùng tham số	9
c. Biến cục bộ và biến toàn cục	9
2.3.5. Thoát khỏi chương trình con	11
2.3.6. Bài tập áp dụng	11
2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản thân, đồng nghiệp và nhà trường	14
3. Kết luận và kiến nghị	15
3.1. Kết luận	15
3.2. Kiến nghị	15
Tài liệu tham khảo	16
Danh mục mục các đề tài SKKN mà tác giả đã được Hội đồng Cấp phòngGD&ĐT, Cấp Sở GD&ĐT và các cấp cao hơn đánh giá đạt từ loại C trở lên	17
1. Mở đầu
1.1. Lí do chọn đề tài
	Chương trình tin học 11 cung cấp đầy đủ các kiến thức cơ bản của lập trình và hình thành kĩ năng lập trình căn bản cho học sinh. Nội dung xuyên suốt chương trình giúp học sinh dễ dàng hệ thống và tiếp cận tới từng vấn đề đặt ra. Chủ đề chương trình con (CTC) được đưa vào cuối chương trình với nội dung ở 2 bài 17 và bài 18, với các kiến thức: lợi ích của việc sử dụng chương trình con, cấu trúc chung của CTC, phân loại CTC, cấu trúc CTC, ví dụ và cách sử dụng CTC. Qua đấy thấy được lợi ích rất quan trọng của việc sử dụng CTC, yêu cầu người học vận dụng toàn bộ kiến thức đã biết để hướng tới mở rộng khả năng tư duy và kĩ năng lập trình từ cơ bản đến thành thạo và thực sự chuyên nghiệp. Điều này là quan trọng và cần thiết, không chỉ giúp ích cho học sinh ở phổ thông mà còn là hành trang để các em bước vào các bậc học cao hơn. Nhưng nội dung liên quan đến CTC lại khá khó tiếp cận với mặt bằng chung nhiều học sinh, chính là nội dung khó nên cũng là phần nội dung phân loại học sinh rõ nét nhất, tạo hứng thú để phát hiện ra những nhóm học sinh có tiềm năng tư duy lập trình chuyên nghiệp. Bản thân tôi qua quá trình giảng dạy theo dõi, đánh giá và tổng kết được chủ yếu học sinh khối 11 của mình còn khá yếu trong việc học lập trình pascal, nhất là sử dụng CTC vào lập trình. Cứ thấy nội dung khó không vận dụng được là các em dễ dàng bỏ qua phần kiến thức cần thiết và rất hay này. Chính vì lí do trên nên tôi chọn đề tài “Chạy chương trình Pascal với vận tốc của chương trình con để về đích lập trình”, “Chạy chương trình”-“Ctrl+F9”, “vận tốc”-“Debug and Compile” và “về đích”-“để kết thúc chương trình tin học 11”, hướng tới giúp học sinh sử dụng CTC để giải quyết các bài toán lập trình từ đơn giản đến phức tạp, hình thành kĩ năng lập trình căn bản, thành thạo.
1.2. Mục đích nghiên cứu
	Với việc chọn vấn đề “Chạy chương trình với vận tốc của chương trình con để về đích lập trình”, tôi mong muốn: đối với HS sẽ hình thành kiến thức, tư duy và kĩ năng lập trình tốt hơn nhằm hoàn thành chương trình tin học 11và là bàn đạp để nâng đỡ những lập trình viên tương lai. Đối với bản thân tôi sẽ muốn hoàn thành tốt công tác chuyên môn, nâng cao hiệu quả trong giảng dạy, bổ sung những phần kiến thức kinh nghiệm còn thiếu.
Mặc khác, tôi mông muốn tài liệu của mình sẽ giúp đỡ được các giáo viên đồng môn phần nào trong việc tạo hứng thú lập trình, tìm và phát hiện khả năng tư duy lập trình để bồi dưỡng và phát triển tiếp.
1.3.Đối tượng nghiên cứu.
	Đề tài của tôi sẽ nghiên cứu, khai thác những phần kiến thức quan trọng, ví dụ bài tập lập trình, bài tập thực hành, bài tập thực hành tổng hợp, tìm hiểu, phân loại và hướng tới từng nhóm đối tượng học sinh. Tất cả các kỹ năng lập trình như viết chương trình, test chương trình, hiệu chỉnh chương trình cho phù hợp với đặc trưng của bộ môn.
1.4. Phương pháp nghiên cứu
- Phương pháp nghiên cứu xây dựng cơ sở lí thuyết.
- Phương pháp điều tra khảo sát thực tế, thu thập thông tin.
- Phương pháp thống kê, xử lí số liệu.
2. Nội dung sáng kiến
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm
Cùng với sự phát triển của khoa học công nghệ, tin học ra đời đóng vai trò là một ngành khoa học mang lại hiệu quả rất to lớn trong đời sống của con người. Việc ứng dụng tin học vào thực tế nhất là việc sử dụng máy tính để giải các “bài toán” đã và đang đưa tri thức của con người lên một tầm cao mới. Dần dần chúng ta có thể sử dụng những “cỗ máy nhân tạo” được “lập trình” để giải quyết các công việc không những nhanh, tiết kiệm thời gian mà hiệu quả gấp nhiều lần so với sức lao động của con người. Và một trong những kiến thức lập trình căn bản mà học sinh phổ thong được tiếp cận- ngôn ngữ lập trình Pascal bắt đầu hình thành cho các em- thế hệ chủ nhân tương lai, kiến thức và kĩ năng tư duy lập trình.
Toàn bộ những nội dung quan trọng trong chương trình tin học 11: dữ liệu chuẩn và kiểu dữ liệu có cấu trúc), cấu trúc câu lênh, vòng lăp, cấu trúc CTCđã trang bị đầy đủ cho học sinh kiến thức lập trình cơ bản, để từ đây giúp các em phát triển hơn. Ứng dụng kiến thức lập trình vào các môn học khác, từ các môn học khác vào lập trình và ứng dụng vào ngay cuộc sống môi trường học tập,vui chơi, giải trí
Nội dung kiến thức liên quan đến chương trình con là cần thiết để hoàn thiện kĩ năng lập trình cho học sinh phổ thông.
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Môn Tin học đến nay không còn là môn học mới mẻ đối với học sinh phổ thông, bởi học sinh đã được làm quen nó ngay ở các cấp học dưới. Nhưng việc học các môn này ở các cấp học dưới và kể cả cấp học này chỉ chưa thực sự phát huy được hiệu quả của nó. Nhiều học sinh chưa thực sự yêu thích và xem nhẹ tầm quan trọng của môn học này, dẫn tới học qua loa, máy móc, đối phó. Dẫn tới tình trạng các em học lập trình mà như “cưỡi ngựa xem hoa”. Đôi khi có những câu hỏi “Học lập trình này ứng dụng vào đâu thầy?”.
	Năm học 2016-2017 qua những bài kiểm tra, bài thu hoạch, bài hoạt động cá nhân, bài hoạt động nhóm và tổng số phần trăm học sinh tham gia thực hành trên phòng máy đạt mức kĩ năng lập trình cơ bản là còn chưa cao. Bản thân tôi khi tới nội dung này cũng gặp không ít khó khăn phần vì khách quan (đã gần cuối năm học nên tư tưởng và hứng thú của học sinh đã có phần đi xuống), chủ quan (phần kiến thức này khá khó tiếp cận đối với học sinh), kĩ năng lập trình chuyên nghiệp một cách thành thạo cũng có phần hạn chế và mất nhiều thời gian nghiên cứu học hỏi, kinh nghiệm bản thân cũng chưa nhiều nên việc xây dựng nội dung cho phù hợp với học sinh là khá khó. Chính vì vậy cần khai thác tối đa những gì bản thân học sinh đã có, tạo hứng thú học tập cho học sinh, có đôi khi phát triển nội dung theo năng lực học sinh, đi theo hướng học sinh để hệ thống và dẫn dắt để kết luận lại. Thường xuyên cho các em rèn luyện kĩ năng lập trình trên phòng máy, là cơ hội để giáo viên tiếp cận học sinh ở cự li gần nhất. 
2.3. Các sáng kiến kinh nghiệm, giải pháp đã sử dụng để giải quyết vấn đề
2.3.1. Mục đích của việc sử dụng chương trình con
Đặt vấn đề: 
Phân loại nhóm đối tượng:
+ HS nào từng sử dụng CTC để lập trình? Mức độ sử dụng như thế nào?(xem và nhận biết, hiểu và sử dụng cơ bản, sử dụng thành thạo).
+ Nhóm HS chưa được làm quen, nội dung kiến thức là mới hoàn toàn.
Với nội dung kiến thức từ đầu chương trình tới giờ mỗi HS đã tự hình thành kĩ năng lập trình cho riêng mình. Chúng ta sẽ sử dụng những kiến thức ấy để tiếp tuc phát triển và hoàn thành tổng quan về kiến thức lập trình Pascal.
Bài toán: Nhập và in ra màn hình 4 mảng 1 chiều(n phần tử, n nhập từ bàn phím). Cho biết số phần tử là nguyên tố của mỗi mảng.
 (chương trình được viết theo 2 cách có và không sử dụng CTC).
Yêu cầu:
Theo kiến thức đã học, HS tự lập trình theo cách không sử dụng CTC.
Trong nhóm HS khá có HS lập trình theo cách sử dụng CTC
Gợi ý: các công việc cần làm trong chương trình.
- Nhập n (nhập số phần tử của mảng).
- Nhập 4 mảng một chiều: a, b, c, d.
- In từng mảng: a, b, c, d.
- Đếm số nguyên tố của từng mảng và in ra màn hình.
Chương trình sử dụng CTC để lập trình
Chương trình không sử dụng CTC để lập trình
uses crt;
type mang = array[1..100] of integer;
var a,b,c,d: mang;
 i,n:integer;
procedure nhap(var x:mang; y:integer);
begin
 for i:= 1 to y do
 begin
 write('nhap phan tu thu ',i);
 readln(x[i]);
 end;
end;
procedure inmang(x:mang; y:integer);
begin
 for i:= 1 to y do write(x[i]:5);
 writeln;
end;
function nt(x:integer): boolean;
var j:integer; kt:boolean;
begin
kt:= true;
 for j:= 2 to round(sqrt(x)) do
if (x mod j = 0 ) then kt:=false;
if x = 1 then kt:=false;
 nt:= kt;
end;
procedure demnt(x:mang; y:integer);
var dem: integer;
begin
 dem:=0;
 for i:= 1 to y do
 if nt(x[i]) then dem:=dem+1;
 writeln('so ptu ngto: ',dem);
end;
begin
 clrscr;
 write('nhap n: ');
 readln(n);
 nhap(a,n);
 nhap(b,n);
 nhap(c,n);
 nhap(d,n);
 clrscr;
 inmang(a,n); demnt(a,n);
 inmang(b,n); demnt(b,n);
 inmang(c,n); demnt(c,n);
 inmang(d,n); demnt(d,n);
 readln;
end.
 uses crt;
var a,b,c,d : array[1..100] of integer;
 kt: boolean;
 i,j,n,dem:integer;
begin
 clrscr;
 {nhap mang}
 write('nhap so phan tu: '); readln(n);
 writeln('nhap mang a: ');
 for i:= 1 to n do
 begin
 write('nhap phan tu thu ',i);
 readln(a[i]);
 end;
 writeln('nhap mang b: ');
 for i:= 1 to n do
 begin
 write('nhap phan tu thu ',i);
 readln(b[i]);
 end;
 writeln('nhap mang c: ');
 for i:= 1 to n do
 begin
 write('nhap phan tu thu ',i); 
 readln(c[i]);
 end;
 writeln('nhap mang d:');
 for i:= 1 to n do
 begin
 write('nhap phan tu thu ',i); 
 readln(d[i]);
 end;
 clrscr;
 {in mảng}
 writeln(' in mang a:');
 for i:= 1 to n do write(a[i]:5);
 writeln;
 writeln(' in mang b:');
 for i:= 1 to n do write(b[i]:5);
 writeln;
 writeln(' in mang c:');
 for i:= 1 to n do write(c[i]:5);
 writeln;
 writeln(' in mang d:');
 for i:= 1 to n do write(d[i]:5);
 writeln;
{ tim so nguyen to trong tung mang}
 dem:=0;
 for i:= 1 to n do
 begin
 kt:=true;
 for j:=2 to round(sqrt(a[i])) do
 if (a[i] mod j = 0 ) then kt:=false;
 if a[i] = 1 then kt:=false;
 if kt then dem:=dem+1;
 end;
 writeln('so nguyen to trong mang la: ',dem);
 dem:=0;
 for i:= 1 to n do
 begin
 kt:=true;
 for j:=2 to round(sqrt(b[i])) do
 if (b[i] mod j = 0) then kt:=false;
 if b[i] = 1 then kt:=false;
 if kt then dem:=dem+1;
 end;
 writeln('so nguyen to trong mang la: ',dem);
 dem:=0;
 for i:= 1 to n do
 begin
 kt:=true;
 for j:=2 to round(sqrt(c[i])) do
 if (c[i] mod j = 0) then kt:=false;
 if c[i] = 1 then kt:=false;
 if kt then dem:=dem+1;
 end;
 writeln('so nguyen to trong mang la: ',dem);
 dem:=0;
 for i:= 1 to n do
 begin
 kt:=true;
 for j:=2 to round(sqrt(d[i])) do
 if d[i] mod j = 0 then kt:=false;
 if d[i] = 1 then kt :=false;
 if kt then dem:=dem+1;
 end;
 writeln('so nguyen to trong mang la: ',dem);
 readln
end.
Nhận xét:
- Từ 2 chương trình trên, HS có nhận xét gì? Từ nhận xét rút ra được khái niệm và lợi ích của việc sử dụng CTC.
- Khái niệm: chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện (được gọi) từ nhiều vị trí trong chương trình.
- Lợi ích việc sử dụng CTC:
+ Tránh được việc phải viết lặp đi lặp lại cùng một dãy lệnh nào đó.
+ Hỗ trợ việc thực hiện chương trình lớn.
+ Phục vụ cho quá trình trừu tượng hoá.
+ Mở rộng khả năng ngôn ngữ.
+ Thuận tiện cho phát triển, nâng cấp chương trình.
Phân loại chương trình con
?1. Trong chương trình ví dụ trên, em biết có những loại chương trình con nào.
?2. Chỉ ra từng đoạn chương trình tương ứng với từng loại chương trình con đó.
Điểm khác nhau cơ bản giữa các loại CTC đó?
Hàm(Function)
Thủ tục(Procedure)
Là CTC thực hiện một số thao tác nào đó và trả về một giá trị qua tên của nó. 
Là CTC thực hiện các thao tác nhất định nhưng không trả về giá trị nào qua tên của nó.
Ví dụ:
- Hàm abs(x) ® trả về giá trị tuyệt đối của x.
 - Hàm nt(x) ® trả về là True khi x là số nguyên tố hoặc false nếu x không là số nguyên tố.
Ví dụ: Các thủ tục để vào ra dữ liệu writeln;
 Readln;
nhap(x,y);
 inra(x,n);
Cấu trúc chương trình con
Cấu trúc chung
Chương trình con có 3 phần:
 []
Trong đó:
- Phần đầu: dùng để khai báo tên chương trình con, nếu là hàm phải khai báo kiểu dữ liệu cho giá trị trả về của hàm.
- Phần khai báo: khai báo biến cho dữ liệu vào/ra, các hằng và biến dùng trong chương trình.
- Phần thân:
Begin
; 
End;
? So sánh cấu trúc CTC và CT chính.
So sánh
Cấu trúc CTC
Cấu trúc CT chính
Cấu trúc
[]
[]
Phần đầu
dùng để khai báo tên chương trình con
Không có
Phần khai báo
 Chứa khai báo hằng, biến, phạm vi các đối tượng chỉ trong CTC
Bao gồm: khai báo tên CT, khai báo thư viện, khai báo hằng, khai báo biến và các CTC sử dụng trong CT.
Phần thân
Begin
 ; 
End;
Begin
 ; 
End.
Cấu trúc chương trình con dạng hàm
Function [] : ;
 []
begin
 	[];
 	 := ;
end;
Chương trình 1:Sử dụng cấu trúc hàm viết chương tìm rút gọn phân số với tử số và mẫu số được nhập từ bàn phím.
? Xây dựng ý tưởng cho bài toán.
- Chương trình sử dụng một hàm để tìm UCLN của 2 số (tử số và mẫu số).
- Sử dụng hàm UCLN để rút gọn phân số. 
program rutgon_phanso;
uses crt;
var tuso,mauso,a: integer;
function UCLN(x,y:integer):integer;
Tên hàm
 var sodu:integer;
 begin
 while y0 do
 begin
 sodu:=x mod y;
 x:=y;
 y:=sodu;
 end;
Lệnh trả giá trị
 UCLN:=x;
 end;
BEGIN
 clrscr;
 write('nhap phan so: ');readln(tuso,mauso);
 a:=UCLN(tuso,mauso);
Lời gọi hàm
 if a>1 then
 begin
 tuso:=tuso div a;
 mauso:=mauso div a;
 end;
 write(tuso:5,mauso:5);
 readln
END.
Chương trình 2: Sử dụng hàm hãy viết CT tìm giá trì lớn nhất của 3 số nguyên bất kỳ được nhập từ bàn phím.
program max3so;
 uses crt;
 var a,b,c: integer;
function max (a,b :integer): integer;
	Begin
	 If a> b then max:= a
	 else max:=b;
	End;
Begin
	write(‘ Nhap lan luot 3 so tu nhien a , b , c :’); 
	Readln(a,b,c);
	writeln(‘so lon nhat trong 3 so la: ’, max(max(a,b),c));
	Readln 
 End.
Cấu trúc chương trình con dạng thủ tục
Procedure [];
[]
Begin
 	 [];
end;
Thành phần:
- Tên hàm, tên thủ tục do người lập trình đặt (tuân theo quy tắc đặt tên của NNLT Pascal).
- Danh sách tham số: các hằng, biến vào/ra dữ liệu trong CTC.
- Từ cấu trúc của CTC dạng hàm và thủ tục hãy chỉ ra điểm khác nhau cơ bản?
- Có thể lập bảng so sánh như sau
So sánh
Hàm
Thủ tục
Kết quả
Trả lại giá trị kết quả vô hướng thông qua tên (được sử dụng trong các biểu thức)
Không trả giá trị thông qua tên (không thể viết trong các biểu thức)
Tham số
Có tham số
Có hoặc không có tham số
Lệnh gọi
Gọi tên của hàm như tên của các biến
Gọi tên của thủ tục như một câu lệnh
Hoặc
Giống nhau
Khác nhau
Có cấu trúc tương tự, cấu trúc 3 phần của CTC.
- Từ khóa dành riêng hàm (Function), thủ tục (Procedure).
- Phải khai báo kiểu dữ liệu mà giá trị hàm trả về.
- Trong phần thân hàm phải có lệnh trả giá trị thong qua tên hàm
:= ;
Cách dùng chương trình con
a. Lời gọi chương trình con
- Từ ví dụ xác định phạm vi, vị trí của CTC: xác định được phạm vi giới hạn của từng CTC; vị trí của từng CTC (trong phần khai báo của chương trình chính).
	Chương trình con được khai báo sau khai báo biến và trước chương trình chính.
- Khi nào cần thực hiện thao tác liên quan đến CTC gọi CTC đó ra bằng lời gọi CTC. Cấu trúc của lời gọi CTC:
[];
+ Danh sách tham số: các tham số thực sự thay thế cho các tham số hình thức.
+ Quá trình thay thế: là quá trình truyền dữ liệu phải đảm bảo số lượng các tham số, thứ tự các tham số, kiểu dữ liệu các tham số.
Chú ý: lời gọi CTC của hàm và thủ tục có gì khác nhau, lời gọi hàm phải được đặt trong một câu lệnh hoặc lời gọi CTC khác.
-Khi gặp một lời gọi tới chương trình con máy sẽ thực hiện như sau:
+ Cấp phát bộ nhớ cho các đối các biến cục bộ
+ Truyền giá trị của các tham số thực sự cho các tham số giá trị tương ứng, truyền địa chỉ của các tham số thực sự ứng với các tham biến.
+ Thực hiện các lệnh trong chương trình con.
+ Giải phóng các đối các biến cục bộ trở về nơi gọi chương trình con.
b. Cách dung tham số
b.1. Vai trò của tham số:
- Các tham số khao báo ở đầu chương trình con dung để gửi các giá trị vào để chương trình xử lí, cũng là nơi lấy các kết quả mà chương trình đã xử lí xong.
- Chú ý: 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ủa các tham số trên.
- Tham số hình thức là các biến được khai báo cho dữ liệu vào/ra.
- Tham số thực sự: thay thế cho các tham số hình thức trong lời gọi CTC. 
- Tham số có 2 loại:
Tham biến (Tham số biến)
Tham trị (Tham số giá trị)
Khai báo:
:;
Khai báo:
Var :;
Giá trị thay đổi khi ra khỏi CTC
Giá trị không thay đổi khi ra khỏi CTC
b.2. Truyền tham số
- Truyền tham trị:
+ Việc truyền tham trị được thực hiện qua bản sao, giá trị bên ngoài (của hằng, biến, hàm hoặc biểu thức) được chép vào vùng nhớ được cấp phát tương ứng với kích thước tham số. Chương trình con sẽ làm việc với dữ liệu chứa trong bản sao này.
+ Đặc điểm: 
+) Giá trị tham số thay đổi cúng không ảnh hưởng đến giá trị của biến được truyền.
+) Tốn ít bộ nhớ và thời gian cho việc sao chép (tùy thuộc vào kích thước của tham số tương ứng).
- Truyền tham biến:
+ Việc truyền tham số theo biến được thực hiện vào chính địa chỉ của biến được truyền. Mọi lệnh của chương trình con đối với tham số hình thức cũng chính là các lệnh đối với biến này.
+ Đặc điểm:
+) Không tốn then bộ nhớ và thời gian do không phải sao chép.
+) Chỉ cho phép đầu vào là giá trị của biến.
- Vấn đề phát sinh: việc truyền theo trị hay theo biến nhiều bài toán dẫn đến những kết quả logic khác nhau.
- Kết luận về việc truyền tham số:
+ Nếu trong thân chương trình con không có những lệnh làm thay đổi giá trị tham số hình thức thì việc truyền theo biến hay theo trị không gây ra sự khác biệt nào về kết quả mà chương trình con trả lại.
+ Trong trường hợp ngược lai thì phải tùy vào nhiệm vụ của chương trình con mà quyêt định cách truyền:
+ Trường hợp truyền không ảnh hưởng đến kết quả logic thì truyền tham trị thường lựa chọn thuộc các kiểu dữ liệu chuẩn, còn các kiểu phức hợp như mảng, bản ghithì truyền theo biến để tiết kiệm bộ nhớ, riêng tham số kiểu tệp hoặc tham số không định kiểu thì luôn phải tổ chức truyền theo biến.
c. Biến cục bộ và biến địa phương
Biến cục bộ
Biến toàn cục
Đặc điểm
Chỉ có tác dụng trong CTC
Có phạm vi ảnh hưởng trong toàn bộ CT
Vị trí
Được khai báo trong phần khai báo của CTC
Được khai báo trong phần khai báo của CT chính
Chú ý: Một chương trình con có thể có hoặc không các tham số hình thức cũng như các biến cục bộ.
- Khái niệm biến cục bộ và biến toàn cục chỉ mang tính chất tương đối: một đối tượng là chung của chương trình này lại là riêng của một chương trình khác, việc cấp phát bộ nhớ cho các đối tượng này là độc lập.
- Tùy thuộc vào chứa năng của từng đối tượng mà lựa chọn là biến cục bộ hay địa phương:
+ Những đối tượng nào tham gia vào khâu chung của chương trình, hoặc co nhiệm vụ chuyển giao giá trị giữa các chương trình thì cần phải được tổ chức toàn cục.
+ Những đối tượng nào phát sinh khi giải quyết các công việc riêng lẻ như các biến điều khiển vòng lặp, biến lưu các giá trị trung giancần khai báo như các biến cục bộ.
- Những người lập trình kinh nghiệm thường rất cẩn thận trong khâu thiết kế các biến chung riêng trước khi viết chương trình.
Thoát khỏi chương trình con
- Thông thường khi thực hiện hết các lệnh trong chương trình thị chương trình con tự kết thúc. Tuy nhiên trong lập trình có những trường hợp không cần phải chạy hết chương trình, sử dụng các thủ tục sau:
+ Thủ tục Exit: thoát chương trình ở bất cứ chỗ nào trong phần câu lệnh hiện hành và nhảy đến lệnh ngay sát sau lời gọi chương trình con này.
+ Thủ tục Halt: cho phép kết thúc chương trình ở bất cứ lúc nào dù thủ tục này đặt trong chương trình con hay chương trình chính.
Bài tập áp dụng
Chương trình 1: Sử dụng thủ tục vehcn; để vẽ 2 hình 

Tài liệu đính kèm:

  • docskkn_chay_chuong_trinh_pascal_voi_van_toc_cua_chuong_trinh_c.doc