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

Kinh nghiệm giảng dạy cấu trúc dữ liệu kiểu xâu thông qua hệ thống các bài tập nhằm nâng cao hiệu quả giảng dạy môn tin học tại trường THPT quảng xương 4

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 (346.57 KB, 24 trang )

sở gd&đt thanh hoá
trờng thpt quảng xơng iv
----------

SNG KIN KINH NGHIM
KINH NGHIM GING DY CU TRC D LIU KIU XU THễNG QUA
H THNG CC BI TP NHM NNG CAO HIU QU GING DY
MễN TIN HC TI TRNG THPT QUNG XNG 4



Ngi thc hin: Tng Thanh Ton
Chc v: T phú CM
T chuyờn mụn: Toỏn Tin
SKKN mụn: Tin hc

Thanh Húa 04/2017


MỤC LỤC
PHẦN 1: ĐẶT VẤN ĐỀ.......................................................................................2
1. Lý do chọn đề tài.............................................................................................................................2
2. Mục đích của đề tài.........................................................................................................................3

PHẦN II: NỘI DUNG...........................................................................................4
I. CƠ SỞ LÝ LUẬN.....................................................................................................................................4
1. Lập trình và ngôn ngữ lập trình......................................................................................................4
2. Dạy học lập trình ở nhà trường phổ thông....................................................................................4
II. THỰC TRẠNG.......................................................................................................................................4
1. Thuận lợi.........................................................................................................................................4
2. Khó khăn.........................................................................................................................................5


III. GIẢI PHÁP...........................................................................................................................................5
2. Khai báo...........................................................................................................................................6
3. Cách nhập/xuất...............................................................................................................................7
B. CÁC THAO TÁC XỬ LÍ XÂU...................................................................................................................7
C. CÁC BÀI TẬP XỬ LÝ DỮ LIỆU KIỂU XÂU................................................................................................9
1. Các bài tập cơ bản xử lý xâu...........................................................................................................9
2. Các bài tập nâng cao xử lý xâu......................................................................................................13
3. Bài tập tự luyện.............................................................................................................................18
IV. KẾT QUẢ NGHIÊN CỨU.....................................................................................................................19

PHẦN III. KẾT LUẬN VÀ ĐỀ XUẤT..............................................................20
.............................................................................................................................20

PHẦN 1: ĐẶT VẤN ĐỀ
1. Lý do chọn đề tài
Trong xã hội ngày nay, CNTT đã được ứng dụng trong tất cả các mặt của đời sống
xã hội, sự phát triển không ngừng của KHKT đòi hỏi con người phải tự nâng cao kiến
thức, kỹ năng của mình để bắt kịp với đà phát triển đó. Kể từ khi tin học được đưa vào
và trở thành một môn học chính thức trong bậc học THPT, đã góp phần rất lớn vào

2


việc trang bị thêm cho thế hệ trẻ những kỹ năng cần thiết trong cuộc sống, đồng thời
tạo điều kiện, cung cấp phương tiện giúp các em khai thác các ứng dụng của công
nghệ thông tin vào việc học tập nghiên cứu các môn khoa học khác.
Với môn tin học trong trường THPT, học sinh không những được học cách sử
dụng, giao tiếp với máy tính, sử dụng các phần mềm như: trình soạn thảo văn bản,
chương trình bảng tính, trình duyệt website… mà ở đó học sinh còn được cung cấp
những bài học căn bản về lập trình với ngôn ngữ lập trình.

Làm quen với ngôn ngữ lập trình (Pascal) một ngôn ngữ lập trình có tính cấu trúc
chặt chẽ từ cấu trúc dữ liệu, cấu trúc các câu lệnh đến cấu trúc một chương trình, học
sinh được học cách làm ra các ứng dụng cho máy tính, được trải nghiệm và rèn luyện
tính tư duy logic trong lập trình thông qua một ngôn ngữ bậc cao đơn giản, gần gũi.
Tuy nhiên do mới là bước đầu học sinh được biết đến lập trình và ngôn ngữ lập trình,
nên việc vận dụng các câu lệnh, các cấu trúc điều khiển các kiểu dữ liệu chuẩn, kiểu
dữ liệu có cấu trúc, làm sao để từ các thuật toán có thể xây dựng được chương trình thì
đa phần học sinh còn gặp không ít khó khăn, đặc biệt là việc vận dụng các cấu trúc
điều khiển như: cấu trúc điều khiển rẽ nhánh, cấu trúc điều khiển lặp, các kiểu dữ liệu
và cách thức tổ chức dữ liệu phù hợp…xuất phát từ lý do trên và từ kết quả thực tiễn
giảng dạy tại trường THPT Quảng Xương 4 trong năm học vừa qua tôi xin mạnh dạn
đề xuất đề tài SKKN: “Kinh nghiệm giảng dạy cấu trúc dữ liệu “Kiểu xâu” thông qua
hệ thống các bài tập nhằm nâng cao hiệu quả giảng dạy tin học tại trường THPT
Quảng Xương 4”.
2. Mục đích của đề tài
Thông qua việc hướng dẫn học sinh giải một số bài tập có vận dụng cấu trúc dữ
liệu xâu, giúp học sinh nắm bắt được cách sử dụng kiểu dữ liệu xâu, các thao tác xử lí
trên xâu và vận dụng vào lập trình giải quyết các bài toán trong tin học 11, nâng cao
chất lượng giáo dục môn tin học 11. Đề tài được áp dụng và nghiên cức dựa trên kết
quả giảng dạy tin học năm học 2015 – 2016 và 2016 – 2017 trên các lớp 11A, 11C
năm 2015 – 2016, 11A, 11B năm 2016 - 2017 và trong công tác ôn luyện đội tuyển
học sinh giỏi tại trường THPT Quảng Xương 4.
3. Đối tượng nghiên cứu
Sáng kiến tập trung vào việc định hướng học sinh cách vận dụng kiểu dữ liệu
xâu vào việc giải quyết các dạng bài tập từ cơ bản đến nâng cao giúp học sinh định
hình chuẩn xác hơn cách lựa chọn kiểu dữ liệu phù hợp, từ đó đưa ra được những giải
pháp thích hợp khi giải các dạng bài tập trong tin học 11.
4. Phương pháp nghiên cứu
Sáng kiến được nghiên cứu theo phương pháp thực nghiệm thông qua việc
giảng dạy trực tiếp tại các lớp 11 trong 2 năm từ 2015- 2016 đến 2016 - 2017, đồng

