Tải bản đầy đủ (.doc) (20 trang)

SKKNHÌNH THÀNH KĨ NĂNG XÂY DỰNG CHƯƠNG TRÌNH CON ĐỐI VỚI HỌC SINH THCS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (205.96 KB, 20 trang )

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.


Sáng kiến kinh nghiệm

Trang 2


Trường PTDTNT Hướng Hoá

II. Mục đích của đề tài
Tạo động cơ cho học sinh ý thức về ý nghĩa của các hoạt động khi sử dụng
chương trình con trong công việc lập trình. Từ đó, học sinh có thể liên hệ , vận
dụng sáng tạo vào giải quyết các bài toán lập trình và các tình huống thực tế.
III. Phương pháp nghiên cứu
Phương pháp nghiên cứu dựa trên lí thuyết và thực tiễn quá trình 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á để đưa ra kết
luận phù hợp.
IV. Phạm vi và đối tượng nghiên cứu
1. Phạm vi nghiên cứu
- Nghiên cứu lí luận: Phân tích - tổng hợp- khái quát.
- Nghiên cứu thực tiễn: đề tài tập trung nghiên cứu trong phạm vi các học
sinh được bồi dưỡng để chuẩn bị cho kì thi Học sinh giỏi cấp trường, cấp Tỉnh
trong các năm học 2013-2014, 2014-2015, 2015-2016.
2. Đối tượng nghiên cứu
Đối tượng nghiên cứu là kỹ năng xây dựng chương trình con của học sinh
khi bồi dưỡng Học sinh giỏi.
V. Thời gian thực hiện đề tài
Các năm học 2013 – 2014, 2014 – 2015 và năm học 2015 - 2016.

Sáng kiến kinh nghiệm

Trang 3



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.

Sáng kiến kinh nghiệm

Trang 4


Trường PTDTNT Hướng Hoá

2. Thủ tục
2.1. Định nghĩa thủ tục:
Một thủ tục được định nghĩa theo cú pháp sau:
PROCEDURE TênThủTục [(Danh sách các tham số hình thức)] ;
Các định nghĩa và khai báo địa phương;
BEGIN
Các câu lệnh xử lý; {thân của thủ tục}
END;

Trong đó:
- TênThủTục: là 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: là tên của các đối tượng đóng vai trò
nhận thông tin vào cho thủ tục hoạt động. Tham số hình thức có hai loại: tham
biến và tham trị. Các tham số hình thức đều được xác định rõ kiểu dữ liệu của
chúng và nếu là kiểu dữ liệu của người dùng thì kiểu này phải được định nghĩa
trước đó chứ không thể định nghĩa trực tiếp. Nếu là tham biến thì phải có từ
khoá Var đứng trước.
Ví dụ:
PROCEDURE UCLN(m,n:Word; Var a:Word);
TYPE MANG = Array[1..100] Of Integer;
.. .. .. ..;
PROCEDURE SapXep(Var A:Mang; N:Word);

.. .. .. ..;

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;


2.2. Lời gọi thủ tục
Sau khi thủ tục đã được định nghĩa, muốn sử dụng thủ tục đó thì phải thực
hiện lời gọi thủ tục. Lời gọi thủ tục được thực hiện như sau:
Nếu thủ tục có tham số hình thức thì lời gọi thủ tục phải có tên thủ tục và
các tham số thực tế kèm theo như sau:
TênThủTục [(danh sách tham số thực tế)];
Nếu thủ tục không có tham số hình thức thì lời gọi thủ tục chỉ có tên thủ
tục:

TênThủTục;
Khi thực hiện lời gọi thủ tục, nếu có truyền biến cho tham biến hoặc tham

trị thì trong quá trình xử lý giá trị của biến có thể bị thay đổi. Tuy nhiên, khi thủ
tục hoạt động xong thì:
- Nếu tham số thực tế là biến truyền theo kiểu tham trị thì biến đó sẽ lấy lại
giá trị của nó trước khi truyền cho thủ tục.
- Nếu tham số thực tế là biến truyền theo kiểu tham biến thì biến đó sẽ giữ
lại giá trị của lần thay đổi sau cùng.
Sáng kiến kinh nghiệm

