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

(Sáng kiến kinh nghiệm) một số dạng bài tập kiểu xâu dành cho đối tượng học sinh khối 11 trường THPT lê lai

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 (242.18 KB, 20 trang )

MỤC LỤC
1. PHẦN MỞ ĐẦU...............................................................................................2
1.1. LÝ DO CHỌN ĐỀ TÀI..............................................................................2
1.2. MỤC ĐÍCH NGHIÊN CỨU......................................................................3
1.3. ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU...........................................3
1.4. PHƯƠNG PHÁP NGHIÊN CỨU..............................................................3
2. PHẦN NỘI DUNG..........................................................................................4
2.1. CƠ SỞ LÝ LUẬN......................................................................................4
2.2. THỰC TRẠNG VẤN ĐỀ..........................................................................4
2.3. MỘT SỐ VÍ DỤ ỨNG DỤNG ĐƯỢC VIẾT BẰNG NGƠN NGỮ LẬP
TRÌNH PASCAL.............................................................................................5
2.3.1. Một bản nhạc ngắn của đồng hồ, tất cả các nốt nhạc đều ở quảng 8 trung. [1].........6
2.3.2. Vẽ đường gấp khúc [1]........................................................................7
2.3.3. Cho biết số ngày của tháng và năm bất kì . [1].................................................8
2.3.4. Cho biết số ngày của năm bất kì[1]………………………………….8
2.3.5. Tạo ngơi nhà, tơ màu ngơi nhà . [2]...............................................................9
2.3.6. Kiểm soát đường đi của con hậu trên bàn cờ vua . [2]......................................11
2.3.7. Đồng hồ điện tử hoạt động trên màn hình. [2]................................................12
3.3.8. Trị chơi rắn săn mồi[4]........................................................ ……....13
2.3.9. Trò trơi caro. [4]......................................................................................15
2.4. HIỆU QUẢ ĐẠT ĐƯỢC........................................................................16
2.4.1. Kết quả sau khi áp dụng vào thực tế.............................................................16
2.4.2. Điều kiện để áp dụng sáng kiến.........................................................18
3. PHẦN KẾT LUẬN, KIẾN NGHỊ...............................................................19
3.1. KẾT LUẬN..............................................................................................19
3.2. KIẾN NGHỊ.............................................................................................19
TÀI LIỆU THAM KHẢO................................................................................20
1


1 1. PHẦN MỞ ĐẦU


1.1. LÝ DO CHỌN ĐỀ TÀI
Trong chương trình dạy Tin học ở bậc THPT, đặc biệt là chương trình Tin học
khối 11 rất khó cho Thầy Cơ giáo cũng như học sinh, vì phải làm thế nào để học sinh
có thể hiểu được ngơn ngữ lập trình, để từ đó có thể lựa chọn và thiết kế thuật tốn.
Đối với học sinh thì phải làm quen với lối suy nghĩ logic với sự hoạt động của máy
tính, mà đây lại là một lối suy nghĩ hồn tồn khác với các mơn học khác.
Bộ mơn Tin học đã từng được rất ít học sinh Lê Lai quan tâm, u thích vì nó
khơng thuộc tổ hợp mơn thi ĐH nào. Nhất là Tin học lớp 11, một nội dung kiến thức
cần rất nhiều sự tư duy sâu và khả năng sáng tạo. Nhưng sau gần hai năm được điều
động lên trường THPT Lê Lai, tôi tự hào rằng đã khích lệ được đại đa số học sinh có
hứng thú học tập với bộ môn Tin học. Thu hút học sinh khối 11 có nhu cầu tìm hiểu
sâu hơn các dạng bài tập của Tin học 11. Tôi đã xâu chuỗi được một vài dạng bài tập
liên quan đến các nội dung để hướng dẫn cho nhóm học sinh khá này tìm hiểu và giải
quyết như: Bài tập về sử dụng vòng lặp, Bài tập về kiểu mảng, bài tập với dãy số, bài
tập về kiểu xâu…
Khi hướng dẫn các em học sinh tìm hiểu sâu hơn về dữ liệu kiểu xâu, tơi nhận
thấý các em có sự hứng thú đặc biệt hơn nhất. Các em đã dành rất nhiều thời gian để
trăn trở cách giải quyết cho mỗi bài tốn mà cơ đưa ra. Khi bài tốn được giải quyết
xong, các em lại bừng lên ham muốn giải quyết các bài tốn khác nữa. Điều đó chính
là động lực để tôi yêu nghề hơn, yêu học sinh hơn.
Với sáng kiến kinh nghiệm “MỘT SỐ DẠNG BÀI TẬP KIỂU XÂU DÀNH
CHO ĐỐI TƯỢNG HỌC SINH KHỐI 11 _TRƯỜNG THPT LÊ LAI” tôi muốn
gửi tới các bạn đồng nghiệp một chút kinh nghiệm của bản thân về việc hệ thống lại
các dạng bài tập kiểu xâu dành cho học sinh thực sự u thích lập trình.
1.2. MỤC ĐÍCH NGHIÊN CỨU
- Giới thiệu một số phép toán trên kiểu dữ liệu xâu, đặc biệt phần này có cung
cấp thêm một số hàm, thủ tục chưa được giới thiệu trong bài 12 sách giáo khoa tin
học 11, đồng thời đưa ra một số ví dụ tương ứng để học sinh dễ dàng vận dụng.
- Hệ thống các bài toán dưới dạng một số dạng bài tập thường gặp giúp cho
giáo viên và học sinh phần nào nhận dạng và giải một số bài tập liên quan.


2