thời kết hợp với việc nghiên cứu các tài liệu và tham khảo các sáng kiến, kinh nghiệm
của đồng nghiệp trong việc giảng dạy lập trình.

3


PHẦN II: NỘI DUNG
I. CƠ SỞ LÝ LUẬN
1. Lập trình và ngôn ngữ lập trình
a. Khái niệm lập trình
Như ta đã biết, mọi bài toán có thuật toán đều có thể giải được trên máy tính
điện tử. Khi giải bài toán trên máy tính điện tử, sau các bước xác định bài toán và xây
dựng hoặc lựa chọn thuật toán khả thi là bước lập trình.
Lập trình là sử dụng cấu trúc dữ liệu và các câu lệnh của ngôn ngữ lập trình cụ
thể để mô tả dữ liệu và diễn đạt các thao tác thuật toán.
b. Ngôn ngữ lập trình
Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính
toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểu
được. Có rất nhiều ngôn ngữ lập trình đã được thiết kế và mỗi năm lại có thêm nhiều
ngôn ngữ lập trình mới xuất hiện. Các ngôn ngữ lập trình thường được nhắc đến như:
Basic, C, C++, C#, java, pascal, PHP…
Trong chương trình tin học phổ thông, để học sinh bước đầu làm quen với lĩnh
vực lập trình trong tin học, ngôn ngữ lập trình Pascal đã được lựa chọn để hướng dẫn
học sinh cách vận dụng mô tả các thuật toán. So với các loại ngôn ngữ lập trình khác,
ngôn ngữ lập trình Pascal tương đối đơn giản, đễ học, đễ nhớ với cấu trúc hết sức chặt
chẽ từ cấu trúc chương trình, đến cú pháp từng câu lệnh vì vậy đòi hỏi người học phải
rèn luyện cho mình tính chính xác về mặt cấu trúc và phải biết vận dụng linh hoạt các
cấu trúc lệnh để mô tả thuật toán giải quết từng bài toán cụ thể.
c. Cấu trúc dữ liệu trong lập trình
Mỗi ngôn ngữ lập trình, ngoài các câu lệnh cơ bản như: cấu trúc điều khiển rẽ

nhánh, cấu trúc điều khiển lặp, các kiểu dữ liệu chuẩn, dữ liệu mảng 1 chiều còn có
kiểu dữ liệu xâu… giúp người lập trình có thể mô tả chính xác các bài toán có thuật
toán phức tạp.
2. Dạy học lập trình ở nhà trường phổ thông
So với các môn khoa học khác, tin học là một môn học được đưa vào muộn
hơn, nó trang bị cho học sinh những hiểu biết và kỹ năng cơ bản để có thể làm việc với
máy tính, sử dụng máy tính phục vụ cho học tập, công việc sau này.
Việc dạy học lập trình ở trường phổ thông gặp không ít khó khăn như: học sinh
mới bước đầu làm quen với lập trình và ngôn ngữ lập trình nên việc lựa chọn các cấu
trúc lệnh, các kiểu dữ liệu phù hợp để giải một bài toán gặp khá nhiều khó khăn; thời
lượng chương trình ít, khả năng sử dụng máy tính của học sinh còn hạn chế; đa phần
học sinh chưa xác định rõ được mục tiêu của việc học lập trình là học cách tư duy
logic của lập trình.
II. THỰC TRẠNG
1. Thuận lợi
Đối với trường THPT Quảng Xương 4, việc giảng dạy tin học cũng có những
thuật lợi nhất định:
Về cở sở vật chất trang thiết bị dạy học, nhà trường đã trang bị cho mỗi phòng
học một bộ máy tính, máy chiếu, do đó trong các giờ học, học sinh có điều kiện tiếp

4


cận với CNTT, thể nghiệm thao tác trực tiếp trên máy nên dễ dàng nắm bắt nội dung
của bài học.
Đối với giáo viên: là giáo viên trẻ nên có điều kiện tiếp cận với những tiến bộ
của CNTT, hỗ trợ rất lớn cho công tác giảng dạy.
Với học sinh, qua chương trình tin học lớp 10 các em đã được trang bị những kĩ
năng nhất định trong việc sử dụng máy tính; biết thế nào là thuật toán cũng như cách
xây dựng và mô tả một thật toán thông qua sơ đồ khối hoặc liệt kê các bước.

