intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Sáng kiến kinh nghiệm THPT: Rèn luyện kỹ năng lập trình với chủ đề xâu ký tự cho học sinh khá giỏi trong ngôn ngữ lập trình C++ và Python

Chia sẻ: Hương Hoa Cỏ Mới | Ngày: | Loại File: PDF | Số trang:46

50
lượt xem
14
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục tiêu nghiên cứu của sáng kiến kinh nghiệm là nhằm nâng cao hiệu quả bồi dưỡng học sinh khá giỏi và giúp giáo viên có thêm một số cách thức để ôn luyện phù hợp. Qua đó, tôi cũng mong muốn mọi giáo viên Tin học luôn có ý thức tìm tòi, nghiên cứu nâng cao trình độ, năng lực chuyên môn, thực hiện tốt công cuộc đổi mới của ngành.

Chủ đề:
Lưu

Nội dung Text: Sáng kiến kinh nghiệm THPT: Rèn luyện kỹ năng lập trình với chủ đề xâu ký tự cho học sinh khá giỏi trong ngôn ngữ lập trình C++ và Python

  1. SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN TRƯỜNG THPT YÊN THÀNH 3 ---------------------------------- SÁNG KIẾN Đề tài: RÈN LUYỆN KỸ NĂNG LẬP TRÌNH VỚI CHỦ ĐỀ XÂU KÝ TỰ CHO HỌC SINH KHÁ GIỎI TRONG NGÔN NGỮ LẬP TRÌNH C++ VÀ PYTHON TÁC GIẢ: Tô Thị Tường ĐIỆN THOẠI: 0975905669 TỔ: Toán – Tin THỜI GIAN THỰC HIỆN: Năm học 2019 - 2020 Năm học 2020 - 2021 ---------------------------------- 1
  2. Đề tài: “RÈN LUYỆN KỸ NĂNG LẬP TRÌNH VỚI CHỦ ĐỀ XÂU KÝ TỰ CHO HỌC SINH KHÁ GIỎI TRONG NGÔN NGỮ LẬP TRÌNH C++ VÀ PYTHON” MỤC LỤC NỘI DUNG Trang Phần 1 - ĐẶT VẤN ĐỀ: 3 I - Lý do chọn đề tài. 3 II – Điểm mới của đề tài. 4 Phần 2 - NỘI DUNG. 5 I – CƠ SỞ LÝ LUẬN 5 1. Vai trò của việc rèn luyện kỹ năng lập trình cho học sinh 5 khá giỏi. 2. Sự cần thiết dạy học cho học sinh khá giỏi về ngôn ngữ lập 5 trình C++ và Python. 3. Tầm quan trọng của chủ đề Xâu ký tự trong dạy học lập 6 trình. II – THỰC TRẠNG VẤN ĐỀ 6 1. Thực trạng dạy học ngôn ngữ lập trình C++, Python ở các 6 trường THPT. 2. Thực trạng dạy học ngôn ngữ lập trình C++, Python ở 7 trường chúng tôi. 3. Thực trạng dạy học chủ đề xâu dữ liệu cho đối tượng học 7 sinh khá giỏi. III – GIẢI QUYẾT VẤN ĐỀ 8 1 – Một số đặc tính và kiến thức cơ bản về xâu dữ liệu trong 8 NNLT C++ và Python 1.1 Một số đặc tính khác nhau giữa Xâu trong C++ và Xâu 8 trong Python 1.2 Tóm tắt một số thao tác xử lý xâu trong C++ 8 1.3 Tóm tắt một số thao tác xử lý xâu trong Python 10 2
  3. 2 – Rèn luyện kỹ năng lập trình với chủ đề Kiểu xâu 11 2.1 Ôn luyện kỹ năng sử dụng thao tác xử lý xâu qua một số 11 bài toán cơ bản 2.2 Rèn luyện kỹ năng giải một số dạng bài tập phổ biến về 19 xâu ký tự. 2.2.1 Dạng bài tập yêu cầu biến đổi xâu 19 2.2.2 Dạng bài tập có yêu cầu duyệt xử lý xâu con 23 2.2.3 Dạng bài tập có yêu cầu xử lý số lớn. 27 3 - Một số bài tập mở rộng và nâng cao 31 4 - Hiệu quả của sáng kiến 42 Phần 3. PHẦN KẾT LUẬN 43 I - Kết luận chung 43 II – Ý nghĩa của đề tài 43 III - Khả năng ứng dụng, mở rộng của đề tài 44 IV - Đề xuất 44 DANH MỤC CÁC CHỮ VIẾT TẮT TRONG SÁNG KIẾN Nội dung Viết tắt Giáo dục phổ thông GDPT Phát triển năng lực. PTNL Trung học phổ thông THPT Giáo viên GV Học sinh HS Ngôn ngữ lập trình NNLT Ngôn ngữ lập trình C++ C++ Ngôn ngữ lập trình Python Python 3
  4. Phần 1. ĐẶT VẤN ĐỀ I. LÝ DO CHỌN ĐỀ TÀI. Giáo dục phổ thông nước ta đang thực hiện bước chuyển từ chương trình giáo dục tiếp cận nội dung sang chương trình giáo dục “định hướng năng lực”. Trong chương trình giáo dục phổ thông mới, bộ môn Tin học có rất nhiều điểm mới, trong đó Bộ GD-ĐT đã ban hành hướng dẫn điều chỉnh nội dung dạy học, cho phép và khuyến khích các cơ sở giáo dục dần loại bỏ ngôn ngữ lập trình Pascal lựa chọn giảng dạy các ngôn ngữ lập trình có tính cập nhật, hiện đại, và thông dụng như C++, Python… Hưởng ứng thực hiện nhiệm vụ đổi mới của ngành ở trường chúng tôi đã triển khai dạy học ngôn ngữ lập trình C++ cho toàn bộ học sinh khối 11 thay thế Pascal và trong các hoạt động nhóm chuyên môn chúng tôi đã tổ chức nghiên cứu về ngôn ngữ Python, tổ chức Câu lạc bộ Tin học tập hợp các học sinh yêu thích, đam mê Tin học bước đầu triển khai cho học sinh có sân chơi bổ ích, lành mạnh, thu hút học sinh khá giỏi tham gia học tập, chia sẻ lẫn nhau nhằm khơi dậy niểm đam mê tin học đối với học sinh, đồng thời nâng cao năng lực chuyên môn của giáo viên, trang bị kiến thức, nghiệp vụ sẵn sàng thực hiện tốt nhiệm vụ đổi mới góp phần đi tới đạt mục tiêu chung của ngành. Là một giáo viên bộ môn Tin học, bên cạch việc dạy học các kiến thức phổ thông về tin học thì việc bồi dưỡng học sinh khá giỏi cũng hết sức quan trọng; trách nhiệm của người giáo viên Tin học là tổ chức các hoạt động học tập cho học sinh để phát triển hệ thống năng lực mà một học sinh phổ thông cần phải có. Khi giảng dạy tôi thường phân tích những điểm ưu, nhược của các ngôn ngữ lập trình để các em có cái nhìn tổng quan, bao quát về một số ngôn ngữ lập trình như C++, Python để gieo niềm đam mê định hướng những học sinh có năng lực vào đội ngũ nhân lực CNTT chất lượng cao của đất nước. Qua quá dạy học, tôi nhận thấy chủ đề “Xâu ký tự” là một nội dung rất quan trọng trong việc tiếp cận ngôn ngữ lập trình bậc cao, xử lý xâu ký tự cũng là yêu cầu thường gặp trong việc xây dựng các phần mềm ứng dụng thực tiễn, nhưng việc dạy học chủ để này ở một số trường THPT còn gặp nhiều khó khăn, hiệu quả chưa cao. Với niềm đam mê chuyên môn, ham học hỏi tôi luôn tìm tòi nghiên cứu và tôi đã có những giải pháp tốt nhất nhằm đem lại hiệu quả cao trong công tác bồi dưỡng học sinh khá giỏi và đã đạt được những kết quả mong đợi. Tôi xin chia sẻ sáng kiến chủ đề “Rèn luyện kỹ năng lập trình với chủ đề xâu ký tự cho học sinh khá giỏi trong ngôn ngữ lập trình C++ và Python” với mong muốn đưa ra được giải pháp nhằm nâng cao hiệu quả bồi dưỡng học sinh khá giỏi và giúp giáo viên có thêm một số cách thức để ôn luyện phù hợp. Qua đó, tôi cũng mong muốn mọi giáo viên Tin học luôn có ý thức tìm tòi, nghiên cứu nâng cao trình độ, năng lực chuyên môn, thực hiện tốt công cuộc đổi mới của ngành. 4
  5. II. ĐIỂM MỚI CỦA ĐỀ TÀI - Hiện nay Python là ngôn ngữ lập trình đang được sử dụng rộng rãi để tạo ra các ứng dụng Trí tuệ nhân tạo (AI), phân tích dữ liệu lớn (Big data), học máy (machine learning).... Trong chương trình GDPT mới 2018, python sẽ là một lựa chọn phù hợp để giảng dạy cho học sinh THPT vì câu lệnh đơn giản ngắn gọn, dễ viết, dễ tiếp cận. Với những lý do trên, trường chúng tôi đã triển khai dạy học ngôn ngữ lập trình C++ song song với ngôn ngữ lập trình Python cho học sinh khá giỏi thông qua các số hoạt động học tập như Sinh hoạt Câu lạc bộ Tin học, trong bồi dưỡng học sinh khá giỏi và nghiên cứu khoa học kỹ thuật. - Sáng kiến này là sự đón đầu giúp giáo viên chuẩn bị kiến thức chuyên môn nghiệp vụ để triển khai chương trình chương trình GDPT 2018 một cách hiệu quả nhất. - Sáng kiến đã xây dựng các bài toán thành một hệ thống theo một trình tự logic có sự sắp đặt của phương pháp và quy trình giải toán, giúp học sinh dễ dàng tiếp cận với nội dung và rèn luyện tư duy thuật toán . - Sáng kiến đã chọn lọc hệ thống các bài tập thích hợp, sắp xếp một cách logic, hợp lí từ dễ đến khó nhằm giúp học sinh củng cố kiến thức, rèn luyện kỹ năng phát triển tư duy và biết áp dụng Tin học vào thực tiễn. - Thông qua việc hướng dẫn giải các bài toán giáo viên rèn luyện kỹ năng lựa chọn thuật toán cho học sinh bằng cách định hướng, uốn nắn, trau chuốt từng lời giải từng bài tập, qua đó góp phần tạo niềm tin và hứng thú học tập. 5
  6. Phần 2. NỘI DUNG I - CƠ SỞ LÝ LUẬN: 1. Vai trò của việc rèn luyện kỹ năng lập trình cho học sinh khá giỏi. Trong thời công nghệ 4.0, ngành công nghệ thông tin (CNTT) nói chung và Tin học nói riêng đang phát triển một cách mạnh mẽ. Mọi ngành nghề, lĩnh vực hay hoạt động nào trong xã hội hiện đại cũng cần tới sự góp mặt của CNTT, ở đâu ứng dụng của CNTT cũng vô cùng quan trọng. Vì vậy, nhu cầu về nguồn nhân lực CNTT là rất lớn và vẫn còn tiếp tục tăng vọt trong những năm tiếp theo, việc nâng cao chất lượng nguồn nhân lực CNTT để đáp ứng yêu cầu phát triển và hội nhập kinh tế quốc tế của đất nước là một nhiệm vụ hết sức cấp thiết hiện nay. Là một giáo viên bộ môn Tin học, bên cạch việc dạy học các kiến thức phổ thông về tin học ứng dụng thì việc dạy học lập trình cũng hết sức quan trọng; trách nhiệm của người giáo viên Tin học là giúp học sinh hiểu hơn về sự hoạt động của máy tính, am hiểu về khoa học kỹ thuật, góp phần định hướng những học sinh có năng lực và đam mê Tin học vào đội ngũ nhân lực CNTT chất lượng cao của đất nước. 2. Sự cần thiết dạy học cho học sinh khá giỏi về ngôn ngữ lập trình C++ và Python. Ngôn ngữ lập trình C++ và Python là ngôn ngữ lập trình phù hợp cho việc dạy học trong trường phổ thông, đều có thể sử dụng trong kỳ thi học sinh giỏi tỉnh Nghệ An vừa qua; đây cũng là hai trong những ngôn ngữ đang được sử dụng phổ biến hiện nay trong việc thiết kế, xây dựng các phần mềm ứng dụng thực tiễn và có những ưu thế riêng nhất định. Ngôn ngữ lập trình C++ rất phù hợp để rèn luyện cho học sinh hiểu sâu về thuật toán cũng như phân tích, đánh giá chính xác hiệu suất thuật toán. Trong lập trình thi đấu ở chương trình trung học phổ thông, ngôn ngữ C++ là ngôn ngữ được lựa chọn hàng đầu. Ngôn ngữ lập trình Python khá đơn giản giúp học sinh dễ học, dễ viết nhưng việc thực thi chương trình rất chậm không phù hợp với lập trình thi đấu trong giai đoạn hiện nay nhưng lại phù hợp hơn với định hướng giáo dục Stem của bộ môn Tin học (Sở GD&ĐT Nghệ An đã có công văn số 1677/SGD&ĐT- GDTrH ngày 26/8/2020 về hướng dẫn thực hiện giáo dục STEM trong trường trung học từ năm học 2020-2021) Việc dạy học cho đối tượng học sinh khá giỏi cả 2 ngôn ngữ giúp các em thấy được sự đa dạng phong phú trong lĩnh vực lập trình; giúp các em có cái nhìn tổng quát, toàn diện hơn; biết ưu, nhược điểm của mỗi ngôn ngữ từ đó kích thích sự tìm tòi, khám phá thúc đẩy niềm đam mê say sưa với Tin học; giúp các em có định hướng nghề nghiệp sớm hơn và phấn đấu để đạt mục tiêu của mình. 6
  7. 3. Tầm quan trọng của chủ đề Xâu ký tự trong dạy học lập trình. Chủ đề “Xâu dữ liệu” là một nội dung rất quan trọng trong việc tiếp cận ngôn ngữ lập trình bậc cao và cũng là yêu cầu thường gặp khi xây dựng các phần mềm ứng dụng thực tiễn. Trong việc dạy học lập trình, giáo dục Stem, bồi dưỡng học sinh khá giỏi ở trường phổ thông, chủ đề Xâu dữ liệu là một nội dung trọng tâm. Học sinh cần nắm được các thao tác xử lý trên xâu, có kỹ năng tốt trong việc phân tích bài toán và lựa chọn phương pháp phù hợp để có chương trình tốt hơn cả về độ sáng sủa của thuật toán lẫn thời gian thực hiện chương trình. Để đạt được điều đó, giáo viên cần lựa chọn các ví dụ, bài tập đảm bảo tính mục đích, tính khả thi, tính hiệu quả; các bài toán đưa ra chứa đựng những mâu thuẫn cần giải quyết, gợi ra cho học sinh nhiều hướng suy nghĩ, nhiều cách giải quyết vấn đề. Thiết kế trình tự thực hiện các bài toán cũng được xem là cơ sở quan trọng trong việc truyền tải kiến thức và kỹ năng, cần chú ý vận dụng linh hoạt cho từng trường hợp cụ thể để đạt mục đích dạy học. II - THỰC TRẠNG VẤN ĐỀ 1. Thực trạng dạy học ngôn ngữ lập trình C++, Python ở các trường THPT. Ngôn ngữ lập trình C++, Python là ngôn ngữ được định hướng dạy học trong chương trình GDPT 2018 và được khuyến khích triển khai dạy học trong giai đoạn chuyển tiếp hiện nay nhưng việc thực hiện còn có một số khó khăn nhất định: + SGK hiện hành dùng ngôn ngữ lập trình Pascal để minh họa nên học sinh không có sách phù hợp để làm tài liệu học tập. Việc tìm kiếm tài liệu dạy học phù hợp trình độ học sinh rất vất vả. + Đối với giáo viên việc trao đổi, chia sẻ, học hỏi kinh nghiệm gặp nhiều khó khăn do hầu hết đội ngũ giáo viên đều quen với ngôn ngữ lập trình Pascal, chưa mạnh dạn chuyển sang dạy ngôn ngữ khác có tính ưu việt hơn. + Kiến thức về lập trình không nằm trong nội dung thi THPT quốc gia nên hầu hết học sinh không coi trọng, ít học bài và làm bài tập chỉ những học sinh đã yêu thích, đam mê mới đầu tư thời gian cho việc học lập trình. Vì thế lượng giáo viên đam mê chuyên môn, đầu tư thời gian trăn trở nghiên cứu cải tiến cách dạy, cách học không nhiều. + Thời lượng dành cho dạy học ngôn ngữ lập trình 1,5 tiết/tuần, để mô tả thuật toán giải các bài toán trên máy tính là rất ít để có thể hiểu rõ ràng và áp dụng thành thạo ngôn ngữ lập trình. Thêm vào đó, cơ sở vật chất chưa đáp ứng được nhu cầu học tập nên việc triển khai dạy học chỉ có thể giúp học sinh hiểu được cơ bản quá trình giải một bài toán trên máy tính, còn để tất cả học sinh tự giải một bài hoàn chỉnh là rất khó. 7
  8. 2. Thực trạng dạy học ngôn ngữ lập trình C++, Python ở trường chúng tôi. Từ năm học 2018 - 2019 chúng tôi đã được tham dự các lớp tập huấn do sở GD & ĐT Nghệ An tổ chức về lập trình trên ngôn ngữ lập trình C++. Năm học 2019 – 2020 tiếp tục tham dự tập huấn và được khuyến khích triển khai dạy học ngôn ngữ C++ thay Pascal. Hào hứng thực hiện nhiệm vụ đổi mới của ngành, chúng tôi đã mạnh dạn đưa C++ vào dạy học ở một số lớp. Đến năm học 2020 – 2021, trường chúng tôi đã triển khai cho toàn bộ học sinh khối 11 trong chương trình chính khóa. Trong năm học 2019-2020, chúng tôi đã tập hợp những học sinh có học lực khá giỏi, yêu thích lập trình, truyền cảm hứng cho các em, thành lập Câu lạc bộ Tin học. Bước đầu tổ chức cho các em học tập, trao đổi về lập trình trên 3 ngôn ngữ lập trình là C++, Scratch và Python. Đối với những em học sinh lớp 10 mới tham gia chúng tôi cho làm quen với ngôn ngữ lập trình Scratch để kích thích hứng thú và giúp các em làm quen với tư duy máy tính, sau đó chúng tôi cho tiếp cận dần với ngôn ngữ lập trình C++ và Python. Trong quá trình triển khai thực hiện chúng tôi đã gặp rất nhiều khó khăn vướng mắc cả về kiến thức chuyên môn lẫn nghiệp vụ sư phạm. Với sự yêu nghề, nhiệt huyết với học sinh, tôi đã không ngừng tìm tòi, nghiên cứu trau dồi kiến thức đồng thời tích cực kết bạn với các đồng nghiệp trên mọi miền tổ quốc để giao lưu, học hỏi nâng cao trình độ. Qua quá trình này tôi cũng đã có những sáng kiến đem áp dụng mang lại kết quả rất khả quan, đã đúc rút thành những kinh nghiệm đáng chia sẻ. 3. Thực trạng dạy học chủ đề xâu dữ liệu cho đối tượng học sinh khá giỏi. + Chủ đề Xâu dữ liệu trong C++, Python có hệ thống khái niệm, câu lệnh, hàm xử lý đa dạng phong phú mà tài liệu tham khảo lại rất ít ỏi. Nên việc tìm tòi tài liệu, bài tập phù hợp với trình độ học sinh đã gặp rất nhiều khó khăn, việc tổng hợp bài tập và đề thi thành các dạng bài tập phục vụ giảng dạy mất rất nhiều thời gian. Đặc biệt đối với những giáo viên ít tham gia bồi dưỡng thì còn vất vả hơn nhiều. + Qua dạy học chủ đề Xâu dữ liệu những năm trước, tôi đã khảo sát các cấp độ nhận thức của học sinh cho kết quả như sau: Đa số học sinh chỉ đạt ở mức độ biết và hiểu, vận dụng được thì không đến 50% học sinh. Trong khi đó đối với học sinh khá giỏi yêu cầu cao hơn như viết được chương trình một số bài toán đơn giản; liên hệ được kiến thức về xâu với các tình huống trong thực tiễn và vận dụng dữ liệu kiểu xâu vào giải bài toán ứng dụng cụ thể. Lo lắng trước thực tế đó, tôi đã đầu tư thời gian, không ngừng học hỏi, nghiên cứu xây dựng nội dung, lựa chọn phương pháp, kỹ thuật phù hợp để kích thích đam mê, hứng thú giúp học sinh hình thành kiến thức và phát triển các kỹ năng, năng lực lập trình một cách tốt nhất. Kết quả trong kỳ thi HSG những năm gần đây, học sinh của tôi đã đạt được kết quả đáng tự hào. 8
  9. III – GIẢI PHÁP 1 – MỘT SỐ ĐẶC TÍNH VỀ XÂU VÀ HỆ THỐNG KIẾN THỨC CỐT LÕI. 1.1 Một số đặc tính khác nhau giữa Xâu trong C++ và trong Python. Xâu trong C++ Xâu trong Python - Là chuỗi ký tự trong bảng mã ASCII. - Python hỗ trợ hoàn toàn cho bảng mã Unicode. - Tên kiểu dữ liệu: string - Tên kiểu dữ liệu: str - Các ký tự của xâu được đặt trong cặp - Các ký tự của xâu được đặt trong cặp nháy kép. nháy đơn hoặc kép. Xâu trên nhiều dòng được đặt trong cặp 3 nháy đơn hoặc 3 nháy kép. - Các ký tự trong xâu được đánh chỉ số - Các ký tự trong xâu được đánh chỉ số từ trước ra sau bắt đầu từ 0; không từ trước ra sau bắt đầu từ 0 và đảo đánh chỉ số ngược. chiều âm từ sau về trước bắt đầu từ -1. - Khai báo: Để sử dụng cần khai báo - Khai báo: Trong Python không cần biến xâu: string ; khai báo, để tạo biến xâu ta chỉ cần gán xâu cho biến đó. - Trong C++ có thể thực hiện các thao - Trong Python, xâu là bất biến, không tác làm thay đổi giá trị của xâu thể thực hiện các thao tác làm thay đổi giá trị của xâu - Trong C++ có kiểu dữ liệu ký tự: - Python không có kiểu dữ liệu ký tự, char một ký tự cũng thuộc kiểu xâu. - Có thể thực hiện xóa, hoặc chèn ký tự - Không thể thực hiện xóa, chèn ký tự theo chỉ số theo chỉ số nhưng vẫn cho phép truy xuất ký thự theo chỉ số - Không cho phép thực hiện phép nhân - Cho phép thực hiện phép nhân xâu xâu với một số nguyên. với một số nguyên. 1.2 Tóm tắt một số thao tác xử lý xâu trong C++ * Một số thao tác cơ bản với xâu trong C++ - Phép ghép nối xâu: + - Phép so sánh: >, >=,
  10. - Hàm sao chép trong xâu s từ chỉ số VT lấy n ký tự: s.substr(VT, n); - Hàm chèn thêm vào xâu x vào xâu s tại vị trí VT: s.insert(VT, x); - Hàm xóa trong xâu s từ chỉ số VT xóa đi n ký tự: s.erase(VT, n); - Hàm tìm kiếm: tìm vị trí đầu tiên xuất hiện xâu x trong xâu s: s.find(x). Nếu xâu x không có trong xâu S thì kết quả = -1 - Hàm tìm kiếm ngược: tìm vị trí cuối cùng xuất hiện xâu x trong xâu s: s.rfind(x). Nếu xâu x không có trong xâu S thì kết quả = -1 - Hàm thay thế n ký tự từ vị trí VT của xâu s bởi xâu x: s.replace(VT,n,x); - Hàm đổi ký tự thành ký tự hoa: toupper(ch); - Hàm đổi ký tự thành ký tự thường: tolower(ch) * Một số thao tác mở rộng với xâu trong C++ - Hàm chuyển xâu s thành số n kiểu int: n = atoi(s.c_str()); - Hàm chuyển xâu s thành số n kiểu long: n = atol(s.c_str()); - Hàm chuyển xâu s thành số n kiểu long long: n = atoll(s.c_str()); - Hàm chuyển xâu s thành số n kiểu float: n = atof(s.c_str()); - Hàm chuyển số n thành xâu s: stringstream convert; covert
  11. 1.3 Tóm tắt một số thao tác xử lý xâu trong Python * Một số thao tác cơ bản với xâu trong Python - Phép ghép nối xâu: + - Phép so sánh: >, >=,
  12. - Hàm capitalize() viết hoa ký tự đầu tiên trong xâu, các chữ còn lại viết thường - Hàm s.strip(ch): trả về xâu mới có giá trị bằng xâu s đã xóa ký tự ch bên trái, bên phải hoặc xóa ký tự bên trái, bên phải. - Hàm s.startswith(x) Dùng để kiểm tra chuỗi s có bắt đầu bằng chuỗi con x hay không - Hàm s.endswith(x) Dùng để kiểm tra chuỗi s có kết thúc bằng chuỗi con x hay không - Hàm s.count(x) sẽ trả về số lần xuất hiện của chuỗi con x trong chuỗi mẹ s. - Hàm ds = s.split(x): cắt xâu s thành nhiều chuỗi con, dựa vào tiêu chí ngăn cách để cắt là xâu x lưu vào list có tên ds. Nếu vắng mặt xâu x thì việc cắt dựa vào xâu con các dấu cách. - Hàm s=x.join(ds): nối các xâu trong list ds thành xâu s bởi xâu gắn kết x. 2. RÈN LUYỆN KỸ NĂNG LẬP TRÌNH VỚI CHỦ ĐỀ KIỂU XÂU Rèn luyện kỹ năng lập trình cho học sinh cần xây dựng các bài toán thành một hệ thống theo một trình tự logic có sự sắp đặt của phương pháp và quy trình giải toán, giúp học sinh dễ dàng tiếp cận với nội dung bài học, đồng thời có thể phát triển tư duy cũng như tạo ra niềm vui và sự hứng thú trong học tập. 2.1 Ôn luyện kỹ năng sử dụng thao tác xử lý xâu qua một số bài toán cơ bản Để giúp học sinh ghi nhớ, khắc sâu và vận dụng linh hoạt các thao tác xử lý cơ bản trên xâu, tôi thường đưa ra các bài tập cơ bản rồi cho học sinh phân tích, tìm các cách giải quyết khác nhau. Những bài toán này không yêu cầu cao về mặt thuật toán mà cần huy động hết vốn kiến thức để có càng nhiều giải pháp càng tốt. Chương trình giải bài toán có nhiều cách diễn đạt khác nhau, giáo viên có thể yêu cầu các em diễn đạt hết các cách để rèn luyện kỹ năng diễn đạt câu lệnh. Bài luyện tập 1: Mục tiêu: Rèn luyện kỹ năng sử dụng các phép toán: ghép xâu, lấy độ dài xâu, đảo xâu, duyệt thuận, duyệt ngược xâu: Bài toán 1: Viết chương trình nhập vào một xâu ký tự S, đưa ra xâu đó nhưng được viết theo chiều ngược lại. Ý tưởng giải thuật: Cách 1: Sử dụng phép toán ghép nối (+): Khởi tạo biến kq= “” Duyệt lần lượt các ký tự của xâu ghép nối vào xâu kq (việc duyệt và ghép nối có thể có rất nhiều cách diễn đạt) 12
  13. Cách 2: Sử dụng hàm đảo Xâu: trong C++ sử dụng hàm reverse, trong Python dùng thao tác cắt trích s[start : end : step] . Chương trình tham khảo viết bằng C++: Ý tưởng sư phạm: Thông qua các chương trình nhấn mạnh cho học sinh các thao tác đã được vận dụng trong bài toán này và ý nghĩa, kỹ thuật sử dụng các thao tác. - Hàm s.length(): lấy độ dài xâu s, ngoài ra s.size() cũng cho độ dài xâu s. - Phép cộng (+): Ghép nối xâu. - Hàm reverse(s.begin(), s.end()): Đảo xâu. Chương trình tham khảo viết bằng Python: 13
  14. Ý tưởng sư phạm: Thông qua các chương trình nhấn mạnh cho học sinh các thao tác đã được vận dụng trong bài toán này và ý nghĩa, kỹ thuật sử dụng các thao tác trong Python. - Hàm len(): lấy độ dài xâu s. - Phép cộng (+): Ghép nối xâu. - Thao tác Cắt trích: s[start : end : step] Ý nghĩa là, lần lượt duyệt và trích các phần tử thuộc phạm vi từ vị trí start đến vị trí end-1 sau mỗi lần lấy một phần tử trong phạm vi thì di chuyển con trỏ với bước nhảy có độ rộng step. Các tham số trên có thể vắng mặt: nếu thiếu start thì mặc định là bắt đầu từ đầu xâu, nếu thiếu end thì mặc định đến hết xâu, nếu thiếu step thì mặc định là 1. Bài luyện tập 2: Mục tiêu: Rèn luyện kỹ năng sử dụng thao tác ghép nối, tìm kiếm, thay thế; thao tác xóa trong C++; Bài toán 2: Viết chương trình nhập vào một xâu ký tự S, đưa ra xâu đó nhưng loại bỏ các dấu cách trống. Ý tưởng giải thuật: Cách 1: Sử dụng thêm biến kq để lưu kết quả: Duyệt các phần tử, nếu gặp phần tử khác cách ‘ ’ thì nối sang xâu kết quả. Cách 2: Duyệt tìm các dấu cách trống rồi xóa khỏi xâu. * Trong C++: - Ta có thể duyệt từ sau ra trước bằng lệnh for hoặc while để tìm và xóa dấu cách. - Dùng hàm find tìm và xóa dấu cách bằng lệnh delete hoặc lệnh replace. * Trong Python: (không thể xóa phần tử theo chỉ số) - Dùng hàm replace để thực hiện - Dùng phép toán cắt trích kết hợp ghép nối. Chương trình tham khảo bằng C++: 14
  15. Ý tưởng sư phạm: Thông qua bài tập rèn luyện cho học sinh sự nhìn nhận đa hướng, mỗi bài toán có rất nhiều cách giải quyết; nhấn mạnh, khắc sâu ý nghĩa, kỹ thuật sử dụng các thao tác xử lý xâu: - Lưu ý hàm s.length() và hàm s.size() cùng cho độ dài xâu s. - Hàm tìm kiếm: + s.find(x, vt): Tìm kiếm vị trí đầu tiên xuất hiện xâu x trong xâu s. bắt đầu từ vị trí vt trở đi, nếu không có tham số vt thì bắt đầu tìm từ đầu xâu. Nếu không tìm thấy thì kết quả = -1 + s.rfind(x, vt): Tìm kiếm vị trí cuối cùng xuất hiện xâu x trong xâu s. bắt đầu từ vị trí vt trở về, nếu không có tham số vt thì bắt đầu tìm từ cuối (tìm ngược từ sau về đầu). Nếu không tìm thấy thì kết quả = -1 15
  16. - Hàm thay thế: + s.replace(vt, n, x): thay thế n ký tự trong xâu s, tính từ vị trí vt bởi xâu x. Chương trình tham khảo viết bằng Python: Ý tưởng sư phạm: Thông qua bài tập này nhấn mạnh, khắc sâu ý nghĩa, kỹ thuật sử dụng các thao tác xử lý xâu như phép ghép nối xâu, cắt trích xâu và hàm tìm kiếm, thay thế: - Hàm tìm kiếm: + s.find(x, [start], [end]): Tìm kiếm vị trí đầu tiên xuất hiện xâu x trong xâu s. bắt đầu từ vị trí start, kết thúc ở vị trí end-1, nếu vắng start thì mặc định bắt đầu tìm là vị trí 0 và nếu vắng end thì mặc định vị trí kết thúc tìm kiếm là cuối xâu. Nếu việc tìm kiếm không có kết quả thì hàm trả về giá trị -1 + s.rfind(x, [start], [end]): Tìm kiếm vị trí cuối cùng xuất hiện xâu x trong xâu s bắt đầu từ vị trí end-1, trở về vị trí start. - Hàm thay thế: + s.replace(s1, s2) để thay thế phần xâu con s1 bằng một xâu mới s2. Bài luyện tập 3: Mục tiêu: Rèn luyện kỹ năng sử dụng thao tác sao chép, chèn, xóa, tìm kiếm, thay thế trong C++; thao tác cắt trích, ghép nối, thay thế trong Python. Bài toán 3: Viết chương trình nhập vào từ bàn phím xâu ký tự s, tìm và thay thế tất cả các cụm ký tự s1 thành s2. Ví dụ: Xâu nhập vào: s = “anh oi, anh dang o đau” s1= “anh”; s2= “em”; Xâu kết quả: S = “em oi, em dang o đau” 16
  17. Ý tưởng giải thuật: Cách 1: - Trong C++: Dùng hàm tìm kiếm s.find(s1) để xác định vị trí xuất hiện xâu s1 trong xâu s: vt = s.find(s1) Nếu vt != -1 tức là có xâu s1 trong xâu s thì thay thế xâu s1 bởi xâu s2 bằng hàm s.replace(vt,l1,s2); hoặc thay thế bằng lệnh xóa và chèn: s.erase(vt,l1); s.insert(vt,s2); Lưu ý: Trong xâu có thể có rất nhiều cụm từ cần thay thế nên ta phải sử dụng lệnh while để thay thế hết: trong khi s.find(s1) != -1 thì tiếp tục thay thế - Trong Python: Sử dụng thao tác cắt trích, so sánh và ghép nối để thực hiện ý tưởng trên. Cách 2: - Trong C++: Để duyệt hết tất cả các khả năng cần thay thế ta sử dụng lệnh for kết hợp lệnh s.substr() để sao chép từng đoạn con có độ dài bằng độ dài xâu s1 rồi so sánh với s1. Nếu kết quả bằng s1 thì ta tiến hành thay thế bằng các câu lệnh tương tự cách 1. - Trong Python: Dùng hàm replace để thực hiện. Chương trình tham khảo bằng C++ Chương trình 1: Chương trình 2: Ý tưởng sư phạm: Thông qua bài tập rèn luyện nhấn mạnh, khắc sâu ý nghĩa, kỹ thuật sử dụng các thao tác xử lý xâu. 17
  18. Chương trình tham khảo bằng Python: Ý tưởng sư phạm: Thông qua bài tập này nhấn mạnh, khắc sâu kỹ thuật sử dụng các thao tác cắt trích, thay thế. Bài luyện tập 4: Mục tiêu: Rèn luyện kỹ năng xử lý ký tự theo mã ASCII, kỹ thuật đếm phân phối trên mảng với kiểu chỉ số tương ứng các ký tự. Bài toán 4: Đếm số lần xuất hiện mỗi loại ký tự. Cho xâu s (có độ dài không vượt quá 10 3) chỉ gồm các ký tự từ 'A' đến 'Z'. Cho biết có bao nhiêu loại ký tự xuất hiện trong s và đưa ra một ký tự xuất hiện nhiều nhất trong s cùng với số lần xuất hiện của ký tự đó Ý tưởng giải thuật: - Các ký tự từ 'A' đến 'Z' có mã ASCII tương ứng từ 65 đến 90. Nên ta sử dụng mảng T gồm 91 phần tử với kiểu chỉ số từ 0 đến 90, kiểu giá trị int để lưu số lần xuất hiện: T[65] …T[90] tương ứng số lần xuất hiện ký tự ‘A’… ‘Z’. - Lần theo các giá trị của mảng T trên đoạn từ 65 đến 90 ta được số lượng các ký tự khác nhau (tức số lượng phần tử có giá trị khác 0 trong mảng T) và tìm giá trị lớn nhất của mảng T ta sẽ tìm được ký tự xuất hiện nhiều lần nhất. Về nguyên tắc, ta chỉ cần sử dụng mảng với 26 phần tử kiểu int với chỉ số từ 0 đến 25, khi đó với mỗi ký tự ta chuyển sang mã ASCII rồi dịch chuyển chỉ số 65 đơn vị. Chương trình tham khảo trong Python (cách 1) sau được viết với ý tưởng này. Ngoài ra, trong Python ta có thể sử dụng lệnh count để đếm số lần xuất hiện không chồng lấn của một ký tự hay xâu con bên tròn xâu lớn. Chương trình tham khảo trong Python (cách 2) sau được viết với ý tưởng này. 18
  19. Chương trình tham khảo: Chương trình viết bằng C++ Chương trình viết bằng Python (cách 1) Chương trình viết bằng Python (cách 2) Ý tưởng sư phạm: Thông qua bài tập này nhấn mạnh cách thức sử dụng bảng mã ASCII, cách chuyển đổi qua lại giữa mã thập phân và ký tự, kỹ thuật đếm phân phối trên mảng với kiểu chỉ số tương ứng các ký tự. Ngoài ra, cần nhấn mạnh lệnh khởi tạo toàn bộ phần tử của mảng = 0, trong chương trình trên là lệnh memset, lệnh nhân (*). Lưu ý thêm lệnh ý nghĩa và cách sử dụng lệnh count trong Python. 19
  20. 2.2 - Rèn luyện kỹ năng giải một số dạng bài tập phổ biến về xâu ký tự: Việc phân loại dạng bài tập chỉ mang tính tương đối, một bài tập ở dạng này hay dạng kia còn phụ thuộc rất nhều vào cách nhìn nhận đa chiều của người lập trình. Trong phạm vi đề tài này mục tiêu của tôi là rèn luyện cho học sinh một số định hướng để giúp học sinh cái nhìn tổng quan hơn, nên mỗi bài toán có thể được đề xuất nhiều cách giải từ đó học sinh có thể phân tích, lựa chọn giải pháp tốt hơn để giải quyết bài toán. (Các giải pháp được đề xuất chỉ là các cách giải quyết, chưa hẳn đã là giải pháp tối ưu để giải bài toán) 2.2.1 Dạng bài tập yêu cầu biến đổi xâu Đây là dạng cơ bản thường gặp, 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 thao tác, các hàm xử lý 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: Chuyển đổi phông chữ: Khi soạn thảo và trình bày văn bản, việc chuyển đổi đoạn văn chữ hoa sang thường hay chữ thường sang chữ hoa là một nhu cầu rất phổ biến. Em hãy viết chương trình nhập vào 1 xâu s chỉ chứa dấu cách và các ký tự thuộc bảng chữ cái tiếng Anh, Hãy tạo xâu s1 chứa các tự trong xâu s nhưng ở dạng chữ hoa, tạo xâu s2 chứa các tự trong xâu s nhưng ở dạng chữ thường. Xuất kết quả xâu s1, s2 ra màn hình. Ý tưởng giải thuật: Cách 1: Duyệt và chuyển đổi từng ký tự: Trong C++: Dùng hàm toupper(), tolower() để chuyển đồi từng ký tự hoặc biến đổi qua mã ASCII. Trong Python: Sử dụng hàm ord() và chr() để thực hiện. Cách 2: Dùng hàm chuyển đổi đồng loạt Trong C++: Dùng hàm transform() để chuyển đồi tất cả các ký tự. + transform(s.begin(), s.end(), s.begin(), ::toupper); chuyển xâu s sang chữ hoa + transform(s.begin(), s.end(), s.begin(), ::tolower); chuyển xâu s sang chữ thường Trong Python: Dùng hàm upper(), lower(). + s.upper() Hàm này trả lại xâu s sau khi chuyển tất cả các ký tự thành chữ hoa. + s.lower() Hàm này trả lại xâu s sau khi chuyển tất cả các ký tự thành chữ thường. 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2