- Nâng cao chất lượng dạy và học môn Tin học trong trường phổ thông, đặc
biệt là dạy học lập trình ở Tin học lớp 11.
- Góp phần đổi mới phương pháp dạy học trong trường phổ thơng nói chung và
mơn Tin học nói riêng.
- Góp phần khơi dậy lịng đam mê, u thích và hứng thú khi học mơn Tin học
của học sinh. Đặc biệt là định hướng nghề nghiệp cho đối tượng học sinh có lịng
đam mê Tin học thực sự. Giúp các em nhìn thấy và vận dụng được những kiến thức
đã học ở các môn học vào tư duy giải quyết các bài toán thực tế, gần gũi, thiết thực
trong môi trường học tập của bản thân.
1.3. ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU
- Học sinh khối 11 trường THPT Lê Lai năm học 2017-2018
- Học sinh khối 11 trường THPT Lê Lai năm học 2018-2019
- Sử dụng ngơn ngữ lập trình Turbo Pascal và Free Pascal để tiến hành lập
trình các bài tập thực nghiệm.
- Hình thành được kỹ năng thực hành giải các bài tập cho học sinh và có được
một hệ thống kiến thức với các bài tập về kiểu dữ liệu xâu. Phạm vi thực hiện trên
kiểu dữ liệu xâu
1.4. PHƯƠNG PHÁP NGHIÊN CỨU
- Dựa trên những bài toán thực tiễn của cuộc sống được giải quyết bằng ngơn
ngữ lập trình Pascal. Nhất là các bài tốn vận dụng lập trình có cấu trúc kiểu xâu.
- Dựa trên cơ sở lý thuyết của Ngơn ngữ lập trình Pascal. Cách khai báo và
truy xuất đến kiểu dữ liệu xâu. Sự hoạt động tuần tự từng bước của máy tính khi thực
hiện chương trình.
- Thu thập dữ liệu thông qua việc hỏi học sinh về mức độ biết, hiểu và vận
dụng ngôn ngữ lập trình Pascal vào giải các bài tốn trong các mơn học khác.
- Phân tích đánh giá mức độ học sinh hứng thú với môn học.

- Tổng kết rút kinh nghiệm

3


2. PHẦN NỘI DUNG
2.1. CƠ SỞ LÝ LUẬN
Tạo hứng thú cho người học luôn là một vấn đề quan trọng trong hoạt động
dạy - học. Bởi vì, như chúng ta biết, dạy - học là một hoạt động phức tạp, trong đó
chất lượng, hiệu quả cơ bản phụ thuộc vào người học. Và điều này lại phụ thuộc vào
nhiều yếu tố, như: năng lực nhận thức, động cơ học tập, sự quyết tâm...; nó cịn phụ
thuộc vào: mơi trường học tập, người tổ chức quá trình dạy học, sự hứng thú trong
học tập.
Các nhà nghiên cứu tâm lý học cho rằng, hứng thú là thái độ đặc biệt của cá
nhân đối với đối tượng nào đó, nó có ý nghĩa đối với cuộc sống và có khả năng mang
lại khối cảm cá nhân trong quá trình hoạt động. Sự hứng thú biểu hiện trước hết ở sự
tập trung chú ý cao độ, sự say mê của chủ thể hoạt động. Sự hứng thú gắn liền với
tình cảm con người. Trong bất cứ cơng việc gì, nếu có hứng thú làm việc, con người
sẽ có cảm giác dễ chịu với hoạt động, làm nẩy sinh khát vọng hành động một cách có
sáng tạo. Ngược lại, nếu khơng có hứng thú, dù là hoạt động gì cũng sẽ khơng đem
lại hiệu quả cao. Đối với các hoạt động nhận thức, sáng tạo, hoạt động học tập, khi
khơng có hứng thú, kết quả sẽ khơng là gì hết, thậm chí xuất hiện cảm xúc tiêu cực.
[4]
Việc học có tính chất đối phó, miễn cưỡng, người học may lắm chỉ tiếp thu
được một lượng kiến thức rất ít, khơng sâu, khơng bản chất. Vì thế dễ quên.
Khi có hứng thú, say mê trong nghiên cứu, học tập thì thì việc lĩnh hội tri thức
trở nên dễ dàng hơn; ngược lại, khi nắm bắt được vấn đề, tức là hiểu được bài thì
người học lại có thêm hứng thú. Trên thực tế, những người khơng thích, khơng hứng
thú khi học mơn học nào đó thường là những người khơng học tốt mơn học đó. Chính
vì vậy, việc tạo hứng thú cho người học được xem là yêu cầu bắt buộc đối với bất cứ

ai làm công tác giảng dạy, đối với bất cứ bộ môn khoa học nào.
2.2. THỰC TRẠNG VẤN ĐỀ
Đặc điểm môn
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. Đây là một thuận
lợi cho học sinh, học sinh không phải học từ đầu để làm quen với môn học.
Trong mục 2.1: Đoạn “các nhà nghiên cứu…..cảm xúc tiêu cực” được trích dẫn trong TLTK số 4

4


