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

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

MỤC LỤC
1 1. PHẦN MỞ ĐẦU...........................................................................................2
1.1. LÝ DO CHỌN ĐỀ TÀI.............................................................................2
1.2. MỤC ĐÍCH NGHIÊN CỨU.....................................................................2
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ố dạng bài tập kiểu xâu dành cho đối tượng học sinh khá khối 11. .6
2.3.3. Dạng bài tập về liệt kê xâu con thỏa mãn điều kiện nào
đó...............................................................................................13
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:...............17
2.4. HIỆU QUẢ ĐẠT ĐƯỢC........................................................................17
2.4.1. Kết quả sau khi áp dụng vào thực tế..............................17
2.4.2. Điều kiện để áp dụng sáng kiến.....................................18
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 toá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ĩ hoàn toà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, yê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 toán mà cô đưa ra. Khi bài toá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 toá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ự yê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ê, yê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 toá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 toá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 khoá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ề Toán
học thì sẽ rất là khó khăn khi lập trình. Nếu học sinh có tư duy Toá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ờ ơ, luôn 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 ngoà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ư Toá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 luôn. 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 toá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 toá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
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 quá khó và yêu
thích môn học.
Lập trình có cấu trúc_kiểu xâu
5


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.
- Ngoà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 toá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.

Thoáng nhìn có vẻ bài toá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ư:
Chương trình:
8


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 toá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.

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.

9


Bài toá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 quá 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.
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.
10


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;
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);

11



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 toán có thể dùng phương pháp nhăt sỏi để giải quyết
thì bài toá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 toá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 đó.
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 đó.

12


2.3.3. 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 toá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 toá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
toán trong cuộc sống.
- Tăng thêm lòng đam mê, yê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.
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
17


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 toàn khối
tăng lên so với năm học trước. Số lượng học sinh yê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 yê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
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.

18


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 yê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 quá 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, yê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ệ, tạo điều kiện tốt nhất
để tôi hoàn thành sáng kiến kinh nghiệm của mình.

19



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. Quách 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 toá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



×