Với kinh nghiệm của bản thân trong quá trình giảng dạy Tin học lớp 11 và ôn thi học sinh giỏi, tôi quyết định chọn đề tài : "Hướng dẫn giải một số bài tập trong sách bài tập Tin học 11 n
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT TRIỆU SƠN 3
SÁNG KIẾN KINH NGHIỆM
HƯỚNG DẪN GIẢI MỘT SỐ BÀI TẬP TRONG
SÁCH BÀI TẬP TIN HỌC 11 NHẰM NÂNG CAO KẾT QUẢ HỌC TẬP CHO HỌC SINH VÀ
LỰA CHỌN, BỒI DƯỠNG HỌC SINH GIỎI
Người thực hiện: Lê Thị Quỳnh Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Triệu Sơn 3 SKKN thuộc lĩnh vực (môn): Tin học
THANH HOÁ NĂM 2018
Trang 2MỤC LỤC
1 MỞ ĐẦU 1
1.1 LÝ DO CHỌN ĐỀ TÀI 1
1.2 MỤC ĐÍCH NGHIÊN CỨU 1
1.3 ĐỐI TƯỢNG NGHIÊN CỨU CỦA ĐỀ TÀI 1
1.4 PHƯƠNG PHÁP NGHIÊN CỨU 2
2 NỘI DUNG CỦA SÁNG KIẾN KINH NGHIỆM 3
2.1 CƠ SỞ LÍ LUẬN CỦA SÁNG KIẾN KINH NGHIỆM 3
2.2 THỰC TRẠNG VÀ NHỮNG VẤN ĐỀ CẦN GIẢI QUYẾT 3
Bài 4.12/tr33 4
Bài 4.25/tr39 4
Bài 4.27/tr39 4
Bài 4.39/tr45 4
Bài 4.40/tr45 4
Bài 4.41/tr45 4
Bài 4.42/tr46 4
Bài 7.14/tr68 4
Bài 7.16/tr69 4
Bài 7.40/tr75 5
2.3 CÁC GIẢI PHÁP GIẢI QUYẾT VẤN ĐỀ 6
2.3.1 Xác định bài toán, khai báo dữ liệu, xây dựng ý tưởng, viết thuật toán 6
2.3.1.2 Bài 4.25/tr38 7
2.3.1.3 Bài 4.27/tr39 7
2.3.1.4 Bài 4.39/tr45 8
2.3.1.5 Bài 4.40/tr45 8
2.3.1.7 Bài 4.42/tr46 9
2.3.1.8 Bài 7.14/tr6 8 10
2.3.1.9 Bài 7.16/tr69 10
2.3.1.10 Bài 7.40/tr75 11
2.3.2 Lựa chọn học sinh khá giỏi thông qua các bài tập 11
2.3.2.1 Lựa chọn thông qua việc phát hiện ý tưởng 11
2.3.2.2 Lựa chọn thông qua việc lập trình giải các bài toán 11
2.3.3 Mở rộng các bài tập đã đưa ra nhằm bồi dưỡng học sinh khá giỏi 11
2.4 HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM 17
2.4.1 Kết quả học tập 17
2.4.2 Đối với nhóm học sinh khá giỏi 18
3 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
DANH MỤC 21
PHỤ LỤC 1 22
PHỤ LỤC 2: CODE CÁC BÀI TẬP TRONG SÁCH BÀI TẬP 23
PHỤ LỤC 3: CODE CÁC BÀI TẬP MỞ RỘNG 28
Trang 41 MỞ ĐẦU 1.1 LÝ DO CHỌN ĐỀ TÀI
Sách giáo khoa và sách bài tập là hai cuốn tài liệu rất quan trọng cho chươngtrình mỗi môn học Đối với môn Tin học, sách giáo khoa cung cấp kiến thức cácnội dung học tập, sách bài tập mở rộng, khắc sâu hơn kiến thức cho người họcthông qua các bài tập với các mức độ khác nhau Trên cơ sở các bài tập trongsách bài tập có thể mở rộng các bài tập phức tạp hơn để làm nguồn tài liệu choviệc bồi dưỡng học sinh thi học sinh giỏi cấp Tỉnh
Học sinh theo học các môn khoa học tự nhiên và học sinh khá giỏi là đốitượng học sinh ham học hỏi, thích tìm hiểu và không muốn thua kém bạn bè nêngiáo viên cần tạo tạo động lực, kích thích học sinh nghiên cứu, tìm hiểu mônhọc Từ đó, hướng dẫn, rèn luyện thông qua nhiều bài tập mới, giúp các em thực
sự phát huy hết khả năng tư duy, sáng tạo không chỉ trong phạm vi môn học màcòn hỗ trợ việc học tốt các môn học liên quan Giúp nâng cao kết quả học tậpcủa học sinh, đồng thời lựa chọn được những học sinh tham gia kì thi học sinhgiỏi cấp Tỉnh
Các bài tập trong cuốn Bài tập Tin học 11, tác giả không nêu đủ hướngdẫn và lời giải chi tiết cho từng bài trong sách Thậm chí một số giáo viên trẻtuổi cũng gặp khó khăn trong việc nêu thuật toán và lời giải cho một số bài tậptrong sách bài tập
Với kinh nghiệm của bản thân trong quá trình giảng dạy Tin học lớp 11 và ôn
thi học sinh giỏi, tôi quyết định chọn đề tài : "Hướng dẫn giải một số bài tập
trong sách bài tập Tin học 11 nhằm nâng cao kết quả học tập cho học sinh và lựa chọn, bồi dưỡng học sinh giỏi" làm đề tài nghiên cứu của mình trong năm
học 2017-2018
1.2 MỤC ĐÍCH NGHIÊN CỨU
Với lý do chọn đề tài đã trình bày ở trên, tôi mong muốn đề tài của mình sẽgiúp đỡ phần nào các khó khăn cho việc nâng cao chất lượng, hiệu quả của mônhọc cho học sinh; Hỗ trợ các đồng nghiệp trong việc giảng dạy bộ môn Tin học
11, giúp đồng nghiệp có thêm một nguồn tài liệu cơ bản để ôn tập, bồi dưỡngcho học sinh giỏi Từ đó, có thể giảm bớt khó khăn tìm được nguồn học sinhtham gia kì thi học sinh giỏi cấp Tỉnh Cụ thể:
- Khảo sát, đánh giá được thực trạng việc lựa chọn, bồi dưỡng học sinh tham giathi học sinh giỏi cấp Tỉnh của trường Trung học phổ thông Triệu Sơn 3
- Nâng cao được hiệu quả sử dụng sách bài tập Tin học 11
- Nâng cao được kết quả học tập môn Tin học 11 cho học sinh các lớp đăng kí theo học các môn khoa học tự nhiên
- Có thêm một tài liệu dễ dàng tự học, tư duy sáng tạo để từ đó nâng cao chấtlượng dạy – học và sẽ có nhiều học sinh khá giỏi tham gia vào nguồn thi họcsinh giỏi cấp Tỉnh
1.3 ĐỐI TƯỢNG NGHIÊN CỨU CỦA ĐỀ TÀI
- Các bài tập trong sách bài tập Tin học 11 THPT
- Các bài tập mở rộng trên cơ sở các bài tập trong sách bài tập Tin học 11
Trang 5- Sự tư duy, ý thức học tập của học sinh lớp 11 THPT.
1.4 PHƯƠNG PHÁP NGHIÊN CỨU
Để thực hiện đề tài này, tôi đã sử dụng các phương pháp:
- Phương pháp nghiên cứu xây dựng cơ sở lí thuyết: Cơ sở lý thuyết là các tàiliệu liên quan đến nội dung về bài tập trong sách bài tập Tin học lớp 11: Chuẩnkiến thức kỹ năng và chương trình Tin học 11 hiện hành của Bộ GD&ĐT, SáchGiáo khoa Tin học 11, sách Giáo viên Tin học 11, sách Bài tập Tin học 11 hiệnhành; Sự hứng thú trong giờ học môn Tin học và ý thức tự học của học sinh đốivới môn học
- Phương pháp điều tra khảo sát thực tế, thu thập thông tin: Thông qua cácphiếu điều tra về nguyện vọng tham gia đội dự tuyển thi học sinh giỏi cấp Tỉnhmôn Tin học và nguyên nhân làm học sinh không muốn tham gia đội dự tuyểnthi học sinh giỏi cấp Tỉnh môn Tin học của học sinh lớp 11 trường THPT TriệuSơn 3
- Phương pháp thống kê, xử lý số liệu: Trên cơ sở các phiếu điều tra, các kếtquả học tập, thống kê các số liệu, xử lí số liệu để so sánh giữa nhóm lớp thựcnghiệm và đối chứng
Trang 62 NỘI DUNG CỦA SÁNG KIẾN KINH NGHIỆM 2.1 CƠ SỞ LÍ LUẬN CỦA SÁNG KIẾN KINH NGHIỆM
Chương trình môn Tin học THPT nhằm trang bị cho học sinh những kiếnthức cơ bản nhất về Công nghệ Thông tin, hình thành cho học sinh một số kỹnăng cơ bản trong việc sử dụng Công nghệ Thông tin như soạn thảo văn bản, sửdụng bảng tính, lập trình giải toán, sử dụng Internet tìm kiếm thông tin, Email, Nhưng ý nghĩa sâu xa hơn của môn học là nhằm trang bị cho học sinh phươngpháp tư duy và giải quyết vấn đề một cách khoa học Với ý nghĩa này, phầnchương trình Tin học lớp 11 - Lập trình đóng vai trò quan trọng cho việc hìnhthành kỹ năng giải quyết vấn đề theo "kiểu thuật toán", đây là cách giải quyếtvấn đề rất hiệu quả trong mọi lĩnh vực trong cuộc sống Những bài tập lập trìnhgiải toán đơn giản trong chương trình Tin học 11, giúp các em nhận thức rõ ràng
và hình thành kỹ năng giải quyết vấn đề theo các bước cơ bản: lập kế hoạch (xâydựng thuật toán, xác định dữ liệu), triển khai thực hiện (viết chương trình), kiếmtra tính đúng đắn của kết quả (soát lỗi, kiểm thử), viết báo cáo
Trong sách bài tập Tin học 11 bao gồm các bài tập từ cơ bản, đến trung bình,
và khó Vì vậy, các bài tập trong sách bài tập là cơ sở để gợi mở, xây dựng các
đề thi học sinh giỏi cấp trường, cấp Tỉnh Tuy nhiên, nhiều bài tập có hướng dẫngiải còn sơ sài hoặc không có hướng dẫn Điều này khiến cho học sinh khôngthể tự hiểu nên không hứng thú học tập, từ đó không tự học, không chịu tư duymôn học, dẫn đến việc phát hiện học sinh có tố chất môn học rất khó khăn, hệquả là giáo viên trong trường khó tìm nguồn học sinh cho kì thi học sinh giỏicấp Tỉnh
2.2 THỰC TRẠNG VÀ NHỮNG VẤN ĐỀ CẦN GIẢI QUYẾT
Trường THPT Triệu Sơn 3 là một trường nằm trong vùng bán sơn địa, điểmthi đầu vào tương đối thấp, dân cư còn nghèo, điều kiện học tập của học sinhcòn khó khăn, cơ sở vật chất trong nhà trường còn nhiều hạn chế Học sinh củatrường đa số là học sinh thuộc hộ nghèo, cận nghèo Mỗi khóa học (trong nhữngnăm gần đây khoảng 7-8 lớp/khóa) chỉ có khoảng 1 đến 2 lớp là học sinh đăng
kí theo học các môn khoa học tự nhiên để thi THPT Quốc gia, đây cũng là sốhọc sinh có thể tham gia vào các đội dự tuyển của trường thi học sinh giỏi cấpTỉnh tất cả các môn Toán, Vật Lí, Hóa học, Sinh học, Tiếng Anh, Tin học, thậmchí cả Ngữ văn, Địa lí, Đối với học sinh, Tin học là môn lựa chọn sau cùngtrong các đội dự tuyển Vì vậy, việc nâng cao chất lượng học tập, lựa chọn vàbồi dưỡng học sinh giỏi là vấn đề vô cùng khó khăn, là nhiệm vụ, là cơ hội vàcũng là thách thức đối với giáo viên khi phụ trách ôn luyện học sinh giỏi
Trong sách bài tập Tin học 11 là những bài tập mang tính chất gợi mở, đadạng từ dễ đến khó, học sinh cần hiểu bản chất vấn đề, thực hiện từng bước thìviệc giải quyết các bài tập sẽ đơn giản hơn rất nhiều Tuy nhiên, rất nhiều bài tậpthì phần hướng dẫn chưa đầy đủ, khó hiểu đối với học sinh Với khả năng vàthời gian còn hạn chế, tôi lựa chọn 10 bài tập trong sách bài tập để thực hiệntrong đề tài, các bài tập được lựa chọn trong đề tài có thể mở rộng thành nhiềubài tập tham khảo cho việc bồi dưỡng học sinh khá giỏi để lựa chọn và bồidưỡng những học sinh này có thể tham gia kì thi học sinh giỏi cấp Tỉnh Đề bài
Trang 7của các bài tập này có sẵn trong sách Bài tập Tin học 11, xin không nêu ra trong
đề tài Dưới đây tôi chỉ liệt kê tên các bài tập này và nguyên văn phần hướngdẫn giải trong sách bài tập Tin học 11
1 Bài 4.12/tr33
SBT, tr98: Khi tìm max phải kiểm tra điều kiện "lớn hơn" và tìm từ đầu về cuối, còn tìm min thì phải kiểm tra điều kiện "nhỏ hơn" và tìm từ cuối về đầu
2 Bài 4.25/tr39
SBT , tr 100 : Dùng biến đếm d kiểu integer với giá trị ban đầu bằng 0 để đếm hoặc duyệt từ trái sang phải, gặpdấu ngoặc mở thì tăng d lên 1, gặp dấu ngoặc đóng thì giảm d một đơn vị Biểu thức ngoặc là sai khi gặp d=-1 hoặc hết biểu thức ngoặc d vẫn lớn hơn 0
1 2 3 4 5 6 7 ( ( ) ( ) ) ) ( ( ) )d= 0 1 2 1 2 1 1 -1
3 Bài 4.27/tr39
SBT , tr 101 : Để xử lý dữ liệu vòng tròn thông thường ta biểu diễn nó hai lần liên tiếp Ở bài này ta dùng xâu P chứa xâu
'abcdefghijklmnopqrstuvxyz abcdefghijklmnopqrstuvxyz'Việc mã hóa xâu S được thực hiện bằng câu lệnh:for i := 1 to length(s) do
begin
j := pos(s[i], p) + k ;s[i] := p[j];
6 Bài 4.41/tr45
SBT,tr103: Đếm số lượng đầu từ (Kí tự I là đầu từ nếu
nó không phải là kí tự phân cách và nó hoặc là đứng vị trí đầu tiên trước nó có dấu cách Có thể đếm số kí tự cuối từ)
8 Bài 7.14/tr68 SBT, tr116: Tạo mảng thống kê sự xuất hiện các chữ số từ 0 đến 9.
9 Bài SBT , tr 116: Dùng xâu P=’0123456789ABCDEF’ để lưu
Trang 8Lưu ý: có một số ngôn ngữ lập trình cung cấp phương tiện đưa trực tiếp một số ra dạng biểu diễn hệ 16.
Đối với học sinh, việc các em có thể làm thêm các bài tập trong sách bài tập
ở nhà là một trong những nội dung quan trọng để các em khắc sâu kiến thức,nâng cao khả năng tư duy, lập trình giải toán Vấn đề đặt ra là các em gặp khókhăn khi vấp phải các bài tập khó với các gợi ý sơ lược như trong sách bài tậpTin học 11 Theo điều tra khảo sát thực tế học sinh tại các lớp 11C3, 11D3 vànhóm học sinh khá giỏi của lớp 11C4, 11D4 trường THPT Triệu Sơn 3 trong hainăm học liên tiếp:
- 11C3, 11C4: Năm học 2016 – 2017,
- 11D3, 11D4 : Năm học 2017 – 2018
(Lưu ý: Các lớp được chọn tham gia nghiên cứu cho đề tài có nhiều điểm tương
đồng nhau về ý thức học tập của học sinh, thái độ học tập đối với bộ môn Tinhọc, đặc biệt là năng lực học tập trước khi tác động.)
Kết quả là:
Bảng 1: Nguyện vọng tham gia đội dự tuyển học sinh giỏi của trường:
Mức độ
Năm học 2016-2017 Năm học 2017-2018 TổngLớp 11C3 Lớp 11C4 Lớp 11D3 Lớp 11D4
Trang 9Bảng 2: Về nguyên nhân chủ yếu làm học sinh không muốn tham gia đội dự
tuyển thi học sinh giỏi môn Tin học:
Lớp Sĩ
số
Nguyên nhân
Do là mônhọc khó
Do là mônhọc phụ
Do gia đinhkhông đồng ý
Ý kiếnkhác
tự nghiên cứu và tự làm bài tập, do đó không đủ sức để đầu tư vào môn học, mấtthời gian và ảnh hưởng đến các môn học cơ bản (các môn học để thi trong kì thiTHPT Quốc gia)
Vậy, làm thế nào để có thể nâng cao kết quả học tập, làm thế nào để các emcảm thấy chủ động tiếp thu kiến thức một cách tư duy sáng tạo, giúp học sinhhứng thú hơn với môn học, kết quả học tập nói chung được nâng lên, lựa chọnđược những học sinh có tố chất vào đội dự tuyển của trường tham gia dự thi họcsinh giỏi cấp Tỉnh là điều mà bản thân tôi luôn suy nghĩ, trăn trở trong mỗi nămhọc
2.3 CÁC GIẢI PHÁP GIẢI QUYẾT VẤN ĐỀ
2.3.1 Xác định bài toán, khai báo dữ liệu, xây dựng ý tưởng, viết thuật toán
Trong phần này tương ứng với mỗi bài tập đã nêu ở trên, tôi xin nêu thuậttoán cụ thể cho bài tập và mã nguồn viết bằng ngôn ngữ Pascal (mã nguồn xemphần phụ lục), qua đó các em học sinh có thể tham khảo và tự viết chương trìnhgiải quyết bài toán, các đoạn mã nguồn nêu trong đề tài đã được chạy thử, có độtin cậy cao và đã được các em học sinh khá giỏi trường THPT Triệu Sơn 3 sửdụng tham khảo và so sánh với bài làm của mình
2.3.1.1 Bài 4.12/tr33
* Xác định input và output của bài toán.
Input: Dãy số nguyên P =(p1, p2, , pn), 2 ≤ n ≤ 100; các pi là các số nguyênbất kỳ
Output: Dãy số nguyên P =(p1, p2, , pn), sau khi đã đổi chỗ phần tử lớn nhất
có chỉ số nhỏ nhất và phần tử nhỏ nhất có chỉ số lớn nhất
Trang 10* Khai báo dữ liệu bài toán.
- Mảng P gồm tối đa 100 phần tử kiểu Integer để lưu dãy số P nhập vào từ bànphím
- Các biến nguyên Pmax, imax, Pmin, imin tương ứng là các biến lưu giá trị lớnnhất, vị trí của giá trị lớn nhất, giá trị nhỏ nhất, vị trí của giá trị nhỏ nhất Ngoài
ra cần dùng biến N - lưu kích thước mảng, biến i - dùng làm chỉ số duyệt mảng,nhập và in mảng (N, i - kiểu Integer)
* Thuật toán.
Bước 1: Nhập N và dãy số P =(p1, p2, , pn) từ bàn phím;
Bước 2: Pmin ← p[n] ; imin ← n ; Pmax ← p[1] ; imax ← 1; i ← 1;
Bước 3: Nếu i = n thì đến bước 5;
Bước 4: Nếu Pmax < p[i+1] thì Pmax ← p[imax+1]; imax ← i; i ← i+1;sang bước 3;
Bước 5: Nếu imin = 1 thì đến bước 7;
Bước 6: Nếu Pmin > p[i-1] thì Pmin ← p[i-1]; imin ← i; i ← i-1; sangbước 5;
Bước 7: p[imin] ← Pmax; p[imax]← Pmin;
Bước 8: In dãy P ra màn hình và kết thúc
2.3.1.2 Bài 4.25/tr38
* Xác định input và output của bài toán.
Input: Xâu kí tự s chỉ gồm các dấu ngoặc mở “(” hoặc ngoặc đóng “)”
Output: “Yes” nếu là cách đặt ngoặc đúng, “No” nếu là cách đặt ngoặc sai
* Khai báo dữ liệu bài toán.
- Xâu ký tự S (string), biến nguyên d tăng một đơn vị nếu gặp dấu ngoặc mở hoặc giảm một đơn vị nếu gặp dấu ngoặc đóng
* Thuật toán
- Xác định ý tưởng: Dùng biến đếm d kiểu integer với giá trị ban đầu bằng 0 đểđếm hoặc duyệt từ trái sang phải, gặp dấu ngoặc mở thì tăng d lên 1, gặp dấungoặc đóng thì giảm d một đơn vị Biểu thức ngoặc là sai khi gặp d=-1 hoặc hếtbiểu thức ngoặc d vẫn lớn hơn 0
- Thuật toán:
Bước 1: Nhập xâu st;
Bước 2: d←0; i←1;
Bước 3:
Bước 3.1: Nếu st[i]= “(” thì d←d+d;
Bước 3.2: Nếu st[i] = “)” thì d←d-1;
Bước 4: Nếu d=-1 thì thông báo “No” rồi kết thúc
Bước 5: Nếu i>length(st) thì sang bước 7;
Bước 6: i←i+1, rồi quay lại bước 3;
Bước 7: Nếu d=0 thì thông báo “Yes” rồi kết thúc, ngược lại thì thông báo
“No” rồi kết thúc;
2.3.1.3 Bài 4.27/tr39
* Xác định input và output của bài toán
Input: Số nguyên K (1< K ≤ 26) và xâu ký tự S không quá 255 ký tự
Trang 11Output: Xâu X là xâu ký tự S sau khi đã mã hóa theo quy tắc Xê Da với khóa
là K ra màn hình
* Khai báo dữ liệu bài toán
Số nguyên K (Integer) và xâu ký tự S, X (string)
* Thuật toán
- Xác định ý tưởng: Tạo xâu P gồm 26 ký tự trong bảng chữ cái Tiếng Anh, sau
đó gấp đôi xâu P lên và gọi P là xâu mẫu Duyệt từng ký tự của xâu S, với mỗi
ký tự S[i] ta thay bằng ký tự cách ký tự S[i] trong xâu mẫu P là K vị trí để được
ký tự X[i] là ký tự được mã hóa
- Thuật toán:
Bước 1: Nhập số nguyên K (1<K ≤26), và xâu ký tự S gồm các chữ cái từ 'a'đến 'z'; X ← S ; i ← 1;
P ← ' abcdefghijklmnopqrstuvxyz abcdefghijklmnopqrstuvxyz ';
Bước 2: Nếu i > length(S) thì đến bước 4;
Bước 3: j ← pos(S[i] , P) + k ; X[i] ← P[j] ; i ← i + 1; sang bước 2;
Bước 4: In ra xâu X
2.3.1.4 Bài 4.39/tr45
* Xác định input và output của bài toán
Input: Nhập xâu S chứa các ký tự latinh in thường và các chữ số 0 9
Output: Số các ký tự khác nhau trong S.
* Khai báo dữ liệu bài toán
- Khai báo các biến xâu S, biến Count kiểu integer
Bước 2: Nếu chr(i) > 'z' thì sang bước 5;
Bước 3: Nếu pos(chr(i),s)>0 thì Count ← count + 1;
Bước 4: i ← i+1; sang bước 2;
Bước 5: Nếu chr(j) > '9' thì sang bước 8;
Bước 6: Nếu Pos(chr(j),s)>0 thì Count ← Count + 1;
Bước 7: j ← j + 1; sang bước 5;
Bước 8: In giá trị Count và kết thúc
2.3.1.5 Bài 4.40/tr45
* Xác định input và output của bài toán
Input: Xâu kí tự st
Output: Xâu st đã được chuẩn hóa bằng cách xóa các dấu cách thừa.
* Khai báo dữ liệu bài toán
- Khai báo biến xâu St; biến i kiểu integer
* Thuật toán
- Xác định ý tưởng: Lặp lại việc: xét kí tự đầu xâu, nếu là dấu cách thì xóa; Lặp
lại việc: xét kí tự cuối xâu, nếu là dấu cách thì xóa; Nếu tồn tại của hai dấu cách
Trang 12liên tiếp giữa xâu thì xóa một dấu cách ở vị trí tìm được, bằng cách sử dụng hàmPos(‘ ‘,st) Lặp lại công việc này cho đến khi không còn hai dấu cách liên tiếp.
- Thuật toán:
Bước 1: Nhập xâu st;
Bước 2: i ← 1;
Bước 3: Trong khi st[i]= ‘ ‘ thì delete(st,i,1);
Bước 4: Nếu i>length(st)-1 thì đưa ra xâu st, rồi kết thúc;
Bước 5: Nếu (st[i]= ‘ ‘) và (st[i+1] = ‘ ‘) thì delete(st,i,1);
Bước 6: i←i+1, rồi quay lại bước 3;
2.3.1.6 Bài 4.41/tr45
* Xác định input và output của bài toán
Input: Xâu kí tự st
Output: Số lượng từ của xâu.
* Khai báo dữ liệu bài toán
- Khai báo biến xâu St; biến i,d kiểu integer
* Thuật toán
- Xác định ý tưởng: Bắt đầu từ vị trí đầu tiên của xâu, nếu kí tự thứ i là dấu cách
và kí tự thứ i+1 khác dấu cách thì tăng d thêm 1 đơn vị Số lượng từ của xâu là d
Bước 5: Nếu i> length(st) thì đưa ra d, rồi kết thúc;
Bước 5: Nếu st[i]<> ‘ ‘ và st[i+1] = ‘ ‘ thì d←d+1;
Bước 6: Quay lại bước 4;
2.3.1.7 Bài 4.42/tr46
* Xác định input và output của bài toán
Input: Nhập xâu N viên đá quý (5≤ N ≤ 120), mỗi phần tử là số nguyên
trong khoảng 1 9
Output: In ra số vị trí khác nhau có thể mắc khóa tháo lắp vòng.
* Khai báo dữ liệu bài toán
- Khai báo các biến xâu S, biến Count kiểu integer
Bước 2: Khởi tạo: N ← Length(s); s ← s + s; count ← 0; i←1;
Bước 3: Nếu i >N thì sang bước 9;
Bước 4: L ←i; R←i+N-1;
Bước 5: Nếu (L ≥ R)hoặc(S[L] <> S[R]) thì sang bước 7;
Bước 6: L ← L + 1; R ← R -1; sang bước 5;
Bước 7: Nếu L ≥ R thì Count ← Count + 1;
Trang 13Bước 8: i ← i + 1; sang bước 3;
Bước 9: In giá trị Count; Kết thúc
2.3.1.8 Bài 7.14/tr6 8
* Xác định input và output của bài toán
Input: Xâu số N (Xâu không quá 50 chữ số và không có số 0 không có nghĩa
ở đầu)
Output: In ra số thống kê của N
* Khai báo dữ liệu bài toán
- Khai báo các biến xâu N, a ; biến i,j kiểu nguyên
* Thuật toán
- Xác định ý tưởng: Tạo mảng thống kê sự xuất hiện các chữ số từ 0 đến 9
- Thuật toán:
Bước 1: Nhập N;
Bước 2:i←0; a[i] ←0;
Bước 3: j←1; a[N[j]] ←a[N[j]]+1;
Bước 4: Nếu j<=length(N) thì quay lại Bước 2;
Bước 5: j:=j+1;
Bước 6: Nếu a[i]>0 thì đến bước 8;
Bước 7:
Bước 7.1: Nếu i<=9 thì quay lại bước 3;
Bước 7.2: Nếu i>9 thì đến bước 8;
Bước 8: Đưa ra kết quả, rồi kết thúc
2.3.1.9 Bài 7.16/tr69
* Xác định input và output của bài toán
Input: Số nguyên dương N
Output: Dạng biểu diễn của N ở hệ Hexa
* Khai báo dữ liệu bài toán
- Số nguyên N; Mảng a để lưu trữ kết quả số N ở hệ Hexa
Bước 1: Nhập số nguyên dương N;
Bước 2: Nếu N=0 thì đưa ra ‘0’, rồi kết thúc
Bước 3: i←0; p←’0123456789ABCDEF’;
Bước 4: Nếu N>0 thì i←i+1;
Bước 5: a[i] ←p[(N mod 16) +1]; N←N div 16; rồi quay lại Bước 4
Bước 6: j←i;
Bước 7: Đưa ra a[j];
Bước 8: j←i-1;
Trang 14Output: In ra chữ số cuối cùng sau khi thu gọn dãy N1= 1234 N
* Khai báo dữ liệu bài toán
- Khai báo biến: Khai báo mảng C: Array[1 1000]of char chứa dãy số ban đầu
* Thuật toán
- Xác định ý tưởng: Xóa mảng theo quy tắc nêu trong đầu bài
- Thuật toán : (phần xử lý xóa chữ số)
Bước 1: i0 ← 2;
Bước 2: Nếu N=1 thì thông báo C[N] và kết thúc;
Bước 3: i ← i0;
Bước 4: Nếu (ODD(i0) và ODD(n)) thì C[n] ← 0; n←n-1;
Bước 5: Nếu i ≥ n thì sang bước 10;
Bước 6: j ← i;
Bước 7: Nếu j > n - 1 thì sang bước 9
Bước 8: C[j] ← C[j+1]; j ← j + 1; sang bước 7;
Bước 9: C[n]← #0; n ← n - 1; i ← i + 1; sang bước 5;
Bước 10: Nếu i0=2 thì i0← i0 - 1;
Bước 11: i0 ← i0 + 1; sang bước 2;
2.3.2 Lựa chọn học sinh khá giỏi thông qua các bài tập
Thông qua các bài tập đã đưa ra, giáo viên có thể phát hiện ra những học sinhtiềm năng có thể theo học dự tuyển cho thi học sinh giỏi, hoặc những học sinh
có thể lấy “cần cù bù khả năng” Từ đó, chọn lựa được những học sinh củatrường tham gia dự tuyển thi học sinh giỏi cấp Tỉnh
2.3.2.1 Lựa chọn thông qua việc phát hiện ý tưởng
Với mỗi bài toán đặt ra, giáo viên có thể căn cứ vào các yêu cầu sau để lựachọn được những học sinh khá giỏi:
- Học sinh có thể xác định được ý tưởng giải quyết bài toán không?
- Học sinh có thể sử dụng cấu trúc dữ liệu để mô tả dữ liệu cho bài toánkhông?
- Học sinh có thể viết thuật toán giải quyết bài toán không?
- Học sinh có thể sử dụng các câu lệnh của ngôn ngữ lập trình để viết chươngtrình không?
2.3.2.2 Lựa chọn thông qua việc lập trình giải các bài toán
Học sinh có thể phát hiện ý tưởng giải bài toán rất nhanh, đó là cơ sở để chọnlựa được những học sinh có tố chất, nhưng việc giải một bài toán trên máy tínhcần có cả tố chất và kĩ năng, nên những học sinh này còn cần được rèn luyệnbằng cách lập trình trên máy tính, giáo viên cần hướng dẫn cho các em để có thểlập trình giải được bài toán thông qua các ý tưởng mà các em đã đưa ra, từ đó cóthể đồng thời hướng dẫn, sửa lỗi cho các em khi dịch hoặc thực hiện chươngtrình Điều này sẽ giúp các em rèn luyện được kĩ năng lập trình trên máy tính
2.3.3 Mở rộng các bài tập đã đưa ra nhằm bồi dưỡng học sinh khá giỏi
Trang 15Sau khi đã lựa chọn, xác định được những học sinh khá giỏi và thực sự muốntham gia vào đội dự tuyển thi học sinh giỏi cấp Tỉnh Tôi mở rộng hệ thống cácbài tập trên cơ sở các bài tập có sẵn trong sách bài tập với mức độ khó dần (tấtnhiên sẽ có những bài tập mà để giải quyết được thì cần sử dụng nhiều kiến thứchơn nữa, tùy vào từng chủ đề ôn luyện sẽ đưa ra các bài tập ở mức độ phù hợp).
Từ đó, các em sẽ cảm thấy vấn đề không phải là quá khó hay mới lạ, mà từnhững kiến thức đã biết, các em cần vận dụng và tìm ra ý tưởng cho bài toán mởrộng này Từ đó sẽ có hứng thú hơn, các em sẽ học tập chủ động hơn (Lưu ý:
mã nguồn cho các bài tập này ở trong phần phụ lục 3)
2.3.3.1 Với bài 4.12
Có thể mở rộng thành bài toán với N lớn hơn, N<108 Từ đó học sinh hiểuđược rằng, tùy vào phạm vi giới hạn của đề bài mà khai báo và lựa chọn cáchlàm cho hết các test của bài
Ví dụ dãy ngoặc sai: )(, ((((, ()((, )))), )()(
Viết chương trình liệt kê tất cả các dãy ngoặc đúng có chiều dài n (n chẵn)
Dữ liệu vào:
- Là số nguyên n (n chẵn, 2 ≤ n ≤ 20)
Kết quả ra: với m là số lượng các dãy ngoặc đúng có chiều dài n
- Trong m dòng đầu tiên, mỗi dòng liệt kê một dãy ngoặc đúng chiều dài
n Các dãy được liệt kê theo thứ tự từ điển: '(' < ')'.
Ví dụ 2: Dãy ngoặc đúng (Câu 3-Đề thi HSG Tỉnh Thanh Hóa 2013- 2014):
Người ta định nghĩa một xâu kí tự gồm các kí tự ‘(’ và ‘)’ là một dãy ngoặcđúng như sau:
- Xâu rỗng là một dãy ngoặc đúng
- Nếu X là dãy ngoặc đúng thì (X) cũng là một dãy ngoặc đúng
- Nếu X, Y là những dãy ngoặc đúng thì XY cũng là dãy ngoặc đúng
Những dãy ngoặc sau là những dãy ngoặc đúng:
Trang 16- )()()(
Cho một xâu kí tự T = T1 , T 2 , T n , trong đó T i là một trong hai kí tự ‘(’ hoặc
‘)’ với mọi i=1 n
Yêu cầu: Hãy đếm số cặp i,j (i<j) mà xâu kí tự thu được từ việc ghép các kí tự
liên tiếp Ti , T i+1 , T j (giữ nguyên thứ tự) là một dãy ngoặc đúng.
Dữ liệu vào: File văn bản BAI3.INP gồm 2 dòng:
- Dòng thứ nhất chứa số n là độ dài của xâu kí tự T (n ≤ 1000).
chữ đứng sau nó k vị trí trong bảng chữ cái Giả sử chọn k = 3, ta có bảng
chuyển đổi như sau:
Hãy mã hóa một xâu cho trước theo quy luật sau: A thay bởi Z, B thay bởi
Y, C thay bởi X, Các kí tự không phải là chữ cái sẽ không thay đổi
Dữ liệu vào: ENCO.INP gồm 1 dòng chứa xâu cần mã hóa (có độ dài ≤108) Các
kí tự trong xâu chỉ gồm các chữ cái in hoa ‘A’ ’Z’ và các kí tự không phải làchữ cái
Kết quả ra: Ghi ra file ENCO.OUT xâu đã mã hóa
VD:
Trang 17ENCO.INP ENCO.OUTGSRH RH Z HVXIVG
XLWV
THIS IS A SECRET
CODE
2.3.3.4 Với bài 4.39
Ví dụ 1: Liệt kê chữ cái
Cho một văn bản chứa trong một text file Viết chương trình liệt kê các chữ cái chỉ có mặt trong văn bản đúng một lần theo thứ tự của bảng chữ cái (không phân biệt chữ hoa và chữ thường)
Dữ liệu vào: file DEM_CHU.INP gồm nhiều dòng chứa các ký tự trong file Kết quả ra: file DEM_CHU.OUT Mỗi dòng ghi các ký tự chỉ xuất hiện đúng
một lần trong file theo yêu cầu đề ra
Ví dụ 2: Kí tự khác nhau (Câu 2- Đề thi HSG Tỉnh Thanh Hóa 2016-2017)
Cho xâu S chỉ gồm các kí tự là chữ cái tiếng anh và các chữ số (có phân biệt
chữ in hoa, in thường)
Yêu cầu: Hãy xác định số kí tự khác nhau trong xâu S và mỗi kí tự xuất hiện
bao nhiêu lần
Dữ liệu vào: Vào từ file văn bản BAI2.INP gồm 1 dòng duy nhất là xâu kí tự S
(có độ dài không quá 255)
Kết quả: Kết quả ghi ra file văn bản BAI2.OUT gồm:
- Dòng đầu ghi số kí tự khác nhau
- Các dòng tiếp theo, mỗi dòng ghi một kí tự xuất hiện trong xâu S và sốlần xuất hiện của nó Các kí tự đưa ra theo thứ tự chữ cái in hoa, in thường, chữ
số Các chữ cái, chữ số đưa ra theo thứ tự từ điển
Ví dụ: Chuẩn hoá văn bản (Câu 3- Đề thi HSG Tỉnh Thanh Hóa 2010-2011)
Một văn bản được gọi là văn bản chuẩn nếu:
- Hai từ liền nhau có duy nhất một dấu cách trống
Trang 18- Dấu ngắt câu (dấu chấm, dấu phẩy, 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 bên phải 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 văn bản chuẩn
Dữ liệu vào: từ file BAI3.INP
Kết quả: ghi ra file BAI3.OUT văn bản đã được chuẩn hoá.
Dữ liệu vào: File TUDAI.INP chứa xâu S
Dữ liệu ra: File TUDAI.OUT chứa từ dài nhất và độ dài của từ
VD
4Truong thich hoc pascal Truong
pascal5
Ví dụ 2: Sắp xếp xâu.
Người ta định nghĩa: Từ là một nhóm ký tự đứng liền nhau
Cho một xâu St gồm các ký tự lấy từ tập ‘a’ ‘z’ và dấu cách Xâu khôngquá 20 từ, mỗi từ dài không quá 10 ký tự
Yêu cầu: Sắp xếp các từ của xâu ký tự theo thứ tự không giảm của độ dài các từ
trong xâu St
Dữ liệu vào: Cho trong file văn bản SAPXAU.INP gồm một dòng ghi một xâu
ký tự St (có ít nhất 1 từ)
Dữ liệu ra: Ghi ra file văn bản SAPXAU.OUT, các từ của xâu sau khi được sắp
xếp, các từ được ghi cách nhau đúng một dấu cách
Thấy rét u tôi bọc lại mền
Cô nàng cất rượu ủ thêm men
( trích Hoa với rượu – Nguyễn
Bính)
Thấy rét u tôi bọc lại mền
Cô nàng cất rượu ủ thêm men
( trích Hoa với rượu – Nguyễn
Bính)