Sự liên quan của môn Tin học với các môn học khác là nhiều, vì vậy học sinh
sẽ phải vất vả để xem lại, tìm kiếm lại tri thức ở các mơn học khác. Đặc biệt nội dung
lập trình trong mơn học Tin học lại có liên quan rất nhiều đến kiến thức các môn
khoa học tự nhiên, liên quan nhiều đến tư duy Toán học. Nếu học sinh yếu tư duy về
Tốn học thì sẽ rất là khó khăn khi lập trình. Nếu học sinh có tư duy Tốn học nhưng
không hứng thú với môn Tin học, học cho biết, học để đối phó, thì thường các em sẽ
khơng nghiên cứu kĩ bài học dẫn đến sẽ gặp phải một số khó khăn trong lập trình.
Nếu học sinh yếu tư duy và khơng hứng thú với mơn học thì sẽ rất khó cho các thầy
cơ. Muốn giải quyết được việc này thì giáo viên cần phải dẫn dắt học sinh tiếp cận
với môn học một cách tự nhiên, hào hứng thông qua những dạng bài tập thực tiễn liên
quan đến các vấn đề mà các em yêu thích.
Giáo viên
Nhiều giáo viên cịn hạn chế về trình độ, khả năng cập nhật thông tin. Không
chỉ vậy, một số giáo viên chưa hiểu rõ thuật toán để diễn đạt trong việc dạy lập trình.
Đơi khi giáo viên cịn thờ ơ, ln cảm thấy chán nản khi học sinh của mình khơng có
hứng thú học tập. Chính điều này đã làm cho giáo viên không chú trọng việc đổi mới
phương pháp. Dẫn đến học sinh mất đi khả năng tìm hiểu và tư duy giải quyết bài
toán, hứng thú trong việc học lập trình. Chưa kể, mơn Tin học khơng thuộc nhóm các
mơn tổ hợp thi THPT Quốc gia, nên ngồi bồi dưỡng cho học sinh tham gia đội tuyển

học sinh giỏi thì khơng chú trọng bồi dưỡng cho các đối tượng học sinh khác. Giáo
viên cần phải biết nhóm đối tượng học sinh khá là nguồn nhân lực dồi dào cho ngành
CNTT, là nhóm đối tượng cần được giáo viên THPT truyền lửa, truyền đam mê nhiều
nhất.
Học sinh
Khi bước vào học phổ thơng thì học sinh đã bắt đầu định hình học theo khối để
thi đại học. Thời gian học chủ yếu dành cho các mơn học chính như Tốn, Lý, Hóa,
Văn, Anh. Tin học là một mơn phụ nên thời gian để học chỉ là những tiết học ở trên
lớp. Đối với Tin học 10, 12 thì tính ứng dụng của mơn học trong thực tế các em dễ
dàng nhìn thấy và thực hiện được ln. Cịn với Tin học 11 thuộc về lĩnh vực lập
trình, khó có sản phẩm để các em nhìn thấy. Hơn thế việc tư duy thuật tốn cũng là
một nội dung khó đối với các em. Điều này dẫn đến rất nhiều học sinh không thích và
học kém mơn học này.
Từ thực tế trên tơi muốn minh chứng thật rõ nét cho các em thấy giải bài tốn
trên máy tính khơng hề khó, có chăng là sự đam mê, tích cực chủ động của các em

5


mà thôi. Đặc biệt học sinh sẽ nhận ra việc học Tin học lập trình khơng q khó và
u thích mơn học.
Lập trình có cấu trúc_kiểu xâu
Qua việc giảng dạy học sinh học lập trình lớp 11, tơi nhận thấy học sinh còn
nhiều bỡ ngỡ khi tiếp cận với lập trình có cấu trúc cũng như kiểu dữ liệu xâu. Với các
thao tác duyệt xâu và các thao tác kiểm tra tính chất phần tử của xâu cần phải sử dụng
cấu trúc lặp học sinh thường gặp nhiều khó khăn:
+ Sử dụng các biến điều khiển.
+ Tác động đến biến điều khiển ngay trong vịng lặp.
+ Thơng báo kết quả trong vịng lặp dẫn đến tình trạng lặp lại việc thơng báo
kết quả khi thực hiện chương trình.

2.3. Một số dạng bài tập kiểu xâu dành cho đối tượng học sinh khá khối 11
Để xử lý các chuỗi văn bản, Pascal đưa ra một kiểu dữ liệu mới gọi là xâu ký
tự (định nghĩa bằng từ khóa String). Tuy nhiên độ dài của String tối đa chỉ 255 mà
thực tế thì ta thường gặp xâu có độ dài rất lớn, vậy có cách nào để có thể khắc phục
được điều đó, nhiệm vụ của giáo viên phải giới thiệu thêm cho nhóm học sinh khá
một số nội dung liên quan đến kiểu dữ liệu xâu.
Để hướng dẫn học sinh khá giải quyết các dạng bài tập lên quan đến kiểu xâu
thì giáo viên hướng dẫn các em hệ thống lại các kiến thức cơ bản về dữ liệu kiểu xâu
[1] như:
 Khái niệm, tham chiếu đến phần tử xâu
- Khái niệm: Xâu là dãy các kí tự thuộc bảng mã ASCII, mỗi kí tự được gọi là một
phần tử của xâu. Số lượng kí tự trong một xâu được gọi là độ dài của xâu. Xâu có độ
dài bằng 0 được gọi là xâu rỗng. Trong Turbo Pascal xâu rỗng được viết bởi hai dấu
nháy đơn liền nhau ‘và’.
- Tham chiếu đến phần tử xâu: <tên biến xâu>[chỉ số phần tử]
VD: s[1]=’T’, s[4]=’T’, s[6]=’L’.

Lưu ý: - Kiểu xâu khác với kiểu char.

 Khai báo: Var <tên biến xâu>: string[độ dài lớn nhất của xâu];
- Nếu không khai báo độ dài lớn nhất của xâu thì xâu sẽ nhận giá trị ngầm định là
255.
Trong mục 2.3: Các kiến thức cơ bản được trích dẫn trong TLTK số 1

6