Trang 6


Trường PTDTNT Hướng Hoá

3. Hàm
3.1. Định nghĩa hàm:
Một hàm được định nghĩa theo cú pháp sau:
FUNCTION TênHàm [(Danh sách các tham số hình thức)] : <Kiểu>;
Các khai báo địa phương;

Đị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



Trường PTDTNT Hướng Hoá

3.2. Lời gọi hàm:
Khi sử dụng hàm thì phải thực hiện lời gọi hàm. Thực hiện lời gọi hàm là
để lấy giá trị trả về của hàm. Vì vậy lời gọi hàm phải được đặt trong một biểu
thức có xử lý giá trị của nó. Khi thực hiện lời gọi hàm thì cũng phải truyền tham
số thực tế cho nó giống như đối với thủ tục.
Ví dụ: USES

CRT;

Var m,n,a:Word;
FUNCTION UCLN(m,n:Word):Word;
BEGIN
While m <> n do
if m>n then m:=m-n else n:=n-m;
UCLN:=m;
END;
BEGIN
Readln(m,n); a:= UCLN(m,n);
Writeln('USCLN của ', m ,' và ', n ,' là: ', a);
END.

Chương trình trên gồm có hai hàm:
Hàm UCLN(m,n)có giá trị trả về của hàm là ước số chung lớn nhất của hai
số nguyên dương m và n.
4. Biến toàn cục và biến địa phương
Biến toàn cục là các biến được khai báo sau từ khoá VAR của chương trình

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.

(2). Tên của các biến địa phương có thể trùng tên với tên biến toàn cục.
Tuy nhiên khi chương trình con được gọi, nếu có sử dụng biến trùng tên thì
trong quá trình chương trình con hoạt động, Turbo Pascal sẽ hiểu đó là biến địa
phương, khi đó biến toàn cục tạm thời bị che dấu cho đến khi chương trình con
hoạt động xong.
(3). Biến toàn cục có thể tham gia trong các chương trình con, mọi tác động
ảnh hưởng đến nó vẫn giống như khi chúng tham gia trong chương trình chính.
Ngược lại, biến địa phương chỉ tham gia trong chương trình con khai báo chúng,
không thể tham gia trong chương trình chính.
II. Cơ sở thực tiễn
1. Mục đích của việc viết chương trình con
Để giúp học sinh hiểu được mục đích của việc viết chương trình con như
thế nào. Giáo viên sẽ cho HS thực hiện bài tập sau rồi viết nhận xét:
Xét 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. Trong đó:
- Hình thứ nhất có hai kích thước là a1, a2;
Sáng kiến kinh nghiệm

Trang 9


Trường PTDTNT Hướng Hoá

- Hình thứ hai có hai kích thước là b1, b2.
Var a1, b1, a2, b2, p1, p2, S1, S2, d1, d2: Real;
Begin
Writeln('Nhap hai canh cua HCN thu nhat:');
Write('a1 = '); Readln(a1);
Write('b1 = '); Readln(b1);
Writeln('Nhap hai canh cua HCN thu hai:');

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;

Procedure nhapDoDai(Var x, y: Real; i: Byte);
Begin
Writeln('Nhap hai kich thuoc cua HCN thu ',i,':');
Repeat
Write('Canh thu nhat: '); Readln(x);
Write('Canh thu hai : '); Readln(y);
If (x <= 0) Or (y <= 0) Then Writeln('Nhap lai!');
Sáng kiến kinh nghiệm

Trang 10


Trường PTDTNT Hướng Hoá