2. Khó khăn
Ngoài các thuận lợi đã nêu, công tác giảng dạy tin học tại trường THPT Quảng
Xương 4 cũng gặp những khó khăn nhất định:
Do đặc thù bộ môn, nên nhiều học sinh chưa thực sự say mê với môn học, thờ ơ
và coi nhẹ việc học tin học.
Đa phần học sinh nhà trường đều thuộc khu vực khó khăn ven biển nên học
sinh ít có điều kiện tiếp cận với CNTT. Với nội dung lập trình trong tin học, đây là một
nội dung mới và khó đối với đa số học sinh, phần lớn học sinh thực sự khó khăn trong
việc nắm bắt ý nghĩa của từng câu lệnh cũng như cách vận dụng chúng như thế nào
trong việc lập trình, do đó nhiều học sinh sau khi xác định được yêu cầu của bài toán
thường chỉ dừng lại ở việc xây dựng và biểu diễn thuật toán cho bài toán (dưới dạng sơ
đồ hoặc liệt kê các bước) chứ chưa biết sử dụng các câu lệnh như thế nào để mô tả các
thao tác đó thành chương trình, chưa biết cách sử dụng dữ liệu nào để biểu diễn cho
hợp lý ... nên kết quả học sinh bế tắc trong việc giải quyết các bài toán lập trình dẫn
đến kết quả giảng dạy chưa cao.
Đối với bản thân giáo viên: ít kinh nghiệm trong công tác giảng dạy nên việc
truyền đạt cho học sinh hiểu đúng bản chất và cách vận dụng các cấu trúc lệnh, các
kiểu dữ liệu phù hợp còn gặp không ít khó khăn, lúng túng đôi khi chú tâm nhiều vào
lí thuyết mà ít quan tâm đến việc hướng dẫn học sinh học tập trực tiếp thông qua các ví
dụ thực hành.
Sau một số năm giảng dạy, từ việc nhận thấy những khó khăn gặp phải của học
sinh trong việc học lập trình, cũng như việc thiếu kinh nghiệm truyền đạt của bản thân,
tôi đã tìm tòi, nghiên cứu tìm ra các nguyên nhân dẫn đến việc học sinh ngại học, chán
học lập trình điều đó không phải chỉ ở việc xây dựng các thuật toán để giải các bài
toán mà là làm thế nào để chuyển đổi chính xác thuật toán thành chương trình, lựa
chọn cấu trúc điều khiển các kiểu dữ liệu phù hợp như thế nào để có thể mô tả chính
xác thao tác của thuật toán.
III. GIẢI PHÁP
Bắt nguồn từ thực trạng việc giảng dạy tin học, từ nguyên nhân dẫn đến tình trạng
học sinh chưa có hứng thú học tập lập trình và từ thực tiễn việc học sinh hiểu và vận

dụng kiểu dữ liệu phù hợp, tôi đã đưa ra một giải pháp và đã đem lại những hiệu quả
nhất định trong việc giảng dạy, đó là thông qua việc hướng dẫn học sinh giải một số
bài toán thực tế có vận dụng cấu trúc dữ liệu phù hợp từ đó xác định các lệnh có liên
quan có thể áp dụng cho từng trường hợp cụ thể giúp học sinh dễ dàng giải quyết các
bài tập, gây hứng thú cho học sinh từ đó góp phần nâng cao chất lượng giáo dục.
A. KHAI BÁO VÀ TRUY XUẤT ĐẾN PHẦN TỬ XÂU
1. Khái niệm, cách khai báo và tham chiếu đến phần tử xâu

5


- 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à’.
Ví dụ: S=

‘Lop 11A’

gồm có: 7 ký tự

S1=

‘Truong thpt quang xuong 4’

gồm có: 25 ký tự

S2=

‘1234567*1234’


gồm có: 12 ký tự

S3=

‘’

gồm có: không ký tự

- Có thể xem xâu là một trường hợp đặc biệt của mảng một chiều mà mỗi phần
tử là một kí tự. Các kí tự của xâu được đánh số thứ tự thường bắt đầu từ 1. (như vậy
với các biến thuộc kiểu xâu, có thể áp dụng cách duyệt của mảng một chiều để xử lý
trong quá trình làm việc với dữ liệu xâu)
- Tham chiếu đến phần tử xâu: <tên biến xâu>[chỉ số phần tử]
Ví dụ: S[1]= ‘L’, S[4]= ‘ ’, S[6]= ‘1’
Lưu ý: - Kiểu xâu khác với kiểu char (Các biến kiểu Char thuộc dạng biến đơn, mỗi
thời điểm chỉ lưu trữ được 1 ký tự)
2. Khai báo
Với nội dung này, để học sinh thấy rõ những điểm mới trong cấu trúc khai báo
giáo viên đưa ra yêu cầu: Viết khai báo biến cho ví dụ sau:
Bài toán 1: Nhập vào một ký tự Ch bất kỳ từ bàn phím
Bài toán 2: Nhập vào một mảng các ký tự S là họ tên của một người gồm 30 ký tự
Bài toán 3: Nhập vào một dãy ký tự bất kỳ có độ dài không quá 30 ký tự
Với các ví dụ này học sinh dễ dàng đưa ra các cách khai báo cho bài toán 1, 2
Bài toán 1: học sinh sử dụng cách khai báo biến đơn
Var Ch: Char;
Bài toán 2: Học sinh sử dụng cách khai báo mảng mà mỗi phần tử là một ký tự
C1: Khai báo trực tiếp
Var S:array[1..30] of Char;
C2: khai báo gián tiếp