Xâu ký tự trong bộ nhớ chiếm số byte bằng số ký tự cực đại được khai báo cộng với
byte đầu tiên chứa số ký tự hiện có của xâu.
- Ngồi ra có các kiểu khai báo khác của xâu như:

+ Shortstring: Chính là String
+ longstring: là mảng ký tự có kiểu char. Thơng thường kiểu char có
kích thước 16 bit nên mảng có kích thước tối đa 16 bit = 65535 ký tự
+ ansistring (chỉ trong free pascal)có kích thước gần 2GB = 230 B
 Cách nhập/xuất: Cách đọc hay viết kiểu xâu tương tự như các kiểu dữ liệu
khác, ta sử dụng các thủ tục READ, hoặc WRITE.
Phép ghép xâu (phép cộng xâu): kí hiệu là dấu cộng (+), dùng để ghép nhiều
xâu thành một.
 Các phép so sánh <, <=, =, >=, >, <> có thứ tự thực hiện ưu tiên thấp hơn
phép ghép xâu và thực hiện việc so sánh hai xâu theo các quy tắc sau:
- Xâu A > xâu B nếu kí tự đầu tiên khác nhau giữa chúng kể từ trái sang trong xâu A
có mã ASCII lớn hơn.
 Một số thủ tục xử lý xâu:
- Thủ tục Delete(s,vt,n): Xóa n kí tự của xâu s, bắt đầu từ vị trí vt
- Thủ tục Insert(s1,s2,vt): Chèn xâu s1 vào s2, bắt đầu ở vị trí vt
- Thủ tục str(value,s): chuyển đổi giá trị kiểu số (value) sang dạng xâu kí tự và gán
cho biến s.
- Thủ tục val(s,value,code): đổi xâu kí tự s sang dạng số và gán cho biến value, nếu
đổi thành cơng thì code nhận giá trị bằng 0, ngược lại cho giá trị khác 0.
 Một số hàm:
TT

Hàm

Ý nghĩa

1

Copy(s,vt,n)


Tạo xâu mới gồm n kí tự liên tiếp bắt đầu từ vị trí vt của xâu s

2

Length(s)

Cho giá trị là độ dài xâu s

3

Pos(s1,s2)

Cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2

4

Upcase(ch)

Cho chữ cái in hoa ứng với chữ cái trong ch

5

Ord(ch)

Cho mã của kí tự ch trong bảng mã ASCII

6

Chr(n)


Cho kí tự có mã là n
7


7

Concat(s1,s2,..,sn) Cho xâu mới bằng cách nối đuôi các xâu s1,s2,..,sn lại.

2.3.1.

Dạng bài tập kiểu xâu dùng phương pháp nhặt sỏi

Đây là dạng bài tập khá đơn giản. Thông thường, để giải quyết các bài toán
này học sinh sẽ vận dụng một số thủ tục như Delete(s,vt,n), Insert(s1,s2,vt) và các
hàm như: Copy(s,vt,n), Pos(s1,s2), Length(s) cùng với vòng lặp. Tuy nhiên, với cách
giải quyết thơng thường bài tốn trở nên phức tạp, máy mất nhiều thời gian để thực
hiện và không giải quyết được triệt để. Giáo viên có thể giới thiệu cho các em
phương pháp nhặt sỏi khá đơn giản dễ hiểu và máy thực hiện trong thời gian ngắn và
tối ưu. Đó là : Nếu phần tử của xâu thỏa mãn điều kiện nào đó (khơng thỏa mãn điều
kiện nào đó) thì nhặt bỏ vào một xâu khác đã khởi tạo từ trước. Cụ thể:
Bài tập 1: Nhập vào một xâu bất kì. Hãy xóa bỏ các dấu cách có trong xâu. [1]
Bài tập giải quyết theo tư duy thông thường của học sinh:
var s:string;
i,n,vt:byte;
begin
write('nhap xau: '); readln(s);
i:=1; n:=length(s);
while i<=n do
begin
if s[i]=' ' then begin

vt:= pos(' ',s);
delete(s,vt,1);
n:=n-1;
end;
i:=i+1;
end;
write('xau ket qua: ',s);
readln;
end.

Thống nhìn có vẻ bài tốn được giải quyết, hợp lí. Tuy nhiên khi chạy chương
trình học sinh mới ngỡ ngàng khi kết quả không triệt để.

Trong mục 2.3.1: Bài tập 1 được trích dẫn trong TLTK số 1

Học sinh khá khác có thể viết một chương trình tốt hơn sử dụng vòng lặp
while...do, hàm pos(s1,s2) và hàm delete(s,vt,1) để tìm vị trí , xóa của các kí tự trống
trong xâu như:
8


Chương trình:
var s:string;
i,n:byte;
begin
write('nhap xau: '); readln(s);
while pos(' ',s)<>0 do delete(s,pos(' ',s),1);
write('xau ket qua: ',s);
readln;
end.


Kết quả thu được sau khi chạy chương trình khá ổn

Với cách viết chương trình trên học sinh sẽ nhận thấy chương trình khá ngắn
gọn dễ hiểu, tuy nhiên giáo viên cần giải thích cho học sinh thấy máy tính sẽ phải làm
việc rất vất vả, vì phải vừa thực hiện vịng lặp vừa phải tìm vị trí của dấu cách trống
để so sánh với 0. Và khi muốn xóa dấu cách trống nào cũng phải xác định vị trí dấu
cách trống đó. Câu hỏi đặt ra là: có cách nào giải quyết bài tốn này để viết chương
trình vừa ngắn gọn dễ hiểu mà máy tính cũng khơng mất thời gian để thực hiện lệnh?
Khi đó giáo viên hướng dẫn học sinh giải quyết bài toán này bằng phương pháp
nhặt sỏi: [1]
var s,p:string;
i,nt:byte;
begin
write('nhap xau: '); readln(s);
p:=’’;
for i=1 to length(s) do
if s[i]<>' ' then p:=p+s[i];
write('xau ket qua: ',p); readln; end.