Until (x > 0) And (y > 0);
End;
Procedure Tinh(a, b: Real; k: Byte);
Begin
Writeln('Hinh chu nhat thu ',k,':');
Writeln('Chu vi bang: ',2 * (a + b));
Writeln('Dien tich bang : ',a * b);
Writeln('Duong cheo bang: ',sqrt(a * a + b * b));
End;
Begin
Nhap(a1, b1, 1); nhapDoDai(a2, b2, 2);
Tinh(a1, b1, 1); tinh(a2, b2, 2);
Readln
End.

Như vậy việc viết chương trình con sẽ xoá bỏ sự dài dòng không cần thiết

(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.

Từ những bài toán như vậy sẽ dần hình thành cho học sinh kỹ năng xác
định các chương trình con cần thiết để giải bài toán.
2.2. Sử dụng hàm hay thủ tục để viết các chương trình con
Hầu hết các bài toán có thể giải được chỉ bằng hàm hoặc chỉ bằng thủ tục.
Nhưng việc chọn hàm hay thủ tục cho phù hợp với từng bài toán riêng biệt giúp
chúng ta giải quyết bài toán một cách rõ ràng, tiện lợi và khoa học hơn. Do đó
việc xác định hàm hay thủ tục cũng là một bước rất quan trọng.
Việc chọn này phụ thuộc vào bước xác định các chương trình con ở trên.
Thông thường, các chương trình con thể hiện việc nhập, xuất dữ liệu ta thường
viết ở dạng thủ tục còn các chương trình con thể hiện việc tính toán, kiểm tra
điều kiện sẽ được thể hiện ở dạng hàm.
Xét 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ố” với các chương trình con như nhapDay,
kTSNT, inKetQua thì sẽ viết thành 2 thủ tục và 1 hàm đó là:
- Procedure nhapDay(……….);
- Function kTSNT(………): boolean;
- Procedure inKetQua(…….);

2.3. Khai báo là tham trị hay tham biến trong chương trình con
Việc khai báo tham biến hay tham trị ảnh hưởng đến kết quả của chương
trình. Khi sử dụng tham trị nếu tham số thực tế là biến truyền theo kiểu tham trị
thì biến đó sẽ lấy lại giá trị của nó trước khi truyền cho thủ tục, còn biến truyền
theo kiểu tham biến thì biến đó sẽ giữ lại giá trị của lần thay đổi sau cùng. Do
đó, giáo viên phải cần củng cố, khắc sâu thêm cho học sinh thông qua các ví dụ,
các bài toán cụ thể để học sinh có thể hiểu hơn các bản chất của việc khai báo.
Sáng kiến kinh nghiệm

Trang 12



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

tg:=x;
x:=y;
y:=tg;
End;
Begin
a:=15; b:=5;
hoanDoi(a,b);
Writeln(‘a= ‘,a,’ b= ‘,b);
Readln
End.

Kết quả của chương trình trên là:
Sáng kiến kinh nghiệm

Trang 13


Trường PTDTNT Hướng Hoá

a=5 b=15
Ta thấy với cách truyền tham biến này, giá trị của a và b đều thay đổi
ngay cả khi thoát khỏi thủ tục hoán đổi.
2.4. Gọi hàm, thủ tục
Việc gọi thủ tục đơn giản chỉ là viết tên thủ tục cùng các tham số thực tế
truyền vào, nếu thủ tục không có tham số thực tế thì chỉ cần viết tên thủ tục. Còn
thực hiện lời gọi hàm là để lấy giá trị trả về của hàm. Vì vậy lời gọi hàm phải
được đặt trong một biểu thức có xử lý giá trị của nó.
3. Một số ví dụ
3.1. Viết chương trình in ra tất cả các số nguyên tố nhỏ hơn hoặc bằng n (n được
nhập từ bàn phím, n<10000).

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 (i<=j) do i:=i+1;
if i>j 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<1000). Sau đó in ra căn bậc hai của các số chính phương trong
mảng vừa nhập.
Type Mang= Array[1..1000] of integer;
Var a: mang; i,n:integer;
Procedure nhapMang(Var a:mang, i:integer);
Var j:integer;
Sáng kiến kinh nghiệm