Type DayKT=array[1..30] of Char;
Var S: DayKT;
Sau khi học sinh đưa ra hai cách khai báo này, giáo viên đưa ra cách khai báo
cho trường hợp bài tập 3 đồng thời yêu cầu học sinh rút ra điểm giống và khác trong
cách khai báo giữa các biến trong ba bài tập, từ đó học sinh rút ra được cấu trúc khai
báo biến tổng quát cho trường hợp dữ liệu kiểu xâu.
Ví dụ:

C1:

Var S:String[30];

C2:

Var

S: String;

* Cấu trúc tổng quát:
Var <tên biến xâu>: string[độ dài lớn nhất của xâu];

6


- 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. 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ỉ có trong free pascal)có kích thước gần 2GB = 230 B
3. Cách nhập/xuất
Khác hẳn với cách đọc, ghi dữ liệu mảng một chiều (luôn đi kèm với câu lệnh
duyệt các phần tử) Cách đọc hay viết dữ liệu kiểu xâu tương tự như các kiểu dữ liệu
chuẩn khác, ta sử dụng các thủ tục READ, hoặc WRITE.
Ví dụ: - Đọc dữ liệu:
- Ghi dữ liệu

Readln(s);

hoặc

Read(s);

Writeln(s);

hoặc

Write(s);

B. CÁC THAO TÁC XỬ LÍ XÂU
1. 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.
Ví dụ: ‘123abc’ + ‘453acd’ cho kết quả ‘123abc453acd’
2. Các phép so sánh xâu
Các phép so sánh xâu bao gồm: <, <=, =, >=, >, <> 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.

Ví dụ: ‘anh’> ‘Anh’, kí tự ‘a’ có mã ASCII là 97, kí tự ‘A’ có mã ASCII là 65.
- Nếu A và B là các xâu có độ dài khác nhau và A là đoạn đầu của B thì A< B.
Ví dụ:

‘Quang Xuong’ < ‘Quang Xuong 4’

- A=B nếu xâu A và B giống nhau hoàn toàn
Ví dụ: ‘Quang Xuong’ = ‘Quang Xuong’; ‘Quang Xuong’ <> ‘ quang Xuong’
3. Một số thủ tục xử lý xâu
- Thủ tục Delete(st,vt,n): Xóa n kí tự của xâu St, bắt đầu từ vị trí vt
Ví dụ:
Giá trị St

Thao tác

Kết quả

‘Quang Xuong 4’

Delete(st,1,6)

‘Xuong 4’

‘hoc tin hoc’

Delete(st,7,4)

‘hoc tin’

- Thủ tục Insert(s1,s2,vt): Chèn xâu s1 vào s2, bắt đầu ở vị trí vt

Ví dụ

7


Giá trị s1

Giá trị s2

Thao tác

Kết quả

‘hoc’

‘ tin hoc’

Insert(s1,s2,1)

‘hoc tin hoc’

Insert(s1,s2,4)

‘ tinhoc hoc’

- 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.
Ví dụ:

n:=123;


str(n,s);

sẽ cho kết quả xâu s là s=’123’

- 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
biến đổi thành công thì code nhận giá trị bằng 0, ngược lại cho giá trị khác 0. (lưu ý
code là biến thuộc kiểu Integer)
Ví dụ:

val(‘195’,value,code) lúc này code=0 và value=195

4. Một số hàm:
TT

Hàm

Ý nghĩa

1