Khi chạy kết quả, các em sẽ khẳng định được hiệu quả tối ưu đối với những bài
toán có thể sử dụng phương pháp nhặt sỏi, từ đó các em tin tưởng và biết vận dụng
giải quyết các bài toán tương tự khác.

9


Bài tập 2: Nhập vào một xâu bất kì. Hãy đưa ra màn hình các kí tự số trong xâu.
Bài tốn này các em học sinh có thể xóa hết tất cả các kí tự chữ cái trong xâu,
cịn lại trong xâu là các kí tự số. Tuy nhiên khi biết phương pháp nhặt sỏi rồi thì học

sinh sẽ tin tưởng phương pháp này và vận dụng ngay.
Chương trình:
var s,p:string;
i:byte;
begin
write('nhap xau: '); readln(s);
p:=’’;
for i:=1 to length(s) do
if (s[i] >= '0 ') and (s[i]<=‘9’) then p:=p+s[i];
write('xau ket qua: ',p);
readln;
end.

Nhanh chóng thu được kết quả đúng:

Giáo viên giới thiệu một số bài tập và yêu cầu học sinh nhận biết và vận dụng
phương pháp nhặt sỏi để giải quyết.
Bài tập 3: Nhập vào một xâu bất kì. Hãy xóa hết các kí tự ‘a’ và ‘A’ trong xâu.
Vận dụng: Thay vì phải đi tìm vị trí của kí tự ‘a’ và ‘A’ để xóa thì ta đi nhặt
những kí tự khác ‘a’ và ‘A’ để bỏ vào xâu khác được khởi tạo từ trước.
Bài tập 4: Nhập vào một xâu bất kì. Hãy xóa các kí tự trùng lặp và đưa ra màn
hình xâu mà các kí tự trong đó chỉ xuất hiện một lần.
Vận dụng: dùng phương pháp đếm số lần xuất hiện của các kí tự trong xâu.
Trong q trình đếm kí tự, nếu đếm kí tự =1 thì nhặt kí tự đó vào xâu khác đã khởi
tạo từ trước.
Bài tập 5: Nhập vào một xâu bất kì. Hãy kiểm tra xem xâu đó có đối xứng hay
khơng.

10



Vận dụng: duyệt từ cuối xâu và nhặt lần lượt các kí tự từ cuối xâu lại vào một
xâu khác đã khởi tạo từ trước. Nếu xâu nhập vào bằng xâu vừa tạo thì xâu đó là đối
xứng.
2.3.2. Dạng bài tập chuẩn hóa xâu
Một xâu chuẩn hóa là xâu mà các từ trong xâu chỉ cách nhau một cách trống và
khơng kí tự trống ở đầu xâu và cuối xâu. Giáo viên hướng dẫn học sinh giải quyết các
bài toán sau:
Bài tập 1: Nhập vào một xâu bất kì. Hãy chuẩn hóa xâu.
Học sinh có thể sử dụng thủ tục Delete(s,vt,n) và Pos(s1,s2) để xóa cách trống
hai đầu xâu, và cách trống giữa các từ.
Chương trình
var s:string;
i:byte;
begin
write('nhap xau: '); readln(s);
i:=1;
while s[1]=' 'do delete(s,1,1);
while s[length(s)]=' 'do delete(s,length(s),1);
While pos(' ',s)<>0 do delete(s,pos(' ',s),1);
write('xau ket qua: ',s);
readln;
end.

Kết quả thu được khi chạy chương trình :

Từ chương trình học sinh viết, giáo viên cần nhận xét rằng chương trình khơng
hề sai. Nhưng khi sử dụng lệnh: While pos(' ',s)<>0 do delete(s,pos(' ',s),1); tương
tự như bài tập 1 của dạng 1 đã nêu máy tính sẽ làm việc vất vả khi vừa phải sử dụng
vòng lặp vừa phải xác định vị trí đầu tiên của hai dấu cách trong xâu, sau đó sử dụng

thủ tục xóa thì hàm pos(‘ ‘,s) lại xuất hiện một lần nữa.
Giáo viên có thể gợi ý cho học sinh sử dụng phương pháp nhặt sỏi đã nêu ở
dạng 1 để giải quyết bài toán giữa các từ chỉ cách nhau 1 dấu cách trống.
Chương trình
var s,p:string;

11


i:byte;
begin
write('nhap xau: '); readln(s);
while s[1]=' 'do delete(s,1,1);
while s[length(s)]=' 'do delete(s,length(s),1);
p:= '';
for i:=1 to length(s) do
begin
if (s[i]<>' ') then p:=p+s[i];
if (s[i]=' ') and (s[i+1]<> ' ') then p:=p+s[i];
end;
write('xau ket qua: ',p);
readln;
end.

Kết quả thu được khi chạy chương trình sẽ giúp cho học sinh khẳng định lại
một lần nữa, đối với những bài tốn có thể dùng phương pháp nhăt sỏi để giải quyết
thì bài tốn sẽ tối ưu: gọn gàng, dễ hiểu, tốn ít thời gian để thực hiện.

Từ cách giải quyết bài tốn chuẩn hóa xâu, giáo viên có thể nêu một số bài tập
vận dụng như:


Bài tập 2: Nhập vào một xâu bất kì. Hãy đếm số từ có trong xâu.
Học sinh vận dụng: chuẩn hóa xâu rồi đếm số cách trống còn lại trong xâu số
từ trong xâu bằng số cách trống cộng một.
Bài tập 3: Nhập vào một xâu họ tên của một người bất kì. Hãy đưa ra họ của
người đó .
Học sinh vận dụng: chuẩn hóa xâu rồi duyệt lần lượt từ đầu xâu, nếu gặp cách
trống thì dừng lại và đánh dấu vị trí của cách trống. Sau đó, in ra các kí tự kể từ đầu
xâu đến vị trí đánh dấu của cách trống trừ đi một, ta được họ của xâu họ tên đó.

12


Bài tập 4: Nhập vào một xâu họ tên của một người bất kì. Hãy đưa ra tên của
người đó .
Học sinh vận dụng: chuẩn hóa xâu rồi duyệt lần lượt từ cuối xâu, nếu gặp cách
trống thì dừng lại và đánh dấu vị trí của cách trống. Sau đó, in ra các kí tự kể từ vị trí
đánh dấu của cách trống cộng thêm một đến cuối xâu, ta được tên của xâu họ tên đó.
1.1.1 Dạng bài tập về liệt kê xâu con thỏa mãn điều kiện nào đó.

Đối với đối tượng học sinh khối 11 trường THPT Lê Lai thì dạng bài tập này
giáo viên chỉ yêu cầu học sinh giải quyết bài toán với phạm vi dữ liệu khơng lớn. Bởi
vì, đây là dạng bài tập phức tạp, khả năng của học sinh còn hạn chế. Cho nên tất cả
các bài toán được nêu trong dạng này chỉ dừng lại ở phạm vi dữ liệu đủ nhỏ để học
sinh dễ dàng hiểu và vận dụng dạng bài tập này.
Bài tập 1: Nhập vào một xâu bất kì. Hãy liệt kê tất cả các xâu con của xâu ban
đầu.
Đây là dạng bài tập mà khi nêu bài tốn lên học sinh dễ dàng hình dung kết quả
thu được sau khi giải quyết xong bài toán. Tuy nhiên để xây dựng thuật tốn và viết
chương trình thì học sinh đã gặp khó khăn. Nhiệm vụ của giáo viên là hướng dẫn các

em phân tích một xâu cụ thể với số lượng kí tự <10 kí tự để tìm ra các xâu con. Từ
đó các em đã hình thành được thuật toán giải quyết bài toán với đoạn lệnh sử dụng
hai vòng lặp for..to..do lồng nhau. Mặc dù với đoạn lệnh sử dụng hai vòng
for...to...do lồng nhau làm cho độ phức tạp của thuật toán bằng O(n 2), nhưng với
phạm vi dữ liệu nhỏ, ta có thể chấp nhận được. Sau đây là chương trình của học sinh
đã viết:

13


Chương trình:
var s,p:string;
i,j,n:byte;
begin
write('nhap xau: '); readln(s); n:=length(s);
for i:=1 to n do
for j:=1 to n-i+1 do
begin
p:=copy(s,i,j);
writeln(p);
end;
readln;
end.

Và đây là kết quả thu được sau khi chạy chương trình, rất ổn.

Với bài tập trên, một học sinh khác cũng sử dụng hai vòng for...to...do lồng
nhau và sử dụng hàm copy(s,vt,n) để viết chương trình. Chương trình của học sinh
này cũng được sự đánh giá tốt giáo viên hướng dẫn.
Chương trình:

var s,p:string;
i,j,n:byte;
begin
write('nhap xau: '); readln(s); n:=length(s);
for i:=1 to n do
for j:=i to n do
begin
p:=copy(s,i,j-i+1);
writeln(p);
end;
readln;
end.

14


Và đây là kết quả thu được:

Qua dạng bài tập này học sinh trường THPT Lê Lai đã được giáo viên
hướng dẫn đánh giá rất cao vì sự lỗ lực hết mình với đam mê mơn học. Các em
đã khơng ngại khó, chịu khó tư duy sáng tạo với những bài tập giáo viên giao,
trong khi thời gian các em dành cho môn Tin học không nhiều như các môn học
khối của các em.
Để phát triển kiến thức mà các em đã xây dựng được từ dạng bài tập này, giáo
viên giới thiệu thêm cho các em một số bài tập vận dụng như:
Bài tập 2: Nhập vào một xâu bất kì. Hãy đếm tất cả các xâu con thu được
từ xâu ban đầu .
Học sinh vận dụng: Thay vì việc thơng báo lên màn hình các xâu con liệt kê
được, thì liệt kê đến đâu đếm đến đó rồi thơng báo kết quả cuối cùng lên màn hình.
Chương trình:

var s,p:string;
i,j,n,d:byte;
begin
write('nhap xau: '); readln(s); n:=length(s); d:=0;
for i:=1 to n do
for j:=i to n do inc(d);
write('so xau co la: ',d);
readln;
end.

15


Bài tập 3: Nhập vào một xâu bất kì. Hãy đưa ra màn hình các xâu con đối xứng
thu được từ xâu ban đầu .
Học sinh vận dụng: Sử dụng hàm kiểm tra tính đối xứng của xâu. Sau đó, gọi
hàm kiểm tra trong khi liệt kê các xâu con. Nếu xâu con đối xứng thì đưa ra màn
hình.
Chương trình:
var s,p:string;
i,j,n:byte;
function doixung(d,c:byte):boolean;
var dau,cuoi: byte; dx:boolean;
begin
dx:=true; dau:=d; cuoi:=c;
while dau<=cuoi do
if s[dau]<>s[cuoi] then begin dx:=false; break; end
else begin dx:=true; inc(dau); dec(cuoi); end;
doixung:=dx;
end;