Trang 14



Trường PTDTNT Hướng Hoá

Begin
For j:=1 to I do
Begin
Write(‘Nhap a[’,j, ‘]= ’);
Readln(a[j]);
End;
End;
Function kTSCP(n: integer): boolean;
Var i:integer;
Begin
i:=Trunc(sqrt(n));
if i*i=nthen kTSCP:=true else kTSCP:= false;
End;
Begin
Write(‘Nhap so phan tu cho mang: ”); Readln(n);
nhapMang(a,n);
For i:=1 to n do if kTSCP(a[i])=true then
Write(‘ ’,sqrt(a[i]));
Readln
End.

3.3. Trong buổi học nhóm, bạn Tí đố bạn Tèo: trong các số tự nhiên N
(N<=10000) cóbao nhiêu số hoàn hảo, bạn Tí cho biết: số tự nhiên a được gọi là
số hoàn hảo nếu tổng các ước của a (kể cả 1) bằng chính nó, ví dụ 6 là số hoàn
hảo vì 6=1+2+3. Em hãy viết chương trình giúp bạn Tèo tìm ra câu trả lời (với n
nhập từ bàn phím).

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;

Function uCLN(a,b: integer):integer;
Begin
while a<>b do if a>b then a:=a-b else b:=b-a;
ucln:=a;
End;
Begin
Write('Nhap a: '); Readln(a);
Write('Nhap b: '); Readln(b);
If uCLN(a,b)=1 then Writeln(a,' va ',b,' la hai so
nguyen to cung nhau')
Else Writeln(a,' va ',b,' khong phai la hai so nguyen
to cung nhau');
Readln
End.

3.5. Cho hai xâu st1, st2 gồm các kí tự số từ 0 đến 9 được biểu diễn như sau:
st1= x1x2x3x4…xn; st2= y1y2y3y4…ym (n,m<=250). Hãy viết chương trình sinh ra
xâu st thoả mãn các điều kiện sau:
- st gồm các kí tự số vừa có mặt ở xâu st1, vừa có mặt ở xâu st2 ;
- Các kí tự số trong xâu st chỉ xuất hiện duy nhất một lần ;
- Xâu st nếu đổi ra số sẽ nhận được một số đạt giá trị lớn nhất.

Sáng kiến kinh nghiệm

Trang 16


Trường PTDTNT Hướng Hoá

Var st,st1,st2:string;i,j:byte;

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]Begin
ch:=st[i];
st[i]:=st[j];
st[j]:=ch;

End;
sapXep:=st;
End;
Begin
Write('Nhap xau st1: '); readln(st1);
Write('Nhap xau st2: '); readln(st2);
If length(st1)>length(st2) then
Begin
chuanXau(st2);
st:=giaoXau(st2,st1);
End
Else
Begin
Sáng kiến kinh nghiệm

Trang 17


Trường PTDTNT Hướng Hoá

chuanXau(st1);
st:=giaoXau(st1,st2);
End;
Writeln('Xau can tim la: ',sapXep(st));
Readln
End.

Sáng kiến kinh nghiệm

Trang 18



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


Năm học 2015-2016

Ba

KK

1

0

Nhất Nhì
1

1

Ba

KK

1

0

II. Kiến nghị
Tôi mong ước rằng trong tương lai, phòng máy vi tính sẽ được mở rộng,
đảm bảo số lượng máy tính tạo điều kiện cho các em học sinh được làm quen
với máy tính nhiều hơn, thực hành nhiều hơn. Vì có như vậy chất lượng dạy và
học của giáo viên và học sinh mỗi ngày đạt chất lượng cao hơn.
Trên đây là một số biện pháp mà tôi đã áp dụng vào dạy ôn thi học sinh

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ì

môn Tin học lớp 8, Nhà xuất bản Giáo dục
5. 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 Sách Giáo viên, Nhà xuất
bản Giáo dục Việt Nam

Sáng kiến kinh nghiệm

Trang 20



×