Copy(st,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 st

2

Length(st)


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

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

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
với nhau

Ví dụ:
TT

Giá trị s

Biểu thức

Kết quả

Copy(s,1,11)

‘Quang xuong’

1

‘Quang xuong 4’

2

‘chao ban’

Length(s)

8

3


‘Quang xuong 4’

Pos(‘ng’,s)

4

4

‘a’

Upcase(s[1])

‘A’

5

‘a’

Ord(s[1])

97

6

Chr(65)

‘A’

7


Concat(‘hoc’,‘tin’,‘hoc’)

‘hoctinhoc’

8


C. CÁC BÀI TẬP XỬ LÝ DỮ LIỆU KIỂU XÂU
1. Các bài tập cơ bản xử lý xâu
Bài tập 1: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó
sang chữ in hoa rồi in kết quả ra màn hình.
Ví dụ: Input: ‘le anh van’
Output: ‘LE ANH VAN’
GV: Đặt ra các câu hỏi như: sử dụng thao tác nào để giải quyết vấn đề này? ứng dụng
thực tế của nó là gi?
HS: Xác định sử dụng thao tác upcase(); bài toán thường được ứng dụng trong các
trường hợp nhập biểu mẫu cập nhật thông tin tuyển sinh
GV: Đưa ra hạn chế của giải pháp là hàm upcase chỉ áp dụng được cho biến ký tự,
lưu ý học sinh kiểu xâu có thể áp dụng duyệt tương tự mảng một chiều do đó có thể sử
dụng: Câu lệnh for i:=1 to length(s) do S[i]:=upcase(S[i]); dùng để thực hiện yêu
cầu đó.
Chương trình:
Program inhoa;
Var

S: String;
i:Byte;

Begin
Write(‘Nhap xau S: ‘); Readln(S);

For i:=1 to length(S) do S[i]:=Upcase(S[i]);
Write(‘Xau ket qua: ‘, S);
Readln;
End.
Bài tập 2: Nhập 1 xâu S từ bàn phím (S<=80), đưa ra màn hình xâu đảo ngược của
xâu đó (viết theo chiều ngược lại).
VD: Input: ‘Hello’
Output: ‘olleH’
GV nêu câu hỏi: làm thế nào để chúng ta có thể viết ngược lại xâu nhập vào?
Học sinh trả lời:
GV: Để duyệt lần lượt các kí tự trong xâu S từ 1 đến hết (phần tử cuối cùng có chỉ số
trùng với độ dài của xâu) ở các ví dụ và bài tập 1 chúng ta sử dụng vòng lặp biết
trước for i:=1 to length(s) do …Vậy nếu chúng ta sử dụng vòng lặp lùi for
i:=length(s) downto 1 do …thì có thể giải quyết được yêu cầu của bài toán không?
HS: trả lời
GV gọi học sinh lên bảng viết CT, sau đó nhận xét và chạy thử chương trình học sinh
viết, HS quan sát kết quả thực hiện chương trình trên màn hình máy chiếu. (GV giải
thích thêm vì sao xâu s trong bài tập này có độ dài tối đa 80 kí tự)
Chương trình:

9


Program xaunguoc;
Var

S, P: String[80];
i:Byte;

Begin

Write(‘Nhap xau S: ‘); Readln(S);
P:= ‘’;
For i:=length(S) downto 1 do P:=P+ S[i];
write(‘Xau dao nguoc la’, P);
Readln;
End.
Bài tập 3: Đếm số dấu cách trong xâu: Nhập vào một xâu bất kỳ từ bàn phím, có độ
dài không quá 255 ký tự, đếm và đưa ra màn hình số lượng dấu cách có trong xâu?
Ví dụ: St= ‘Quang xuong 4 Quang Xuong’

kết quả: 4

GV: Hỏi làm thế nào để đếm được số dấu cách có trong xâu? Có thể vận dụng cách xử
lý dạng mảng hay không?
HS: Suy nghĩ trả lời, dễ dàng nhận thấy có thể ứng dụng phương pháp duyệt và tham
chiếu đến các phần tử xâu để xử lý bài toán
Chương trình tham khảo
Program demdaucach;
Var

S: String;
i,d:Byte;

Begin
Write(‘Nhap xau S: ‘); Readln(S);
d:= 0;
For i:= 1 to length(S) do
If (s[i]= ‘ ’)

then d:=d+1;


write(‘so dau cach trong xau’, d);
Readln;
End.
Bài tập 4: Xóa dấu cách
Xâu St được gọi là xâu chuẩn hóa nếu phần đầu và cuối xâu không có dấu cách
thừa, khoảng cách giữa hai từ bất kỳ chỉ gồm 1 dấu cách.
Yêu cầu: Nhập vào một xâu st bất kỳ, hãy chuẩn hóa xâu vừa nhập và đưa kết
quả ra màn hình?
Ví dụ:

St= ‘

Viet

Nam



kết quả:

‘Viet Nam’

GV: Làm cách nào để tìm được kết quả?
HS: Sử dụng thủ tục delete

10


GV: Để loại bỏ các dấu cách thừa ở đầu và cuối xâu thực hiện như thế nào?

HS: Dễ dàng nhận thấy trong khi st[1] còn là dấu cách thì còn xóa, trong khi ký tự
cuối cùng của st còn là dấu cách thì còn xóa
GV: Đối với các đấu cách thừa ở các vị trí có nhiều hơn 1 dấu cách thì xử lý như thế
nào?
HS: Trong khi còn tồn tại hai dấu cách trở lên thì tiến hành xóa đi 1 dấu cách cho đến
khi không còn dấu cách thừa nào nữa thì hoàn thành.
GV: Đưa ra chương trình tham khảo
Program chuanhoa;
Var St: String;
Vt:byte;
Begin
Write(‘ nhap st=’);
Readln(st);
While (st[1]= ‘ ‘) do delete(st,1,1);

{xoa dau}

While (st[length(st)]= ‘ ‘) do delete(st,length(st),1); {xoa duoi}
Vt:=pos(‘ ‘,st);
While vt>0 do

{xoa giua}

Begin
Delete(st,vt,1);
Vt:=pos(‘ ‘,st);
End;
Writeln(‘xau chuan hoa la:’,St);
Readln;
End.

Bài tập 5: Viết chương trình cho máy tính kiểm tra mật khẩu. Mật khẩu là ‘tinhoc’.
Nếu vào đúng mật khẩu thì cho hiện dòng thông báo ‘Dang nhap thanh cong’. Nếu gõ
sai mật khẩu thì máy cho hiện dòng thông báo ‘Nhap lai password’.
GV: Các em thấy ở một số máy khi khởi động vào Windows thì máy tính yêu cầu
chúng ta phải gõ mật khẩu, hoặc khi chúng ta không làm việc với máy tính sau một
khoảng thời gian nhất định thì trên màn hình cũng xuất hiện cửa sổ yêu cầu người
dùng phải nhập password. Nếu nhập mật khẩu sai thì chúng ta không thể làm việc
cùng máy tính được nữa? Việc này để tăng cường tính năng bảo vệ máy tính, bảo mật
thông tin. Vậy chúng ta có thể làm được điều đó hay không? Bài tập này giúp các em
củng cố lại phần kiến thức về việc so sánh 2 xâu.
GV: Gợi ý học sinh viết chương trình
Chương trình:
Program ktmatkhau;
Uses crt;

11


Var s: string;
Begin
Clrscr;
repeat
Write(‘hay nhap password:’);

Readln(s);

Until s=’tinhoc’;
Write(‘ dang nhap thanh cong’);
Readln
End.

Đây là chương trình đơn giản so sánh xâu s nhập vào với xâu ‘tinhoc’ nhưng
khi thực hiện chương trình đã tạo được hiệu ứng tốt đối với học sinh, các em thấy rất
thú vị, thì ra lập trình cũng thật đơn giản. Giáo viên còn giới thiệu thêm được cấu trúc
lặp không biết trước số lần lặp repeat…until, và GV liên hệ với thực tế việc HS khi
truy cập các trang mạng xã hội hoặc sử dụng một số dịch vụ trên internet đều phải
đăng nhập.
Bài tập 6: Xâu con: Một xâu s1 được gọi là xâu con của xâu s2 nếu s1 là một phần
của xâu s2 (nói cách khác, s2 chứa xâu s1)
Nhập vào 2 xâu bất kỳ s1, s2 kiểm tra xem s1 có phải là xâu con của xâu s2 hay
không, nếu có ghi “dung”, nếu không ghi “sai” ra màn hình?
GV: với bài toán này ta đã thấy nó được ứng dụng ở đâu trong thực tế?
HS: đây là một trường hợp đơn giản của bài toán tìm kiếm, một ứng dụng được rất
nhiều người sử dụng của internet, trên máy tính, tra cứu khi đọc tài liệu...
GV: Để giải quyết bài này ta sử dụng thao tác nào trong số các thao tác với dữ liệu
xâu?
HS: Dễ dàng nhận thấy đây là một ứng dụng rất hay của thao tác Pos(s1,s2) trong xử
lý xâu.
Chương trình tham khảo:
Program xaucon;
Var

s1,s2:String;

Begin
Write(‘nhap xau s1=’); readln(s1);
Write(‘nhap xau s2=’); readn(s2);
If (pos(s1,s2)>0) then write(‘Dung’)

else


Write(‘Sai’);

Readln;
End.
Bài tập 7: Xâu đối xứng
Một xâu st được gọi là xâu đối xứng nếu nó bằng chính nó khi viết theo chiều
ngược lại.

12


Yêu cầu: lập trình nhập vào một xâu st bất kỳ, kiểm tra xem xâu đó có phải là xâu đối
xứng hay không?
Dễ nhận thấy với bài toán này, học sinh có thể vận dụng cách tạo xâu đảo ngược của
bài tập tạo xâu đảo ngược, đem kết quả thu được so sánh với xâu ban đầu, nếu hai
xâu bằng nhau thì kết luận xâu đối xứng, nếu không thì kết luận xâu không đối xứng.
Chương trình tham khảo
Program doixung;
Var St, S:String;
I:Byte;
Begin
Write(‘nhap vao xau st:’);
Readln(st);
S:=’’;
For i:=length(st) downto 1 do
S:=S+st[i];
If (st = s) then write(st,’ la xau doi xung’)
Else

write(st,’khong phai xau doi xung’);


Readln;
End.
2. Các bài tập nâng cao xử lý xâu
Từ các bài tập cơ bản ở phần một giáo viên cung cấp cho học sinh các bài tập
nâng cao phát triển trên chính các bài tập cơ bản
a) Biến đổi xâu
Việc biến đổi xâu được thực hiện trên mỗi ký tự trong xâu nên cần nắm rõ các
hàm, thủ tục trên kiểu dữ liệu xâu để vân dụng một cách linh hoạt vào từng bài tập cụ
thể.
Bài tập 1. Rút gọn xâu
Cho xâu St chỉ gồm các chữ cái in thường với độ dài tối đa 250 ký tự nhập từ
bàn phím. Hãy viết chương trình để tạo ra xâu S2 từ xâu S1 bằng cách xóa các ký tự
liên tiếp giống nhau trong xâu S1 và chỉ để lại một kí tự đại diện trong đoạn đó, đưa
kết quả ra màn mình.
Ví dụ:
St in