begin
write('nhap xau: '); readln(s); n:=length(s);
for i:=1 to n do
for j:=i to n do if doixung(i,j) then begin p:=copy(s,i,j-i+1); writeln(p); end;
readln;
end.

Bài tập 4: Nhập vào một xâu bất kì. Hãy đưa ra màn hình xâu con đối xứng dài
nhất thu được từ xâu ban đầu .
Học sinh vận dụng: Sử dụng hàm kiểm tra tính đối xứng của xâu. Sau đó, gọi
hàm kiểm tra trong khi liệt kê các xâu con. Nếu xâu con đối xứng lưu lại vị trí và độ
dài của xâu con thõa mãn điều kiện rồi in xâu con đó ra màn hình.
Mở rộng: đối với dạng bài tập này, để giảm độ phức tạp của thuật toán và có
thể thực hiện trên phạm vi dữ liệu lớn, giáo giên có thể hướng dẫn các em học sinh
tìm hiểu cách giải quyết bằng phương pháp Quy hoạch động. Tuy nhiên, với đối
tượng học sinh trung bình, trung bình khá và khá thì để hiểu và vận dụng phương
pháp quy hoạch động cịn khó khăn.

16


2.3.4. Các dạng bài tập khác.
Dạng 1: Biến đổi xâu:
Các bài tập dạng này có thể nêu ra như:
Bài 1. Rút gọn xâu
Ví dụ:
XAU.INP
LLLuuuuuooongggTTTaaaaiii
Bài 2. Nén và giải nén:


XAU.OUT
LuongTai

string.inp

string.out

aaaabbcd
3a2b

4a2bcd
aaabb

Dạng 2: Ứng dụng kiểu xâu vào giải các bài toán kiểu số nguyên:
Các bài tập dạng này có thể nêu ra như:
Bài tập 1: Viết chương trình nhập số tự nhiên a có n chữ số. Hãy tạo ra số mới b từ
số a bằng cách viết ngược lại các chữ số xuất hiện trong a.
Ví dụ: cho a=234 thì b=432.
Bài tập 2: Cho số nguyên dương N, ta tạo ra số nguyên N1 bằng cách viết liên tiếp
nhau các số nguyên từ 1 đến N. Ví dụ N = 4 ta có N1 = 1234. Thực hiện việc thu gọn
N1 bằng cách xóa tất cả các chữ số ở vị trí lẻ, sau đó xóa tất cả các số ở vị trí chẵn,
rồi lại xóa các chữ số ở vị trí lẻ, … cho đến khi chỉ cịn lại một chữ số.
Ví dụ: 1234 ->24-> 2
2.4. HIỆU QUẢ ĐẠT ĐƯỢC
2.4.1. Kết quả sau khi áp dụng vào thực tế.
- Hiệu quả đầu tiên mà dễ nhận thấy nhất của sáng kiến kinh nghiệm là việc
giáo viên đã hệ thống được những kiến thức cơ bản về kiểu dữ liệu xâu và các dạng
bài tập vận dụng.
- Học sinh rất có hứng thú với mơn học vì các em nắm được vấn đề ngơn ngữ
lập trình Pascal khá thú vị, đồng thời vận dụng kiến thức đã học để giải quyết các bài

tốn trong cuộc sống.
- Tăng thêm lịng đam mê, u thích mơn Tin học.
- Ý thức tơn trọng mơn học của học sinh được nâng lên rõ rệt.

17


Từ năm học 2017-2018 về trước, đối với học sinh khối 11 trường THPT Lê Lai
giáo viên chỉ hướng dẫn học sinh tìm hiểu kiến thức trong sách giáo khoa Tin học 11
theo thời lượng phân phối chương trình và học sinh khơng có nhu cầu dành thời gian
tìm hiểu các dạng bài tập vận dụng. Tuy nhiên đến năm học 2018-2019, Tin học 11
đã thu hút được học sinh đam mê thực sự với môn học, dành thời gian nghiên cứu các
dạng bài tập vận dụng, số lượng học sinh trung bình khá, khá và giỏi của tồn khối
tăng lên so với năm học trước. Số lượng học sinh u thích đam mê mơn học của
năm học này so với năm học trước cũng tăng lên rõ rệt. Vận dụng sáng kiến kinh
nghiệm và sử dụng phương pháp điều tra kết quả tôi thu được như sau:
Số lượng học sinh trong năm học 2017-2018 là 120 học sinh tương đương với
3 lớp 11 mà tôi phụ trách là 11C1, 11C2, 11C3. (11C3 chọn Xã hội)
Số lượng học sinh trong năm học 2018-2019 là 104 học sinh tương đương với
3 lớp 11 mà tôi phụ trách là 11B1, 11B2, 11B3. (11B3 chọn Xã hội)
- Năm học 2017-2018 (khối 11 tổng 120 học sinh):
Học lực

Số học sinh

Đam mê

Tỉ lệ

Giỏi


13

1

7,7%

Khá

37

5

13,5%

29

0

0

Trung bình khá

- Năm học 2018-2019 (khối 11 tổng 104 học sinh): tôi áp dụng sáng kiến kinh
nghiệm có kết quả như sau:
Học lực

Số học sinh

Đam mê


Tỉ lệ

Giỏi

15

13

86,7%

Khá

40

28

70%

32

10

31,3%

Trung bình khá

