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ệ
Trang 1së gd&®t thanh ho¸
trêng thpt qu¶ng x¬ng iv
- -SÁNG KIẾN KINH NGHIỆM
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”
Trang 2MỤC LỤC
PHẦN 1: ĐẶT VẤN ĐỀ 3
1 Lý do chọn đề tài 3
2 Mục đích của đề tài 3
3 Đối tượng nghiên cứu 3
4 Phương pháp nghiên cứu 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
A KHAI BÁO VÀ TRUY XUẤT ĐẾN PHẦN TỬ XÂU 5
1 Khái niệm, cách khai báo và tham chiếu đến phần tử xâu 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
Trang 3PHẦ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ếnthứ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àoviệ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ờitạ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ôngnghệ 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ấpnhữ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úcchặ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ọcsinh đượ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ệntí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ễngiả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 THPTQuả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 caochấ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ếtquả giảng dạy tin học năm học 2015 – 2016 và 2016 – 2017 trên các lớp 11A, 11Cnăm 2015 – 2016, 11A, 11B năm 2016 - 2017 và trong công tác ôn luyện đội tuyểnhọ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ệuxâ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 địnhhì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ảiphá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ệcgiảng dạy trực tiếp tại các lớp 11 trong 2 năm từ 2015- 2016 đến 2016 - 2017, đồngthờ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ệmcủa đồng nghiệp trong việc giảng dạy lập trình
Trang 4PHẦN II: NỘI DUNG
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ínhtoá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ềungô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ĩnhvự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ẫnhọ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ặtchẽ 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ảirè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áccấ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ậttoá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ộnhơ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ớimá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 sinhmớ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ấutrú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ờilượ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ầnhọ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ư duylogic của lập trình
Trang 5cậ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 dungcủ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áchxâ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ảngXươ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ọcsinh í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ăntrong 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àitoá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ướidạ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ểudiễ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ậptrì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ệctruyề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áckiể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ọcsinh 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ánhọ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àitoá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ựachọ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ínhxá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ạnghọ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ậndụ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ênquan 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ácbà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
Trang 6- 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 haidấ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ử]
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áocho 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 trongcá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 khaibáo biến tổng quát cho trường hợp dữ liệu kiểu xâu
Trang 7- 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áocộ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ệuchuẩn khác, ta sử dụng các thủ tục READ, hoặc WRITE
Ví dụ: - Đọc dữ liệu: Readln(s); hoặc Read(s);
- Ghi dữ liệu Writeln(s); hoặc Write(s);
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ụ:
- Thủ tục Insert(s1,s2,vt): Chèn xâu s1 vào s2, bắt đầu ở vị trí vt
Ví dụ
Trang 8Giá 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:
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ả
1 ‘Quang xuong 4’ Copy(s,1,11) ‘Quang xuong’
Trang 9C 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 đó.
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)
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:
Trang 10For 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
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áchthừ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ếtquả 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
Trang 11GV: Để 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
While (st[1]= ‘ ‘) do delete(st,1,1); {xoa dau}
While (st[length(st)]= ‘ ‘) do delete(st,length(st),1); {xoa duoi}
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;