St out

TTTTTuuuuooongggLLLLaaaaiii

TuongLai

- Ý tưởng: Duyệt từ đầu đến cuối xâu, gặp hai ký tự liên tiếp khác nhau thì xóa đi một
ký tự.

13



- Chương trình Rút gọn xâu
Program rutgonxau;
Var St:String;
i: Byte;
begin
write(‘nhap vao xau st’);
readln(st);
i:=1;
while ibegin
if st[i]=st[i+1] then

delete(st,i,1)

else inc(i);
end;
writeln(‘ket qua la:’, St);
readln;
end.
b) Xâu con, xâu con đối xứng
Bài tập 1: Xâu con đối xứng
Cho một xâu S có độ dài không vượt quá 255 kí tự; đếm số lượng xâu con đối
xứng của S. (xâu chỉ gồm 1 ký tự cũng được gọi là xâu con đối xứng)
- ý tưởng: duyệt và tìm tất cả các xâu con của xâu S, mỗi xâu tìm được tiến
hành kiểm tra, nếu xâu đó đối xứng thì tăng giá trị biến đếm lên 1 đơn vị
Chương trình tham khảo (không sử dụng cách viết theo chương trình con vì học
sinh chưa học đến nội dung chương trình con)
Program
Var


demxaudoixung;

S, P,Q:string;
i,j,k,d:word;

begin
write(‘nhap xau S=’);
readln(s);
d:=0;
for i:=1 to length(s) do
for j:=1 to length(s)+1-i do
begin
p:=Copy(s,j,i);
Q:=’’;

14


for k:=1 to length(p) do
Q:=p[k] + Q;
If (P = Q) then Inc(d);
End;
Write(‘so luong xau con doi xung la:’,d);
Readln;
End.
Bài tập 2: Tìm xâu con đối xứng dài nhất
Cho một xâu S có độ dài không vượt quá 255 kí tự; tìm xâu con đối xứng dài
nhất của xâu S
Cách 1:
- Ý tưởng: Sử dụng phương pháp quy hoạch động bằng cách sử dụng mảng 2 chiều F

