SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT NGA SƠN
SÁNG KIẾN KINH NGHIỆM
SỬ DỤNG MỘT SỐ KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON
VÀ CÁC VÍ DỤ ĐỂ CỦNG CỐ CÁC KIẾN THỨC
VỀ KIỂU DỮ LIỆU XÂU
Người thực hiện: Nguyễn Văn Hải
Chức vụ:
Giáo viên
SKKN thuộc lĩnh vực môn: Tin Học
THANH HOÁ NĂM 2017
MỤC LỤC
NỘI DUNG
I. Mở đầu.............................................................................................
1.1 Lí do chọn đề tài......................................................................
1.2 Mục đích nghiên cứu...............................................................
1.3 Đối tượng nghiên cứu.............................................................
1.4 Phương pháp nghiên cứu........................................................
II. Nội dung của sáng kiến kinh nghiệm..........................................
2.1 Cơ sở lý luận của sáng kiến kinh nghiệm.................................
a. Hàm (Function)....................................................................
b. Thủ tục (Procedure).............................................................
c. Tham số hình thức................................................................
d. Tham số thực sự..................................................................
e. Tham biến ...........................................................................
g. Tham trị.................................................................................
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm....
2.3 Các giải pháp giải quyết vấn đề................................................
a. Thủ tục Delete(Var St:String; vt, n: Byte) .........................
b. Thủ tục Insert(S1: String; Var S2: string; Vt : byte)..............
c. Hàm Copy(S: string; vt, N:byte) ..........................................
d. Hàm length(s:string) ............................................................
e. Hàm upcase(ch :char) ...........................................................
g. Hàm Pos(s1,s2:string) ..........................................................
2.4 Kết quả thu được........................................................................
III.Kết luận, kiến nghị.........................................................................
3.1 Kết luận.....................................................................................
3.2 Kiến nghị...................................................................................
TRANG
1
1
1
2
2
2
2
2
3
3
3
3
3
3
4
4
5
6
7
9
9
11
11
11
12
I.MỞ ĐẦU
1.1. Lí do chọn đề tài.
Sự phát triển như vũ bão của khoa học công nghệ - kỹ thuật hiện đại đã đặt giáo
dục vào thử thách mới, đó là nhằm đào tạo ra thế hệ tương lai vừa có phẩm chất,
vừa phải có năng lực tiếp cận khoa học hiện đại để hội nhập với xu thế chung của
xã hội. Hiện nay trong các trường phổ thông đã chú trọng tới vấn đề này.
Nếu như trước đây môn Tin học chủ yếu chỉ truyền đạt cho các em kiến thức lý
thuyết, hàn lâm thì nay đã chú trọng tới thực hành và giải các bài tập, giúp các em
làm quen với lập trình trên máy tính, do đó các trường phổ thông đã được trang bị
cơ sở vật chất phục vụ dạy và học: phòng máy, phòng nghe nhìn đã được chuẩn
hóa, học sinh ý thức được môn học nên tập trung hơn,...Tuy nhiên, nhưng thay đổi
đó chưa thực sự mang lại hiệu quả cao trong việc tiếp thu và nhận thức bài học của
học sinh và phần lớn học sinh chưa có điều kiện để tiếp cận với nhiều tài liệu, cũng
như thời gian để làm việc với máy tính đang còn ít. Môn Tin học đối với học sinh là
môn khó, đặc biệt là chương trình lớp 11 vì kiến thức lập trình đa số với nhiều học
sinh là khó tiếp cận.
Trong quá trình giảng dạy chương trình lớp 11 học sinh gặp rất nhiều khó khăn
trong việc giải quyết các bài tập từ việc soạn thảo chương trình cho đến việc cho
chương trình chạy được.Việc dạy học nội dung kiểu xâu, chương trình con là những
khái niệm trừu tượng đối với học sinh, học sinh thường gặp khó khăn trong việc
tiếp thu các kiến thức về lập trình. Do đó để phần nào giải thích cách sử dụng hàm
và thủ tục trong xâu, tôi chọn sáng kiến kinh nghiệm : “Sử dụng một số khái niệm
về chương trình con và các ví dụ để củng cố kiến thức về kiểu dữ liệu xâu”. Giúp
học sinh nắm được các thủ tục và hàm để giải quyết một số bài toán đơn giản trong
phần lập trình tin học 11.
1.2. Mục đích nghiên cứu.
1
Đưa ra cấu trúc cụ thể các hàm và thủ tục của xâu, giải thích việc sử dụng các
hàm của xâu. Nâng cao kỹ năng sử dụng các hàm và thủ tục của xâu trong một số
trường hợp cụ thể.
1.3. Đối tượng nghiên cứu.
- Nghiên cứu cấu trúc của thủ tục và hàm của xâu, một số ví dụ sử dụng hàm và thủ
tục.
- Thực trạng học và làm bài tập môn Tin học của học sinh khối 11 tại trường THPT
Nga Sơn.
1.4. Phương pháp nghiên cứu.
- Phương pháp nghiên cứu lý thuyết.
- Phương pháp nghiên cứu thực tiễn.
- Phương pháp thực nghiệm sư phạm.
- Phương pháp thống kê toán học.
II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
Khi học sinh học bài học Bài 12 “Kiểu xâu”, học sinh đã có rất nhiều khó
khăn, nhầm lẫn trong việc xử lý dữ liệu vì các em đang quen với các bài toán xử lý
dữ liệu kiểu số, các bài toán quen thuộc như tính tổng hoặc tích của 1 dãy số thoả
mãn điều kiện nào đó.... Cách sử dụng các hàm và thủ tục của xâu, khi nào sử dụng
hàm, khi nào sử dụng thủ tục sẽ được trình bày cụ thể qua các phần tiếp theo của
sáng kiến kinh nghiệm này.
2.1 .Cơ sở lí luận
Việc sử dụng các khái niệm về chương trình con để giải thích cho các thủ tục, hàm
của xâu được thể hiện qua các khái niệm về chương trình con như sau:
a. Hàm (Function) : Là chương trình con 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ó[1].
Ví dụ : Hàm sqrt(x), sqr(x), abs(x)....
Trong mục 2.1 Khái niệm về hàm được tham khảo từ tài liệu tham khảo số 1
2
b. Thủ tục (Procedure) : Là chương trình con 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ó[1].
Ví dụ: Thủ tục Writeln, Readln, Delete....
c. Tham số hình thức:
Các biến được khai báo cho dữ liệu vào/ra của chương trình con được gọi là
tham số hình thức[1]
d. Tham số thực sự :
Trong lời gọi chương trình con, các biến và hằng thay thế tương ứng bởi tham số
hình thức được gọi là tham số thực sự [1].
e. Tham biến:
Trong lời gọi chương trình con các tham số hình thức được thay thế tương ứng là
tên các biến chứa dữ liệu ra được gọi là tham biến [1].
g. Tham trị:
Trong lời gọi chương trình con các tham số hình thức được thay thế tương ứng là
các giá trị cụ thể được gọi là tham trị [1].
Để phân biệt giữa tham trị và tham biến, ngôn ngữ lập trình pascal sử dụng từ
khóa var để khai báo những tham số biến.
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Mặc dù hiện nay công tác dạy và học môn Tin học tại các trường phổ thông đã
được quan tâm, cơ sở vật chất được trang bị nhưng chất lượng học sinh vẫn chưa
thực sự được nâng cao.
Tại trường THPT Nga Sơn, phần lớn học sinh có ý thức học tập và hứng thú với
môn Tin học. Trong những năm trở lại đây, ý thức được yêu cầu của xã hội, cũng
như là điều kiện cơ sở vật chất được nâng lên nên các em học sinh càng dành nhiều
thới gian cho môn học, từ đó mà chất lượng học sinh được nâng lên, đặc biệt ở lớp
Trong mục 2.1 Khái niệm về thủ tục, tham số hình thức, tham số thực sự, tham biến, tham trị
được tham khảo từ tài liệu tham khảo số 1
3
10 và lớp 12. Tuy nhiên, có một thực tế mà tôi và các đồng nghiệp trong tổ còn
nhiều băn khoăn, trăn trở đó là chất lượng học sinh ở khối lớp 11 chưa cao, đặc biệt
là các bài kiểm tra hay các bài tập khi được đề cập đến các em rất lúng túng, tỉ lệ
giải quyết được các bài tập ở trong một lớp chỉ tính trên đầu ngón tay.
Một trong những bài tập các em gặp khó khăn là các bài tập kiểu xâu, đặc biệt là
ở khâu thao tác khai báo biến, vì mục này chỉ cần sai một dấu chấm, hay dấu phẩy
là đã không chạy được chương trình. Việc sử dụng các thủ tục và hàm cũng là vấn
đề khó khăn với học sinh, các em không biết khi nào thì dùng thủ tục gì, khi nào thì
dùng hàm gì. Từ những khó khăn đó, học sinh rất ngại làm các bài tập về kiểu xâu
rói riêng và các bài tập ở chương trình tin học 11 nói chung. Từ chỗ không biết làm,
ngại làm mà các em dần mất hứng thú dẫn đến sợ phải làm các bài tập và kết quả
không cao.
2.3. Các giải pháp để giải quyết vấn đề
a. Thủ tục Delete(Var St:String; vt, n: Byte) thực hiện xóa n kí tự của biến xâu
st bắt đầu từ vị trí vt [2].
Giá trị xâu St
'abcd'
Thực hiện thủ tục
Delete(St,2,2)
Kết quả xâu St
'ad'
Đúng như tên gọi thủ tục này thực hiện công việc là xóa xâu, không trả về giá trị
nào qua tên của thủ tục. Khi thực hiện thủ tục nhiều học sinh viết
Delete('abcd',2,2) ='ad' khi đó giáo viên sẽ giải thích cho học sinh là trường hợp
này em viết như thế không đúng. Việc giải thích như thế đối với nhiều học sinh khá
giỏi là chung chung, nhiều học sinh sẽ không phục. Bản chất của thủ tục xóa xâu có
cấu trúc như sau
Delete(Var St:String; vt, n: Byte).Khi học xong về phần
chương trình con học sinh sẽ nhận ra xâu St ở đây được khai báo là tham biến, Vt
và n là tham trị. Để hiểu rõ hơn về thủ tục delete ta cùng tìm hiểu qua ví dụ sau :
Cấu trúc thủ tục Delete(Var St:String; vt, n: Byte) được tham khảo từ TLTK số 2
Ví dụ 14:
4
Lập trình nhập vào một xâu st. Yêu cầu xóa các dấu cách ở vị trí đầu xâu và cuối
xâu.
Program xoa_xau;
Var s: string;
Procedure xoa_xau_cach(Var st:string);
Begin
// Xoa dau cach dau xau
While St[1]= #32 Do delete(st,1,1);
// Xoa dau cach cuoi xau
While St[Length(st)]= #32 Do delete(st,length(st),1);
Xoa_dau_cach:=st;
End;
BEGIN
Write('Nhap xau S:'); Readln(S);
xoa_xau_cach(s);
Writeln(s);
Readln;
END.
b. Thủ tục Insert(S1: String; Var S2: string; Vt : byte) chèn xâu s1 vào xâu s2
bắt đầu từ vị trí vt[2].
Từ cấu trúc của thủ tục học sinh nhận thấy s1 và vt được khai báo là tham trị và s2
được khai báo là tham biến. Học sinh sẽ không được viết như sau
Insert('add','he',2)='hadde' mà phải lấy giá trị từ xâu s2. Để hiểu rõ hơn về thủ tục
chèn xâu là xem xét một số trường hợp sau :
Cấu trúc Thủ tục Insert(S1: String; Var S2: string; Vt : byte) được tham khảo từ TLTK số 2
Ví dụ 1 được tham khảo từ TLTK số 4
Trường hợp 1: Chèn vào vị trí nhỏ hơn hoặc độ dài xâu s2
5
Giá trị xâu S1
'abcd'
Giá trị xâu S2
'gha'
Thao tác
Insert(s1,s2,2)
Kết quả xâu s2
'gabcdha'
Trường hợp 2: Chèn vào vị trí lớn hơn độ dài xâu s2
Giá trị xâu S1
'abcd'
Giá trị xâu S2
'gha'
Thao tác
Insert(s1,s2,4)
Kết quả xâu s2
'ghaabcd'
Thao tác
Insert(s1,s2,0)
Kết quả xâu s2
'abcd'
Trường hợp 3: Chèn vào xâu rỗng
Giá trị xâu S1
'abcd'
Giá trị xâu S2
''
c. Hàm Copy(S: string; vt, N:byte) tạo xâu gồm N kí tự liên tiếp bắt đầu từ vị trí
vt của xâu s.
Giá trị xâu S
'abcd'
Biểu thức
Copy(s,2,2)
Kết quả
'ab'
Từ cấu trúc trên ta nhận thấy s,vt,n được khai báo là các tham trị. Do đó khi sử
dụng hàm học sinh thay thế các tham số hình thức bằng các giá trị tương ứng. Hàm
copy tham gia vào tính toán trong các biểu thức. Để hiểu rõ hơn ta xem xét ví dụ
sau :
Ví dụ 14: Viết chương trình liệt kê các từ của một xâu ký tự được nhập vào từ bàn
phím, mỗi từ phải được viết trên một dòng.
Program liet_ke_tu;
Uses Crt;
Cấu trúc Hàm Copy(S: string; vt, N:byte) được tham khảo từ TLTK số 2
Ví dụ 1 được tham khảo từ TLTK số 4
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
{Xóa các ký tự trắng ở đầu xâu}
6
While St[1]=#32 Do Delete(St,1,1);
{Xóa các ký tự trắng ở cuối xâu}
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
{Xóa các ký tự trắng ở giữa xâu}
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
End;
Begin
Write('Nhap xau St:'); Readln(St);
XoaTrangThua(St);
St:=St+#32;
Writeln('Liet ke cac tu trong xau: ');
While POS(#32,St)<>0 Do
Begin
Writeln(Copy(St,1,POS(#32,St)));
Delete(St,1,POS(#32,St));
End;
Readln;
End.
d. Hàm length(s:string) cho giá trị là độ dài xâu s [2].
Giá trị xâu S
'abcd'
Biểu thức
Length(s)
Kết quả
4
Cấu trúc Hàm length(s:string) được tham khảo từ TLTK số 2
Hàm trả về một giá trị là độ dài xâu s, nếu xâu s rỗng thì giá trị là 0.
Ví dụ 1[3]:
Lập trình nhập vào hai xâu s1 và s2. Thông báo ra màn hình kí tự đầu tiên của xâu
s1 có trùng với kí tự cuối cùng của xâu s2 hay không?
7
Program kiem_tra_trung;
Var st1,st2:string;
Function ktt(s1,s2:string):boolean;
Begin
IF s1[1]= s2[length(s2)] then ktt:=true else ktt:=false;
End;
BEGIN
Write('Nhap xau St1:'); Readln(St1);
Write('Nhap xau St2:'); Readln(St2);
IF ktt(st1,st2)=true then writeln('Trung nhau') else
then writeln('Khac nhau') ;
Readln;
END.
Ví dụ 23:
Lập trình nhập vào xâu s. Kiểm tra xâu có phải là xâu đối xứng hay
không?
Program kiem_tra_doi_xung;
Var st:string;
Function dxx(s:string):boolean;
Begin
Dxx:=true;
Ví dụ 1 được tham khảo từ TLTK số 3, Ví dụ 2 được tham khảo từ TLTK số 3
For i:=1 to length(s) div 2 Do
If s[i] <> s[ length(s)-i+1] then exit(false);
End;
BEGIN
8
Write('Nhap xau St:'); Readln(St);
IF dxx(st)=true then writeln('Xau doi xung') else
then writeln('Xau khong doi xung') ;
Readln;
END.
e. Hàm upcase(ch :char) cho chữ cái in hoa ứng với ch
Giá trị xâu ch
'a'
'ab'
Biểu thức
Upcase(ch)
Upcase(ch)
Kết quả
'A'
Không có giá trị đối với chương trình
dịch Turbo Pascal. Đối với Free Pascal
chương trình có kết quả là 'AB'
Để hiểu rõ hơn về hàm upcase ta xem xét ví dụ sau đây:
Ví dụ 14: Lập trình nhập vào một xâu gồm các chữ cái in hoa. Chuyển xâu vừa
nhập sang in thường.
Program doi_in_thuong;
Uses Crt;
Var St:String;
i:Byte;
Begin
Write('Nhap xau St: '); Readln(St);
Cấu trúc Hàm upcase(ch :char) được tham khảo từ TLTK số 2 , Ví dụ 1 được tham khảo từ
TLTK số 4
For i:=1 to length(St) do
If St[i] IN ['A'..'Z'] Then St[i]:=CHR(ORD(St[i])+32);
Write('Xau ket qua: ', St);
Readln;
End.
9
g. Hàm Pos(s1,s2:string) trả về vị trí đầu tiên của xâu s1 trong xâu s2 [2]
Giá trị xâu s1
Giá trị xâu s2
'a'
'haa'
'ab'
'cdde'
Sử dụng khái niệm về chương trình con ta
Biểu thức
Kết quả
Pos(s1,s2)
2
Pos(s1,s2)
0
nhận thấy s1 và s2 là được khai báo là
tham trị của hàm Pos. Hàm Pos được sử dụng nhiều trong các bài toán về xâu do đó
để hiểu thêm về hàm Pos ta xét một số ví dụ sau đây:
Ví dụ 13:
Lập trình nhập vào một xâu đưa ra màn hình xâu thu được khi loại bỏ hết dấu
cách trong xâu.
Program xoa_cach_xau;
Var st: string;
BEGIN
Write('Nhap xau St:'); Readln(St);
While Pos(#32,St) <> 0 Do delete(st,Pos(#32,st),1);
Writeln(st);
Readln;
END.
Ví dụ 23:
Lập trình nhập vào một xâu. Đếm số từ trong xâu
Ví dụ 1, ví dụ 2 được tham khảo từ TLTK số 3; Cấu trúc Hàm Pos(s1,s2:string) được tham khảo
từ TLTK số 2
Program dem_so_tu_trong_xau;
Var s:string;
Function dem_tu(st:string):integer;
Var i,d:integer;
Begin
{Xóa các ký tự trắng ở đầu xâu}
10
While St[1]=#32 Do Delete(St,1,1);
{Xóa các ký tự trắng ở cuối xâu}
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
{Xóa các ký tự trắng ở giữa xâu}
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
d:=0; st:=st + #32;
For i:=1 to length(st) -1 Do
If ( St[i] <>#32) and ( st[i+1]= #32) then d:=d+1;
Dem_tu:=d;
BEGIN
Write('Nhap xau S:'); Readln(S);
Writeln(dem_tu(s));
Readln;
END.
2.4. Kết quả thu được.
Trong quá trình trao đổi, thảo luận, trình bày học sinh được thể hiện khả năng
vận dụng, hiểu biết của mình nên các em tỏ ra hăng hái trong việc giơ tay phát biểu
tranh luận. Đồng thời tiết học trở nên sinh động hơn và giáo viên không đóng vai
trò là người xây dựng lý luận mà học sinh là người chủ động để giải quyết các vấn
đề.
Tiến hành trong giảng dạy ở các lớp, tôi nhận thấy sau khi được hướng dẫn học
sinh đã biết làm bài tập. Từ đó, kết quả kiểm tra, đánh giá đã có sự thay đổi theo
hướng tích cực, kết quả cụ thể ở lớp áp dụng dạy và lớp đối chứng như sau:
Tỉ lệ (%)\Lớp
Giỏi
Khá
Trung bình
11A
11E
11C
11D
(lớp dạy)
25
45
30
(lớp đối chứng)
14
40
33
(lớp dạy)
15
42
35
(lớp đối chứng)
8
36
33
11
Yếu
Kém
0
0
13
0
8
0
20
3
III. KẾT LUẬN, KIẾN NGHỊ
3.1. Kết luận
Sau khi vận dụng vào để củng cố, hướng dẫn học sinh thực hiện, tôi nhận thấy:
- Học sinh tiếp thu bài tốt hơn, các em đã làm được bài tập, chạy được chương trình
do đó tạo hứng thú trong học tập.
- Kết quả kiểm tra, đánh giá được nâng lên. Ở các lớp được hướng dẫn thực hiện, tỉ
lệ đạt khá giỏi tăng lên, không còn học sinh yếu kém hoặc tỉ lệ này còn rất thấp.
- Khi vận dụng vào hướng dẫn cho học sinh đòi hỏi bản thân phải tiếp cận nhiều tài
liệu để có nguồn tri thức phong phú, là điều kiện để tôi nâng cao tính tự học, nâng
cao kiến thức.
3.2. Kiến nghị
- Đối với đồng nghiệp, cần tăng cường hướng dẫn học sinh làm nhiều bài tập để
việc kiểm tra đánh giá học sinh bằng việc sử dụng bài tập, ngôn ngữ lập trình được
đồng bộ.
- Đối với nhà trường, quan tâm; xây dựng cơ sở vật chất đạt chuẩn để việc giảng
dạy tin học, đặc biệt là các giờ thực hành được thuận lợi.
- Đối với Sở Giáo dục, cần mở thêm các lớp tập huấn, tài liệu để nâng cao phương
pháp giảng dạy của giaó viên.
12
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ
Thanh Hóa, ngày 25 tháng 5 năm 2017
Tôi xin cam đoan đây là SKKN của
mình viết, không sao chép nội dung của
người khác.
Nguyễn Văn Hải
13
TÀI LIỆU THAM KHẢO
[1]. Sách giáo khoa tin học 11
Hồ Sĩ Đàm
chủ biên
[2]. Turbo Pascal cẩm nang tra cứu
Quách Tuấn Ngọc
chủ biên
[3]. Sách bài tập tin học 11
Hồ Sĩ Đàm
chủ biên
[4]. Một số bài tập tham khảo trên Internet.