MỤC LỤC
Trường PTDTNT Hướng Hoá
A. PHẦN MỞ ĐẦU
I. Lý do chọn đề tài
Giáo dục phổ thông nước ta đang thực hiện bước chuyển từ chương trình
giáo dục tiếp cận nội dung sang tiếp cận năng lực của người học, nghĩa là từ chỗ
quan tâm đến việc học sinh học được cái gì đến chỗ quan tâm học sinh vận dụng
được cái gì qua việc học. Để đảm bảo được điều đó, nhất định phải thực hiện
thành công việc chuyển từ phương pháp dạy học theo lối “truyền thụ một chiều”
sang dạy các học, cách vận dụng kiến thức, rèn luyện kĩ năng, hình thành năng
lực và phẩm chất; đồng thời phải chuyển cách đánh giá kết quả giáo dục từ nặng
kiểm tra trí nhớ sang kiểm tra, đánh giá năng lực vận dụng kiến thức giải quyết
vấn đề, coi trọng cả kiểm tra, đánh giá kết quả học tập với kiểm tra, đánh giá
trong quá trình học tập để có thể tác động kịp thời nhằm nâng cao chất lượng
của các hoạt động dạy học và giáo dục.
Trong quá trình bồi dưỡng học sinh giỏi, chủ đề chương trình con là một
trong những vấn đề chiếm vai trò quan trọng. Bởi vì, sử dụng chương trình con
để hợp lý hóa, tiết kiệm công sức lập trình. Đồng thời, chương trình con có thể
giúp cho người lập trình dễ sửa chữa, dễ kiểm tra. Vì thế trong tất cả các bộ đề
thi học sinh giỏi khối THCS đều sử dụng chương trình con để giải quyết các bài
toán. Vấn đề đặt ra là: gợi động cơ hoạt động cho học sinh khi giảng dạy về
chương trình con như thế nào? Đó chính là vấn đề mà bản thân tôi hết sức quan
tâm.
Chính vì vậy, tôi mạnh dạn đưa ra kinh nghiệm “Giúp học sinh hình thành
kỹ năng xây dựng chương trình con trong ôn luyện Học sinh giỏi Tin học
THCS” cụ thể của bản thân đã thực hiện khi giảng dạy Bồi dưỡng Học sinh giỏi
tại trường Phổ thông Dân tộc Nội trú Hướng Hoá để đồng nghiệp tham khảo.
Trường PTDTNT Hướng Hoá
B. PHẦN NỘI DUNG
I. Cơ sở lý luận
1. Lập trình từ trên xuống
Khi lập trình giải quyết một bài toán lớn, nếu viết chương trình một mạch
từ trên xuống thì người lập trình sẽ rất vất vả và thậm chí có thể không thực hiện
được. Mặc khác, nếu có viết được đi nữa thì việc sửa đổi và kiểm tra lỗi cũng rất
là khó khăn vì phải đụng chạm đến toàn bộ chương trình.
Để khắc phục được điều đó, người ta phân tích việc giải quyết bài toán
thành những công việc tương đối độc lập. Sau đó chi tiết dần các công việc này
thành các các công việc nhỏ hơn. Điều đó có nghĩa là chúng ta đã "phân mảnh"
dần theo từng cấp. Turbo Pascal cho phép người lập trình "phân mảnh" chương
trình nhằm phục vụ ý đồ trên. Có nghĩa là chia chương trình lớn thành nhiều
phần nhỏ rồi giải quyết từng phần một (mỗi phần nhỏ như vậy được gọi là một
chương trình con). Sau đó tuỳ nội dung công việc mà lắp ghép các chương trình
nhỏ này lại với nhau để giải quyết bài toán.
Phương pháp lập trình có phân mảnh như trên được gọi là TOP-DOWN
PROGRAMMING (Lập trình từ gốc đến ngọn hay còn gọi là lập trình có cấu
trúc).
Phân loại và cấu trúc chung của chương trình con:
Turbo Pascal cho phép xây dựng hai loại chương trình con đó là thủ tục
(Procedure) và hàm (Function). Trong đó:
Thủ tục là một chương trình con dùng để thực hiện một số thao tác xử lý
nào đó để giải quyết một công việc cụ thể nào đó đã được phân mảnh.
Hàm là một chương trình con dùng để xác định một giá trị của đại lượng ra
nào đó có kiểu dữ liệu đơn giản (số, kí tự, xâu kí tự, logíc). Giá trị của đại lượng
ra này được gọi là giá trị trả về của hàm.
.. .. .. ..;
Một thủ tục có thể không có tham số hình thức nào. Khi đó phần khai báo
sau tên thủ tục sẽ không có cặp dấu ngoặc.
Ví dụ: PROCEDURE
Sáng kiến kinh nghiệm
TO_MAU;
Trang 5
Trường PTDTNT Hướng Hoá
- Các định nghĩa và khai báo địa phương: là các khai báo về hằng, kiểu,
biến, chương trình con của nó. Các đối tượng được khai báo ở đây chỉ được
dùng cho thủ tục này và các chương trình con chứa trong nó.
- Các câu lệnh xử lý: là hệ thống câu lệnh được cài đặt nhằm thực hiện giải
thuật đã thiết kế cho thủ thục.
Ví dụ: Để viết thủ tục tìm ước số chung lớn nhất của hai số nguyên dương
m và n cho trước ta cho m, n đóng vai trò tham trị, giá trị ước số chung lớn
nhất tìm được sẽ lưu ở tham biến a. Thủ tục được viết như sau:
PROCEDURE UCLN(m,n:Word; Var a:Word);
BEGIN
While m n do
if m>n then m:=m-n else n:=n-m;
a:=m;
END;
Định nghĩa các chương trình con của hàm;
BEGIN
Các câu lệnh xử lý; {thân của hàm}
END;
Trong đó:
TênHàm là một định danh do người sử dụng đặt theo nguyên tắc đặt tên
của Turbo Pascal.
Danh sách các tham số hình thức giống như đối với thủ tục.
Kiểu là kiểu của giá trị trả về của hàm.
Ví dụ: FUNCTION
UCLN(m,n:Word):Word;
Một hàm có thể không có tham số hình thức nào. Khi đó phần khai báo
sau tên hàm sẽ không có cặp dấu ngoặc.
Ví dụ: FUNCTION
SO_NGAU_NHIEN:Word;
Các khai báo địa phương giống như đối với thủ tục.
Các câu lệnh xử lý giống như đối với thủ tục. Tuy nhiên đối với thân của
hàm bắt buộc phải có câu lệnh gán tên hàm bằng giá trị trả về của hàm, giá trị
này có thể dưới dạng một biểu thức có kiểu là kiểu của giá trị trả về của hàm,
theo cú pháp:
TênHàm:= Biểu thức;
Trong đó kiểu của Biểu thức phải trùng với kiểu của giá trị trả về của hàm.
Sáng kiến kinh nghiệm
Trang 7
chính.
Biến địa phương là các biến được khai báo sau từ khoá VAR trong các
chương trình con.
USES CRT;
VAR Khai báo các biến toàn cục;
PROCEDURE AAA(danh sách các tham số hình thức);
Var Khai báo các biến địa phương;
Begin
.. .. .. .. ;
End;
BEGIN
Sáng kiến kinh nghiệm
Trang 8
Trường PTDTNT Hướng Hoá
.. .. .. .. ;
END.
Phạm vi sử dụng của biến địa phương là trong thân của chương trình con
khai báo chúng và trong các chương trình con chứa trong chương trình con này.
Thời gian tồn tại của chúng là từ khi chương trình con được gọi thực hiện cho
đến khi thực hiện xong. Còn phạm vi sử dụng của biến toàn cục là trong toàn bộ
chương trình (trong chương trình chính và trong tất cả các chương trình con của
nó) và thời gian tồn tại của chúng là khi chương trình đang hoạt động.
5. Chú ý
(1). Tên của các tham số hình thức và tên của các biến địa phương trong
cùng một chương trình con không được trùng nhau.
Write('a2 = '); Readln(a2);
Write('b2 = '); Readln(b2);
p1 := 2 * (a1 + b1);
p2 := 2 * (a2 + b2);
S1 := a1 * b1;
S2 := a2 * b2;
d1 := sqrt(a1 * a1 + b1 * b1);
d2 := sqrt(a2 * a2 + b2 * b2);
Writeln('Hinh chu nhat thu nhat:');
Writeln('Chu vi bang ',p1);
Writeln('Dien tich bang : ',S1);
Writeln('Duong cheo bang: ',d1);
Writeln('Hinh chu nhat thu hai:');
Writeln('Chu vi bang ',p2);
Writeln('Dien tich bang : ',S2);
Writeln('Duong cheo bang: ',d2);
Readln
End.
Với chương trình trên để thực hiện được yêu cầu của đề bài, chúng ta phải
viết đi viết lại hai dòng liên tiếp tính chu vi, diện tích và đường chéo của từng
hình chữ nhật. Giả sử nếu phải tính đến n hình chữ nhật thì vấn đề quả thực là
hết sức phức tạp. Trong bài toán trên ta còn chưa có phần kiểm tra điều kiện
nhập vào của mỗi hình. Nếu có thêm điều kiện này, chắc chắn chương trình còn
dài nữa. Vấn đề đặt ra là: làm thế nào có thể xóa bỏ được sự hạn chế này? Ở
đây, chúng ta có thể hướng dẫn cho học sinh sử dụng chương trình con để khắc
phục sự hạn chế đó. Thay vì phải viết nhiều lần lệnh nhập, tính đi tính lại cho
từng hình ta có thể viết 2 thủ tục: thủ tục nhập hai cạnh của hình chữ nhật và
thủ tục Tính ba giá trị cho mỗi hình.
Var a1, b1, a2, b2: Real;
(lặp đi lặp lại một công việc) so với cách viết thông thường, và với cách viết
chương trình con ta còn dễ dàng kiểm tra tính đúng đắn trước khi lắp ráp vào
chương trình chính, do đó sẽ dễ dàng xác định sai sót và điều chỉnh các câu lệnh
cho phù hợp.
2. Các bước hướng dẫn học sinh xây dựng chương trình con cho một bài
toán
2.1. Xác định cần xây dựng những chương trình con nào để giải quyết bài
toán
Xác định cần xây dựng những chương trình con nào là bước quan trọng
nhất để giải quyết bài toán trong các đề thi Học sinh giỏi. Vì vậy giáo viên cần
hướng dẫn, đưa ra một số ví dụ cụ thể để học sinh có thể tham khảo, từ đó hình
thành thói quen, kỹ năng xác định mình cần những chương trình con nào.
Ví dụ với bài toán “Viết chương trình cho máy tính chu vi, diện tích và
đường chéo của hai hình chữ nhật theo hai kích thước của mỗi hình” thì ta cần
xây dựng hai chương trình con là nhapDoDai và tinh như ở trên.
Hoặc là đối với bài toán “Nhập vào một dãy số nguyên gồm n phần tử.
Sau đó in ra các phần tử trong dãy là số nguyên tố” thì ta sẽ chia bài toán ra
thành 3 công việc đó là:
Sáng kiến kinh nghiệm
Trang 11
Trường PTDTNT Hướng Hoá
- Nhập dãy n số nguyên.
- Kiểm tra xem 1 số có phải là số nguyên tố hay không.
- In kết quả tất cả các số nguyên tố trong dãy vừa nhập.
Do đó ta cần xây dựng những chương trình con như nhapDay, kTSNT,
inKetQua.
Trường PTDTNT Hướng Hoá
Với chương trình “Tìm ước chung lớn nhất của 2 số a và b” ta chỉ quan
tâm đến việc đưa ra kết quả ƯCLN của a và b mà không cần thay đổi giá trị của
a hay b. Do đó ta chỉ cần khai báo các tham số a và b là tham trị.
Var a,b: integer;
Function uCLN(m,n:integer):integer;
Begin
While m<>n do if m>n then m:=m-n else n:=n-m;
uCLN:=m;
End;
Begin
a:=15; b:=5;
Writeln(‘UCLN la: ’,uCLN(a,b));
Writeln(‘a= ’,a,‘ b= ’,b);
Readln
End.
Kết quả của chương trình trên là:
UCLN la: 5
a=15 b=5
Rõ ràng ta thấy giá trị của hai biến a và b đều không thay đổi khi thoát
khỏi hàm uCLN.
Với bài toán “Hoán đổi giá trị hai biến a, b cho nhau” thì ta thấy giá trị
của a và b sẽ đổi chỗ cho nhau, không còn giống như trước nữa nên ta phải khai
báo các tham số a và b là tham biến.
Var a,b: integer;
Procedure hoanDoi(var x,y:integer);
Var tg:integer;
Begin
Var n,i: integer;
Function kTSNT(x: integer): boolean;
Var i,j: integer;
Begin
if x=1 then KTSNT:=false
else
begin
j:=x div 2;
i:=2;
while (x mod i 0) and (ij then KTSNT:= True else KTSNT:= False;
End;
End;
Begin
Write(‘Nhap gia tri cho n: ’); Readln(n);
For i:=1 to n do
if KTSNT(i)=true then Write(‘ ’,i);
Readln
End.
3.2. Viết chương trình nhập vào 1 mảng gồm n số nguyên dương (n được nhập
từ bàn phím, n
Var n,i: integer; dem: byte;
Function kTSHH(a: integer): Boolean;
Var i, s: integer;
Begin
s:=0;
for i:= 1 to a div 2 do if a mod i=0 then
s:=s+i;
if s=a then kTSHH:= true else kTSHH:= false;
End;
Begin
dem:=0;
Write(‘Nhap vao n: ’); Readln(n);
For i:=1 to n do if kTSHH(i)=true then
dem:=dem+1;
Writeln(‘Co ’,dem, ‘ so hoan hao nam trong doan
0..’,n);
Readln
Sáng kiến kinh nghiệm
Trang 15
Trường PTDTNT Hướng Hoá
End.
3.4. Hai số nguyên a và b được gọi là số nguyên tố cùng nhau nếu có ước chung
lớn nhất là 1. Viết chương trình nhập vào 2 số nguyên và thông báo chúng có
phải là hai số nguyên tố cùng nhau không?
Var a,b: integer;
Procedure chuanXau(var s:string);
Var st,st1:string;
Begin
st:='';
While length(s)0 do
Begin
st:=st+s[1];
st1:=s[1];
While pos(st1,s)0 do delete(s,pos(st1,s),1);
End;
s:=st;
End;
Function giaoXau(st1,st2:string):string;
Var st:string; i:byte;
Begin
st:='';
For i:=1 to length(st1) do
If pos(st1[i],st2)0 then st:=st+st1[i];
giaoXau:=st;
End;
Function sapXep(var st:string):string;
Var ch:char;i,j:byte;
Begin
For i:=1 to length(st)-1 do
For j:=i+1 to length(st) do
If st[i]
Trường PTDTNT Hướng Hoá
C. PHẦN KẾT LUẬN
I. Kết quả đạt được
Qua quá trình ôn luyện học sinh giỏi tại trường trong các năm học 20132014, 2014-2015, 2015-2016 nhờ áp dụng các định hướng trên mà thành tích
của các em tại kì thi học sinh giỏi cấp trường ngày càng tiến bộ, học sinh đã có
thể phân tích, đưa ra các hàm thủ tục hợp lí hơn đối với từng bài toán trong các
đề thi. Cụ thể qua các năm các em đã đạt được thành tích ở cấp trường như sau:
Năm học 2013-2014
Nhất Nhì
0
0
Năm học 2014-2015
Ba
KK
0
1
Nhất Nhì
1
0
giỏi, trong quá trình thực hiện bài viết này sẽ không tránh khỏi những thiếu sót.
Rất mong nhận được sự góp ý bổ ích của các thầy cô giáo và các bạn đồng
nghiệp để bài viết được hoàn thiện hơn.
Quảng Trị, ngày 20 tháng 4 năm 2016
XÁC NHẬN CỦA
THỦ TRƯỞNG ĐƠN VỊ
Tôi xin cam đoan đây là SKKN của tôi
viết, không sao chép nội dung của người khác.
Người viết
Lê Văn Chín
TÀI LIỆU THAM KHẢO
Sáng kiến kinh nghiệm
Trang 19
Trường PTDTNT Hướng Hoá
1. Nguyễn Hải Lộc- Nguyễn Thanh Tiên (2004), Giáo trình Ngôn ngữ lập trình
Turbo Pascal, Trường Đại học Sư phạm Huế
2. Vụ giáo dục trung học (2014), Tài liệu tập huấn Dạy học và kiểm tra, đánh
giá kết quả học tập theo định hướng phát triển học sinh môn Tin học cấp Trung
học cơ sở, Bộ giáo dục và đào tạo
3. Phạm Thế Long(Chủ biên)- Bùi Việt Hà- Quách Tất Kiên- Bùi Văn Thanh
(2014), Tin học dành cho trung học cơ sở Quyển 3, Nhà xuất bản Giáo dục Việt
Nam
4. Quách Tất Kiên (Chủ biên)- Nguyễn Ngọc Huy- Trần Quốc Khang- Tống
Xuân Tú- Lưu Kiên Trung (2008), Kiểm tra đánh giá thường xuyên và định kì