Với kết quả như trên thì số lượng học sinh có học lực giỏi, khá, trung bình khá
đã tăng trong khi tổng số học sinh giảm. Điều này đồng nghĩa với việc ngày càng có
nhiều học sinh u thích, đam mê học lập trình hơn và Tin học 11 khơng cịn là nỗi

sợ của học sinh phổ thông Lê Lai nữa.
2.4.2. Điều kiện để áp dụng sáng kiến.
Sáng kiến này chỉ mang tính chất nội bộ, áp dụng cho học sinh 11B1, 11B2,
11B3 khối 11Thpt Lê Lai năm học 2018 -2019 để thu hút được học sinh tích cực học
18


tập. Sau khi áp dụng sáng kiến kinh nghiệm này tôi nhận thấy rất hiệu quả và sẽ áp
dụng cho các năm học tới.
Sáng kiến này có thể là tài liệu hữu ích đối với giáo viên tin học ở các trường
khi dạy, hoặc các em học sinh khi học về ngơn ngữ lập trình.
Đặc biệt đối với giáo viên tin có thể cập nhật thêm một số dạng bài tập vận
dụng thường gặp khác để hướng dẫn các em học sinh tìm hiểu và nghiên cứu, trang bị
cho nhu cầu khám phá, tích cực, chủ động của các em đối với môn học.
3. PHẦN KẾT LUẬN, KIẾN NGHỊ
3.1. KẾT LUẬN
Qua việc đổi mới phương pháp dạy học môn Tin học trường Trung học phổ
thông Lê Lai, tôi đã đưa ra một dạng bài tập để ứng dụng trong việc dạy tốt mơn Tin
học nhằm khích lệ học sinh u thích hơn mơn Tin học. Đặc biệt dạy học lập trình là
một trong những phần khó và khơng ít giáo viên trong trường tôi, cũng như một số
giáo viên ở trường khác đều gặp phải khơng ít những khó khăn. Chính vì vậy trong
sáng kiến kinh nghiệm này, tơi muốn đưa ra một cách tiếp cận môn Tin học một cách
tự nhiên dựa vào sự yêu thích say mê khám phá, tính tích cực chủ động của học sinh.
Trong quá trình nghiên cứu sẽ khơng tránh được những thiếu sót rất mong sự góp ý,
bổ sung của các thầy, cơ, đồng nghiệp để sáng kiến được hoàn thiện hơn, giúp ích
cho công tác giáo dục chung được tốt hơn.
3.2. KIẾN NGHỊ
- Việc dạy học lập trình là phần khó trong môn Tin học phổ thông, nên nhà
trường và giáo viên cần phải quan tâm đến việc bồi dưỡng chuyên môn, khả năng tư
duy thuật toán, đầu tư thời gian nghiên cứu các khó khăn thường gặp khi lập trình..

- Trường tổ chức đầu tư thêm kính phí mua trang thiết bị phục vụ cho việc
giảng dạy của giáo viên, thực hành của học sinh được tốt hơn.
Sáng kiến kinh nghiệm này có thể coi là 1 quyển trong q trình tìm hiểu,
nghiên cứu của tơi vì nó mới chỉ giới thiệu được một số dạng bài tập về dữ liệu kiểu
xâu, trong khi thực tế có các dạng bài tập khác về các nội dung kiến thức khác của
Tin học 11 có thể khơi gợi sự đam mê, sáng tạo và yêu thích của học sinh. Đối với
học sinh, bước đầu đã có sự cảm tình, u thích mơn học thì đó sẽ là một nền tảng tốt
để các em tiếp cận thuận lợi tới những kiến thức từ dễ đến khó hơn trong học Tin học
11 và hình thành kế hoạch cho tương lai.
Tôi xin chân thành cảm ơn các thầy, các cô trong Hội đồng sư
phạm nhà trường THPT Lê Lai nơi tôi công tác đã hỗ trợ, khích lệ,
19


tạo điều kiện tốt nhất để tơi hồn thành sáng kiến kinh nghiệm của
mình.
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ

(Ký và ghi rõ họ tên)

Trần Hữu Hải

Thanh Hóa, ngày 23 tháng 4 năm 2019.
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.
(Ký và ghi rõ họ tên)
Triệu Thị Mai

TÀI LIỆU THAM KHẢO

1. Sách giáo khoa Tin học 11 THPT (NXB Giáo dục - 2009)
2. Nguyễn Công Tuấn - Giải bài tập Tin học 11 nâng cao. (NXB Đại học
quốc gia Thành phố Hồ Chí Minh – 2007)
3. Qch Tuấn Ngọc - Ngơn ngữ lập trình Pascal. (NXB Giáo dục -1996)
4. Nguồn Internet www.education.vnu.edu.vn/...
sinhvienit.net/forum/
DANH MỤC SKKN ĐÃ ĐƯỢC CÔNG NHẬN
1. “Làm thế nào để gây hứng thú học tập và phát huy khả năng tư duy của học
sinh trong bài 4- Bài toán và thuật toán – Tin học 10”. Được hội đồng khoa học
Ngành đánh giá xếp loại C năm học 2010-2011.
2. “ Một số vấn đề học sinh khối 11 gặp phải khi giải bài tốn trên máy tính Tin học 11”. Được hội đồng khoa học Ngành đánh giá xếp loại C năm học 20162017.
3. “ Một số ví dụ khơi gợi lịng đam mê, tích cực chủ động học lập trình bằng
ngơn ngữ Pascal đối với học sinh khối 11”. Được hội đồng khoa học Ngành đánh giá
xếp loại C năm học 20117-2018.

20



×