và giá trị F[i, j] = true/false nếu đoạn gồm các kí tự từ i đến j của S có/không là
palindrome.
Ta có công thức là:
- F[i, i] = True
- F[i, j] = F[i+1, j-1]; ( nếu s[i] = s[j] )
- F[i, j] = False; ( nếu s[i] <> s[j] )
- Đoạn chương trình tham khảo
var s:ansistring; n,i,j,d,max,k,csd,csc:longint; {GV giới thiệu thêm kiểu
ansistring }
F: array[0..1001,0..1001] of boolean;
{==========}
Begin
Write('nhap s:');
readln(s);
FillChar( F, sizeof(F), false );
n:=length(s); max:=1;
for i := 1 to n do F[i, i] := True;
for k := 1 to (n-1) do
for i := 1 to (n-k) do
begin
j := i + k;
F[i, j] := ( F[i+1, j-1] ) and (s[i] = s[j] );
end;
for i:=1 to n do
for j:=1 to n do
begin
15


d:=j-i+1;

if (f[i,j]=true) and (d>max) then
begin
max:=d; csd:=i; csc:=j;
end;
end;
for i:=csd to csc do write(s[i]);
readln;
End.
Cách 2: Sử dụng phương pháp tìm kiếm tuần tự tương tự bài tập 1 nhưng duyệt
theo chiều ngược lại của biến i đối với xâu S
Program
Var

demxaudoixung;

S, P,Q:string;
i,j,k:word;

begin
write(‘nhap xau S=’);
readln(s);
for i:=length(s) downto 1 do
for j:=1 to length(s)+1-i do
begin
p:=Copy(s,j,i);
Q:=’’;
for k:=1 to length(p) do
Q:=p[k] + Q;
If (P = Q) then
Begin

Write(‘xau con dxdai nhat la:’,P);
Readln;
Exit;
End;
End;
Write(‘xau con doi xung dai nhat la:’,s[1]);
Readln;
End.
Với cách viết này học sinh không cần sử dụng phương pháp quy hoạch động
(phương pháp mà đa số học sinh không hiểu cách vận dụng, liên quan đến kiểu dữ liệu
mảng 2 chiều đã giảm lược khỏi chương trình tin học phổ thông).

16


c. Ứng dụng kiểu xâu vào giải các bài toán kiểu số nguyên
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.
GV: Dựa vào kiến thức kiểu xâu, em nào có thể nêu ý tưởng giải bài toán này?
HS:
GV: Nhận xét câu trả lời của hs, và nêu rõ: để tạo được số b từ số a, bằng cách viết
ngược lại các chữ số của a thì:
+ tạo một xâu rỗng s
+ cần sử dụng vòng lặp biết trước lùi
+ dùng thủ tục val để đổi xâu kí tự s sang dạng số và gán cho biến value.
GV yêu cầu hs viết chương trình, sau đó GV sẽ chạy chương trình cho học sinh quan
sát trên màn hình máy chiếu. Gv giải thích và giúp học sinh sửa các lỗi ở chương trình
các em viết.
Chương trình:

Program somoidaonguoc;
Uses crt;
Var a,bi,code: longint;
S1,s2:string;
Begin
Write(‘nhap so a’);

Readln(a);

Str(a,s1);
S2:=’’; {tạo xâu rỗng s2}
For i:=length(s1) downto 1 do s2:=s2+s1[i];
Val(s2,b,code);
Write(b);
Readln;
End.
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
Chương trình bài tập 3:
Program taosonguyen;
var

s,h:string;
i,n:integer;

Begin


17


Write('Nhap n=');
Readln(n);
s:='';
for i:=1 to n do
begin
str(i,h);
s:=s+h;
end;
writeln(s);
Repeat
for i:=1 to length(s) do
if i mod 2<>0 then s[i]:=' ';
while pos(' ',s)<>0 do delete(s,pos(' ',s),1);
for i:=1 to length(s) do
if i mod 2=0 then s[i]:=' ';
while pos(' ',s)<>0 do delete(s,pos(' ',s),1);
Until length(s)<=1;
Writeln('KET QUA LA:',S);
Readln;
End.
3. Bài tập tự luyện
Bài 1. Cho xâu st chỉ gồm các chữ cái. Tính số lần xuất hiện của chữ cái xuất hiện
nhiều lần nhất trong xâu (không phân biệt chữ hoa và chữ thường)
Bài 2. Chuẩn hóa văn bản
Một văn bản được gọi là văn bản chuẩn hóa nếu:
- Hai từ liền nhau có duy nhất một dấu cách
- Dấu ngắt câu (dấu chấm, dấu chấm phẩy, dấu chấm hỏi, dấu chấm than) được đặt sát

vào từ ngay trước nó, sau đó mới đến dấu cách trống
- Dấu mở ngoặc đặt sát vào phía bên trái của từ bắt đầu mở ngoặc
- Dấu đóng ngoặc đặt sát vào phía bên phải của từ cuối cùng được đóng ngoặc
Hãy viết chương trình kiểm tra và đưa một đoạn văn bản về dạng chuẩn
Input: vanban.inp
Output: vanban.out văn bản đã được chuẩn hóa
Bài 3: Viết chương trình chuyển một xâu kí tự in hoa thành kí tự thường.
Gợi ý: - Kí tự in hoa thành kí tự thường
-

Các kí tự khác như các dấu ngoặc giữ nguyên

18


