SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
PHẦN I. ĐẶT VẤN ĐỀ
I/ LÝ DO CHỌN ĐỀ TÀI
Công nghệ thông tin của nước ta hiện nay đang rất phát triển đưa ra nhiều
triển vọng cho tất cả các ngành trong việc tin học hoá xã hội. Nó có ý nghĩa rất
quan trọng đối với rất nhiều lĩnh vực của đời sống. Trong ngành giáo dục hiện
nay cũng là một ngành đang đưa công nghệ thông tin vào ứng dụng trong việc
dạy và học.
Trong thời đại hiện nay sự bùng nổ thông tin đã tác động lớn đến công
cuộc phát triển kinh tế xã hội người. Với con người của thời đại hiện nay ngoài
các kiến thức về chuyên môn thì hầu hết mọi người luôn sử dụng máy tính như
một công cụ trợ giúp. Chính vì vậy Đảng và Nhà nước đã xác định rõ ý nghĩa và
tầm quan trọng của tin học và CNTT, truyền thông cũng như những yêu cầu đẩy
mạnh của ứng dụng CNTT, đào tạo nguồn nhân lực đáp ứng yêu cầu CNH,
HĐH, mở cửa và hội nhập, hướng tới nền kinh tế tri thức của nước ta nói riêng v
thế giới nói chung.
Đưa môn tin học vào chương trình THPT là cần thiết và rất quan trọng đối
với sự phát triển của xã hội, phát triển nguồn nhân lực có trình độ cao. Một
trong những mục tiêu khi đưa Tin học vào trường học là nhằm giúp học sinh có
khả năng phân tích, tổng hợp, trừu tượng hoá, khái quát vấn đề và phát triển tư
duy. Muốn vậy ngoài dạy học Tin học đại trà trong nhà trường nhằm đảm bảo
tính phổ thông, hướng nghiệp và dạy nghề ta cần phải tạo điều kiện cho các học
sinh có năng khiếu về Tin học phát triển về khả năng lập trình để giải quyết bài
toán. Góp phần nâng cao chất lượng dạy và học Tin học ở nhà trường phổ thông,
bồi dưỡng các học sinh có năng khiếu và yêu thích môn tin học. Đặc biệt khi lập
trình để giải bài toán phức tạp thường rất dài, có thể gồm hàng nghìn lệnh làm
cho chương trình dài, rất khó nhận biết được thực hiện công việc gì và hiệu
chỉnh cũng khó khăn. Vì vậy vấn đề đặt ra là làm thế nào để chương trình dễ
đọc, dễ hiệu chỉnh và dễ nâng cấp. Với những lý do trên tôi quyết định chọn đề
tài :“Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi”.
GV: Hoàng Thị Yến THPT Nông Cống II
Thực trạng chung:
GV: Hoàng Thị Yến THPT Nông Cống II
2
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
Tri thức Tin học ngày càng nhiều, thời gian dạy học Tin học không được
tăng lên, dạy học lập trình càng gặp nhiều khó khăn. Nhu cầu xã hội đang rất
cần những kỹ sư công nghệ thông tin thật sự giỏi nhưng việc bồi dưỡng học sinh
yêu thích môn tin học trong trường THPT chưa đáp ứng được những yêu cầu cơ
bản. Do vậy việc dạy học sinh tiếp cận và chiếm lĩnh tri thức một cách tự lực rất
quan trọng. Học sinh yêu thích môn tin học nhưng gặp khó khăn về tài liệu, thời
gian và luôn phải lo lắng cho các kỳ thi nên thời gian dành cho môn tin không
có. Đó là thực trạng của đa số các trường phổ thông hiện nay.
* Một số thuận lợi và khó khăn khi thực hiện đề tài ở trường THPT Nông
Cống II
1. Thuận lợi:
* Nhà trường:
- Môn Tin học mới được đưa vào giảng dạy nhưng nhà trường đã tạo điều
kiện để học sinh có điều kiện tốt nhất để học, tạo điều kiện về máy móc, trang
thiết bị phục vụ cho việc dạy và học môn Tin học.
* Học sinh:
Là môn học có tính ứng dụng cao nên đa số học sinh có ý thức tìm hiểu về
môn học nói riêng và CNTT nói chung. Một số học sinh có khả năng phát triển
về lập trình và yêu thích lập trình.
2. Khó khăn:
* Nhà trường:
Nhà trường đã có hai phòng máy vi tính để cho học sinh học nhưng vẫn
còn hạn chế về số lượng cũng như chất lượng, mỗi ca thực hành có tới 2 – 3 em
ngồi cùng một máy nên các em không có nhiều thời gian để thực hành làm bài
tập một cách đầy đủ. Tuy đã có hai phòng thực hành nhưng số lớp nhiều (24 lớp
học) và mỗi lớp số lượng học sinh khoảng 45-55 học sinh do đó rất khó khăn
- Thời gian để hoàn thành các bài thực hành ngay trong giờ thực hành
cũng là một khó khăn lớn; do vậy khi giải quyết vấn đề học sinh chỉ chia nhỏ
bài toán và liên hệ với các chương trình con đã có để giải quyết.
Vì vậy, tôi đã xây dựng một số chương trình con thường dùng trong các
bài toán để bồi dưỡng học sinh khá giỏi và là các ví dụ minh hoạ cho các các
bài lý thuyết ở chương VI (Chương trình con và lập trình có cấu trúc – Tin học
11).
Hơn thế nữa, đây cũng là khoảng thời gian rất cần thiết cho các em làm
quen với lập trình có cấu trúc, từ đó phát huy những ý tưởng và những đam mê
của mình trong khi học tập và đó cũng là khoảng thời gian học tập rất bổ ích
cho những học sinh có ý định sau này tiếp tục theo đuổi chuyên ngành công
GV: Hoàng Thị Yến THPT Nông Cống II
4
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
nghệ thông tin hay có thể trở thành các lập trình viên giỏi trong tương lai…Vì
vậy, tôi đã đưa ra các chương trình con sau:
1. Chương trình con dạng thủ tục:
{Thủ tục gắn đại diện để đọc ghi tệp}
Procedure chuanbi;
var f,f1:text;
begin assign(f,fo);
reset(f); {có thể đọc luôn dữ liệu vào biến hoặc mảng}
assign(f1,fi); rewrite(f1);
end;
{……………………………………………………………………………}
{Thủ tục đọc dữ liệu từ tệp vào mảng}
Procedure doc;
var fa:text;
begin
assign(fa,f0);reset(fa);
{Thủ tục sắp xếp theo thuật toán sắp xếp nhanh:}
procedure qSort(l, r : integer);
var
i, j, x, y : integer;
begin
i := l; j := r; x := a[(l+r) div 2];
repeat
while a[i] < x do i := i + 1;
while x < a[j] do j := j – 1;
if i <= j then
begin
y := a[i]; a[i] := a[j]; a[j] := y;
i := i + 1; j := j – 1;
end;
until i > j;
if l < j then qSort(l, j);
if i < r then qSort(i, r);
end;
{…………………………………………………………… …………….}
{Thủ tục sắp xếp tăng dần các phần tử của một mảng:}
procedure sxep;
var i,j,tg : integer;
begin
for i := 1 to n-1 do
for j := i + 1 to n do
if a[i] > a[j] then begin
tg := a[i]; a[i] := a[j]; a[j] := tg;
end;
writeln('DAY SAU KHI SAP XEP TANG DAN:');
for i := 1 to n do writeln(a[i]);
for i:=n downto j do a[i+1]:=a[i];
a[j]:=k;
end;
{……………………………………………………………………………}
* Một số thủ tục về xâu
{Chuẩn hoá xâu}
Procedure chuanhoa(var s:string);
begin while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=length(s)-1 downto 2 do
if (s[i]=' ') and (s[i-1]=' ') then delete(s,i,1);
end;
{……………………………………………………………………………}
{chuyển kí tự đầu thành chữ hoa còn các kí tự khác thành chữ thường}
Procedure chuyen(var s:string);
begin s[1]:=upcase(s[1]);
for i:=2 to length(s) do
if s[i-1]=' ' then s[i]:=upcase(s[i])
else if (s[i]>='A') and(s[i]<='Z') then s[i]:= chr(ord(s[i])+32);
end;
{……………………………………………………………………………}
{Chuyển xâu kí tự sang xâu chữ in hoa}
Procedure chuyen(var St:String);
Begin
For i:=1 to length(St) do St[i]:=Upcase(St[i]);
End.
{……………………………………………………………………………}
{Chuyển xâu kí tự sang xâu chữ thường}
GV: Hoàng Thị Yến THPT Nông Cống II
7
Procedure GPTB2;
Var Delta: real;
Begin
Delta:=sqr(b) – 4*a*c;
if Delta<0 then writeln(‘phuong trinh vo nghiem’)
else
if delta=0 then
Begin
write(‘phuong trinh co nghiep kep’);
write(‘x1,2=’,-b/(2*a):8:2);
end
Else
begin
x1:=(-b+sqrt(delta))/(2*a);
GV: Hoàng Thị Yến THPT Nông Cống II
8
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
x2:= (-b-sqrt(delta))/(2*a);
writeln(‘phuong trinh co 2 nghiem phan biet
la:’);
writeln(‘x1=’,x1:8:2,’x2=’,x2:8:2);
end;
end;
{……………………………………………………………………………}
{Phân tích số nguyên n ra thừa số nguyên tố}
Procedure PhantichSoN ( Var N1 : Integer );
Var u,dem:Integer;
Begin
If ( N1 > 1 ) Then
Begin
9
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
{Tìm kiếm tuần tự trên dãy chưa có thứ tự}
Function tim(x: integer; a:array[1 n] of integer):word;
Var i: word;
Begin
I:=1;
While (i<=n) and not (x=a[i]) do
Inc(i);
If i>n then tim:=0 else tim:=i;
End;
{……………………………………………………………………………}
{Tìm kiếm tuần tự trên dãy đã có thứ tự}
Function tim(x: integer; a:array[1 n] of integer):word;
Var i: word;
Begin
I:=1;
While (i<=n) and not (x>a[i]) do
Inc(i);
If ((i<=n) and (a[i]>x)) or (i>n) then tim:=0 else tim:=i;
End;
{……………………………………………………………………………}
{Tìm kiếm nhị phân trên một mảng được sắp xếp}
Function tim(x: integer; a:array[1 n] of integer):word;
Var dau,cuoi,giua: integer;
Begin
dau:=1; cuoi:=n;
While cuoi>= dau do
Begin
Giua:=(dau+cuoi) div 2;
begin kt:=false;
if k=1 then kt:=true ;
for j:=1 to k div 2 do
if j*j=k then begin kt:=true;
break;
end;
cp:=kt;
end;
{……………………………………………………………………………}
{Hàm kiểm tra xem một số có phải là số nguyên tố hay không}
function nt(k:longint):boolean;
var kt:boolean; i:longint;
begin kt:=false;
if k=1 then kt:=false
else begin
i:=2;
while (i<=sqrt(k)) and (k mod i<>0) do inc(i);
if i>sqrt(k) then kt:=true else kt:=false;
end;
nt:=kt;
end;
GV: Hoàng Thị Yến THPT Nông Cống II
11
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
{………………………………………………………………………}
{Hàm kiểm tra xem một số có phải là số hoàn hảo hay không}
function hh(k:longint):boolean;
var kt:boolean; s,i:longint;
begin
s:=0;
he2:=tg+he2;
he10:=he10 div 2;
until he10=0;
doi:=he2;
end;
GV: Hoàng Thị Yến THPT Nông Cống II
12
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
{……………………………………………………………………………}
{Đổi cơ số 10 sang cơ số 8}
Function doi(he10:longint):String;
var he8,tg:string;
y:byte;
begin he8:=’’;
repeat y:=he10 mod 8;
str(y,tg);
he8:=tg+he8;
he10:=he10 div 2;
until he10=0;
doi:=he8;
end;
{……………………………………………………………………………}
{Đổi cơ số 10 sang cơ số 16}
Function doi(he10:longint):String;
var he16,tg:string;
y:byte;
begin he16:=’’;
repeat y:=he10 mod 16;
if y<10 then str(y,tg)
else tg:=chr(y+55);
hexa:=b;
end;
{……………………………………………………………………………}
{Hàm tìm max của 2 số thực}
Function Max(x,y:Real):Real;
Begin
If x>y Then Max:=x Else Max:=y;
End;
{……………………………………………………………………………}
{Hàm hoán đổi 2 giá trị cho nhau}
Function hoandoi(Var x,y:Real);
Var Tam:Real;
Begin
Tam:=x; x:=y; y:=Tam;
End;
{……………………………………………………………………………}
{Hàm tính giá trị x
n
.}
Function XMU(x:Real;n:Byte):Real;
Var i:Byte; S:Rea;
Begin
S:=1;
For i:=1 To n Do S:=S*x;
XMU:=S;
End;
{……………………………………………………………………………}
{Hàm tính n!}
Function GiaiThua(n:Word):Word;
Var P, i:Word;
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=length(s)-1 downto 2 do
if (s[i]=' ') and (s[i-1]=' ') then delete(s,i,1);
end;
procedure chuyen(var s:string);
begin s[1]:=upcase(s[1]);
for i:=2 to length(s) do
if s[i-1]=' ' then s[i]:=upcase(s[i])
else if (s[i]>='A') and(s[i]<='Z') then s[i]:= chr(ord(s[i])+32);
end;
procedure dem_so_tu(s:string);
begin
d:=0;
s:=' '+s;
for i:=1 to length(s) do
if (s[i]=' ') and (s[i+1]<>' ') then d:=d+1;
end;
function dodai_tu_max(s:string):byte;
var d:string; k:byte;
begin
k:=0;
repeat i:=1;
while s[i]<>' ' do inc(i);
d:=copy(s,1,i-1);
GV: Hoàng Thị Yến THPT Nông Cống II
15
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
delete(s,1,i);
if length(d)>k then k:=length(d);
until length(s)=0;
End;
{ Thu tuc phan tich N ra thanh cac thua so nguyen to }
Procedure PhantichSoN ( Var N1 : Integer );
Var u,dem:Integer;
Begin
If ( N1 > 1 ) Then
Begin
u := 2; dem := 0;
GV: Hoàng Thị Yến THPT Nông Cống II
16
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
While ( N1 > 1 ) do
If ( N1 mod u = 0 ) Then
Begin
dem:=dem+1;
Writeln( u);
N1 := N1 div u;
End
Else
u:=u+1;
End
Else
Writeln(' Khong the phan tich duoc' );
End;
{ Than chuong trinh chinh }
BEGIN
Clrscr;
Writeln('Phan tich so N thanh tich cua cac so nguyen to :' );
NhapSoN( N );
PhantichSoN( N );
If d mod i =0 then
begin
While d mod i=0 do d:=d div i;
While M mod i=0 do M:=M div i;
While N mod i=0 do N:=N div i;
end;
Inc(i);
end;
If M*N=1 then Write('M va N nguyen to tuong duong.')
Else Write('M va N khong nguyen to tuong duong.');
Readln
End.
IV/ KIỂM NGHIỆM
Sau khi tôi xây dựng các chương trình con và áp dụng vào bồi dưỡng
học sinh khá, giỏi của các lớp kết quả rất khả quan. Trong bồi dưỡng học sinh
giỏi thì việc sử dụng các chương trình con đã có giúp học sinh giảm bớt được
thời gian lập trình. Thời gian cho học sinh thực hiện thiết kế bài toán từ trên
xuống được tốt hơn, khả năng tư duy thuật toán của học sinh được tăng lên rõ
rệt. Học sinh của các lớp cũng rất thích với các việc thiết kế bài toán và việc
làm ‘mịn’ bài toán rồi sau đó được sử dụng các chương trình đã có để lập
trình.
Khi có các chương trình con đã có thì việc làm bài tập trở thành các tiết
thiết kế và làm ‘mịn’ bài toán do đó học sinh rất hứng thú với việc xây dựng
bài. Điểm số các bài kiểm tra của học sinh có sự tiến bộ so với học kỳ I.
GV: Hoàng Thị Yến THPT Nông Cống II
18
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
PHẦN 3. KẾT LUẬN VÀ ĐỀ XUẤT
I/ KẾT LUẬN
* Thông qua việc sử dụng các chương trình con đã có để lập trình:
Hoàng Thị Yến
GV: Hoàng Thị Yến THPT Nông Cống II
20
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
PHỤ LỤC
Phần 1: Đặt vấn đề Trang 1
I/ Lý do chọn đề tài
Phần 2: Giải quyết vần đề Trang 2
I/ Cơ sở lý luận
II/ Thực trạng vấn đề
III/ Giải pháp và tổ chức thực hiện
IV/ Kiểm nghiệm
Phần 3. Kết luận và đề xuất Trang 19
I/ Kết luận
II/ Ý kiến đề xuất
TÀI LIỆU THAM KHẢO
1. SGK tin học 11 - NXB Giáo dục Việt Nam
2. Sách bài tập tin học 11 - NXB Giáo dục Việt Nam
3. Đề kiểm tra tin học 11 - NXB Giáo dục Việt Nam
4. Tài liệu bồi dưỡng thường xuyên chu kỳ 3
5. Một số tài liệu trên mạng Internet.
GV: Hoàng Thị Yến THPT Nông Cống II
21
SKKN: Xây dựng một số chương trình con để bồi dưỡng học sinh khá, giỏi
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT NÔNG CỐNG II
SÁNG KIẾN KINH NGHIỆM
XÂY DỰNG MỘT SỐ CHƯƠNG TRÌNH CON ĐỂ
BỒI DƯỠNG HỌC SINH KHÁ GIỎI
Người thực hiện: Hoàng Thị Yến