for i:=1 to length(s) do
if (‘A’<=s[i]) and s[i]<=’Z’ then s[i]:=chr(ord(s[i]+32);
else if (‘a’<=s[i]) and s[i]<=’z’ then s[i]:=chr(ord(s[i]-32);
Bài 4: Viết chương trình đăng kí account, mật khẩu, sau đó kiểm tra mật khẩu và
account mà người dùng nhập vào có đúng với đăng kí không.
- Một số dạng bài tập khác có thể tìm hiểu thêm:
+ Bài toán tách từ.
+ Bài toán tách họ tên trong dánh sách.
+ Xâu đối xừng dài nhất...
+ Tìm xâu palindrome dài nhất là xâu con của S
IV. KẾT QUẢ NGHIÊN CỨU
- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2015 -2016 khi chưa thực
hiện đề tài:
STT


Lớp

Sĩ số

Giỏi

Khá

1

11A

43

81.4%

18.6%

2

11B

43

27.9%

65.1%

TB


Áp dụng
phương
pháp


7%

Không

- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2016-2017 sau khi thực
hiện đề tài:
STT

Lớp

Sĩ số

Giỏi

Khá

TB

Áp dụng
phương
pháp

1

11A


40

77.5%

22.5%

không

2

11B

41

97.6%

2.4%



Trong quá trình trao đổi, thảo luận, trình bày, các em HS thể hiện được 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à GV 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 đề.
Với phương pháp giảng dạy này, năm học 2015 – 2016 đội tuyển học sinh giỏi
do tôi hướng dẫn đã đạt giải học sinh giỏi cấp tỉnh với 1 giải ba và 1 giải khuyến
khích.

19



PHẦN III. KẾT LUẬN VÀ ĐỀ XUẤT
Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng
các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học
trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ mà hiện nay hầu hết
các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh,
hiệu quả và chính xác hơn.
Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến
nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy các thầy
cô có thể đưa ra các vấn đề như lập trình các game nhỏ…để các em có thể chứng tỏ
được khả năng của mình làm cho HS yêu thích môn học, ham học hỏi và tìm tòi sáng
tạo.
Đề tài này mang tính thực tiễn rất cao, cụ thể là: trong tiết học các em học sinh
đã chủ động tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên đặt
ra. Trong quá trình giải quyết vấn đề, giáo viên chỉ ra những lỗi mà các em học sinh
mắc phải, giúp cho các em hiểu rõ và vận dụng tốt hơn các kiến thức đã học vào giải
các bài toán do giáo viên đặt ra.
Trên đây là toàn bộ kinh nghiệm của tôi qua nhiều năm liền dạy Tin học ở khối
11 cũng như tham khảo qua nhiều nguồn thông tin, tư liệu khác nhau, rất mong được
sự đóng góp của các đồng nghiệp nhằm giúp đề tài của tôi được hoàn thiện thêm.
Quảng Xương, ngày 15 thang 5 năm 2017
Tôi xin cam kết nội dung của sáng kiến do
bản thân tôi tự đúc rút kinh nghiệm không
sao chép của bất cứ ai.!
Thủ trưởng đơn vị xác nhận

Giáo viên

Tống Thanh Toàn


20


DANH MỤC TÀI LIỆU THAM KHẢO
1. Sách giáo khoa tin học 11

Hồ Sĩ Đàm chủ biên

2. Sách giáo viên tin học 11

Hồ Sĩ Đàm chủ biên

3. Lý thuyết và Bài tập lập trình Pascal 5.5-6.0

Nguyễn Thị Kiều Duyên

4. Ngôn ngữ lập trình Pascal 7

Quách Tuấn Ngọc

5. Turbo Pascal 7.0
Văn Tuấn Dũng.

PGS-TS Bùi Thế Tâm – Võ

6. Giải một bài toán trên máy tính như thế nào

GS-TS Hoàng Kiếm


7. 101 thuật toán và chương trình
(NXB Khoa Học Và Kĩ Thuật)

Lê Văn Dũng – Trần khắc Tuấn

8. Một số sáng kiến kinh nghiệm và ý kiến của đồng nghiệp.
9. Một số bài tập tham khảo trên Internet.
--------------------------------------

21


22


DANH MỤC
CÁC ĐỀ TÀI SKKN ĐÃ ĐƯỢC HỘI ĐỒNG ĐÁNH GIÁ XẾP LOẠI CẤP PHÒNG GD&ĐT, CẤP SỞ GD&ĐT VÀ CÁC CẤP CAO
HƠN XẾP TỪ LOẠI C TRỞ LÊN
Họ và tên tác giả: Tống Thanh Toàn
Chức vụ và đơn vị công tác: TPCM, TKHĐ, trường THPT Quảng Xương 4
Stt

Tên đề tài

1

KINH NGHIỆM TỔ CHỨC THỰC HIỆN CHƯƠNG TRÌNH PHÁT THANH NHẰM
TUYÊN TRUYỀN NÂNG CAO HIỆU QUẢ GIÁO DỤC HỌC SINH TẠI TRƯỜNG THPT
QUẢNG XƯƠNG 4


2

Thông qua một số ví dụ giúp học sinh biết cách vận dụng cấu trúc điều khiển
lặp “while… do” vào lập trình giải quyết các bài toán trong chương trình Tin
học lớp 11 ở trường THPT Quảng Xương 4

Cấp đánh giá
Sở GDĐT
Thanh Hóa
Sở GDĐT
Thanh Hóa

Kết quả đánh
giá xếp loại

Năm xếp loại

C

2014

C

2013




×