Vì vậy để học sinh có thể dễ dàng tiếp nhận kiến thức và không chán nãn thì cần tạo cho học sinh kỹ năng giải quyết được một số vấn đề yêu cầu đơn giản, trong quá trình dạy học tôi đã th
Trang 11 MỞ ĐẦU
1.1 Lý do chọn đề tài.
Hiện nay tin học nói chung hay phần ngôn ngữ lập trình bậc cao nói riêng
là một môn học có nội dung khá cần thiết đối với học sinh THPT Khi học sinh
đi học đại học, chuyên nghiệp, học sinh phải học đến kiến thức lập trình bằng ngôn ngữ bậc cao Nếu như học sinh không được làm quen ở THPT thì khi đi học đại học hay chuyên nghiệp điều đó là một trở ngại lớn đối với học sinh Những năm gần đây học sinh rất thích học chương trình tin học lập trình, nhưng vì chương trình lập trình là một phần học khó và trừu tượng, ngôn ngữ lập trình thì thay đổi liên tục Trước đây học sinh THPT học ngôn ngữ Pascal, năm 2021-2022 học C++, năm học 2022-2023 thay đổi Python Sự thay đổi liên tục chương trình giáo dục THPT của môn tin học đã gây ra rất nhiều khó khăn cho giáo viên và học sinh, học sinh lại chưa có kỹ năng lập trình Bên cạnh đó
do cơ sở vật chất phục vụ cho môn Tin học, để có thể đáp ứng cho học sinh được thực hành sau khi học lý thuyết của các nội dung học không có Vì vậy để học sinh có thể dễ dàng tiếp nhận kiến thức và không chán nãn thì cần tạo cho học sinh kỹ năng giải quyết được một số vấn đề yêu cầu đơn giản, trong quá trình dạy học tôi đã thực hiện biện pháp lồng ghép hai nội dung trong quá trình giải quyết một vấn đề nào đó, để học sinh có thể nắm chắc bản chất của vấn đề
và cách thực hiện vấn đề đó Để từ đó học sinh có thể sử dụng bất cứ một loại ngôn ngữ lập trình nào như: Python, C++,… để giải vấn đề nào đó mà không phải lo lắng, ngoài ra tôi đã vận dụng rất nhiều biện pháp để có thể đáp ứng nhu cầu học tập và tiếp thu kiến thức của học sinh
Khi yêu cầu học sinh giải một bài toán bằng ngôn ngữ lập trình nào đó tôi yêu cầu học sinh phải nắm được bản chất và cú pháp lệnh của ngôn ngữ đó
“Xâu kí tự” là phần học thích hợp nhất đễ tạo hứng thú, rèn luyện kỹ năng học
lập trình cho học sinh, tạo cho sinh có những kỹ năng cơ bản, vì học sinh có thể lấy những ví dụ đơn giản, gần gủi trong học tập Ngoài ra tôi còn lấy thêm một
số ví dụ đơn giản hơn so với trong sách giáo khoa để học sinh nắm được cách thức sử dụng bất cứ loại ngôn ngữ lập trình nào đó để giải quyết bài toán, đặc trưng là 2 loại ngôn ngữ Python và C++ trong chương trình học THPT mới Bài xâu kí tự là nội dung tôi tâm đắc nhất để có thể truyền tải cho học sinh kiến thức cần thiết và tạo được hứng thú học tập tốt nhất, giúp học sinh bước đầu không
còn “sợ” hai từ “lập trình” Vì vậy tôi đã chọn nội dung đề tài của tôi là: “Tạo hứng thú và kỹ năng học lập trình cho học sinh bằng cách lồng ghép cả hai loại ngôn ngữ lập trình Python và C++ để giải quyết một số nội dung trong bài Xâu kí tự - Tin học 10”.
Tin học, nhất là tin học lập trình bằng ngôn ngữ bậc cao rất cần thiết cho học sinh, nếu học sinh không học được, không nắm được kiến thức cơ bản ở cấp THPT thì sẽ gây khó khăn cho học sinh khi đi học đại học, chuyên nghiệp Vì vậy việc cần phải tạo cho học sinh hứng thú học lập trình, học sinh nắm được kiến thức, điều đó thật sự cần thiết và tôi đã cố gắng áp dụng tất cả những kinh nghiệm mình có để thực hiện truyền đạt kiến thức cho học sinh ở phần ngôn ngữ lập trình bậc cao - Tin học 10, đặc biết tôi đã áp dụng phần nội dung trong bài
Trang 2“Xâu kí tự” để đánh giá việc tiếp thu kiến thức của học sinh, vì phần này dễ tạo hứng thú, dễ vận dụng nhất
1.2 Mục đích nghiên cứu.
Chương trình tin học lập trình là chương trình khá khó đối với học sinh THPT Mục tiêu của chương trình tin học lập trình là nhằm trang bị cho học sinh một số khái niện cơ bản về lập trình và ngôn ngữ lập trình bậc cao
Thông qua việc hướng dẫn cho học sinh vận dụng một số nội dung trong bài xâu kí tự để giải quyết một số bài toán đơn giản, và từ đó tạo cho học sinh hứng thú học lập trình, rèn luyện cho học sinh những kỹ năng cơ bản Học sinh
có thể tự giải quyết các bài toán thực tế, những bài toán từ dễ đến khó, và có thể hiểu bản chất của bài toán từ đó có thể áp dụng bất cứ loại ngôn ngữ lập trình bậc cao nào để giải quyết bài toán mà không quá lo lắng như: C++, Python Hiểu thế nào là kiểu kí tự, cách sử dụng biến xâu, câu lệnh làm việc với xâu trong chương trình đơn giản Vận dụng một số câu lệnh làm việc với xâu kì tự vào giải quyết một số bài toán đơn giản
Các kiến thức trên góp phần phát triển khả năng tư duy khi giải quyết các vấn đề trong khoa học cũng như trong cuộc sống
Học sinh có thể giải được một số bài toán đơn giản trên máy tính bằng cách vận dụng được các kiến thức về thuật toán, cấu trúc dữ liệu, ngôn ngữ lập trình cụ thể Rèn luyện được cho học sinh kỹ năng kết hợp giữa lý thuyết và thực hành
Bài xâu kí tự là nội dung phù hợp nhất cho học sinh làm quen để giải quyết các bài toán đơn giản sau khi học cấu trúc chương trình
Trong quá trình giảng dạy cho học sinh hay nói đúng hơn là trước khi giải một bài toán bằng ngôn ngữ lập trình thì cần phải yêu cầu học sinh xác định chính xác yêu cầu của bài toán, xác định đúng Input, output Như vậy sẽ phát hiện lỗi nhanh và không làm cho học sinh cảm thấy chán nãn, học sinh có thể chạy được một số chương trình đơn giản phù hợp với mọi đối tượng học sinh Dựa trên kiến thức đã học và một số ví dụ đơn giản để học sinh biết cách xác định Input, Output trước khi giải quyết bài toán Từ đó tôi nhận thấy học sinh hứng thú hơn trong khi học lập trình và phát hiện ra lỗi của chương trình tốt hơn, các bước thực hiện rõ ràng
1.3 Đối tượng nghiên cứu.
Phần ngôn ngữ lập trình là một phần học có thể nói là khó với đội tượng học sinh tại trường THPT Lam Kinh Các kiến thức trong phần học này góp phần phát triển khả năng tư duy khi giải quyết các vấn đề trong khoa học cũng như trong cuộc sống, hình thành một số kĩ năng trong việc giải quyết bài toán bằng ngôn ngữ lập trình; cách dùng biến xâu, khởi tạo các giá trị biến xâu, cách sửa lỗi trong quá trình thực hành…Vì vậy tôi thấy rằng cần giúp học sinh tạo cho mình một số kỹ năng học tin học nhất là tin học lập trình ở chương trình tin
10 mà học sinh không có cảm giác sợ học hay chán nãn với sự khô khan của nó
và tôi đã bước đầu sử dụng kết hợp một số giải pháp trong quá trình dạy bài xâu
Trang 3cho học sinh sự yêu thích, hứng thú khi được học tin học lập trình, không bỡ ngỡ trước bất cứ ngôn ngữ lập trình nào, nhất là Python và C++ Vì vậy đề tài
của tôi là: “Tạo hứng thú và kỹ năng học lập trình cho học sinh bằng cách lồng ghép cả hai loại ngôn ngữ lập trình Python và C++ để giải quyết một số nội dung trong bài Xâu kí tự - Tin học 10”.
Tôi đã thực hiện kết hợp dạy lồng ghép kiến thức “Thuật toán” và “xâu kí tự” trong bài dạy, bên cạnh đó tôi lấy thêm nhiều ví dụ phù hợp với đối tượng học sinh của từng lớp Ngoài ra tôi đã thực hiện lồng ghép dạy lý thuyết và thực hành luôn trong tiết dạy để có thể phù hợp tình trạng thiếu cơ sở vật chất hiện nay của nhà trường, tôi đã áp dụng cho lớp cơ bản A, cơ bản C… và thật sự thấy
có hiệu quả tốt Học sinh hào hứng, chủ động hơn trong giờ học Nhằm phát huy được tính chủ động, sáng tạo của học sinh Đáp ứng được yêu cầu đánh giá giờ dạy theo 12 tiêu chí công văn 572 của Sở GD&ĐT Thanh Hóa Xây dựng những
kỹ năng cần thiết cho học sinh như:
Kỹ năng quản lý cảm xúc
Kỹ năng làm việc đội nhóm
Kỹ năng quản lý thời gian
Kỹ năng giao tiếp và ứng xử
Kỹ năng giải quyết vấn đề
Kỹ năng tự nhận thức
Kỹ năng lập trình
1.4 Phương pháp nghiên cứu.
Tìm hiểu đối tượng học sinh của từng lớp, thuyết trình kết hợp thực hành thao tác, hướng dẫn học sinh theo hướng học sinh chủ động, tạo cho học sinh có nhiều hứng thú trong giờ học Có thể kết hợp cả các biện pháp khuyến khích như: Khích lệ, cho điểm cao để học sinh hứng thú và hăng say phát biểu bài hơn Cho những ví dụ thực tế phù hợp với các nhóm đối tượng học sinh (Giỏi, khá, trung bình, yếu), ứng dụng phương pháp dạy học theo NCBH trong các tiết dạy
Có thể kết hợp nhiều biện pháp để hướng dẫn cho học sinh giải quyết các thuật toán từ dễ đến khó, không tạo cho học sinh áp lực dẫn đến chán nãn trong quá trình học phần này
Tôi đã sử dụng một số phương pháp nghiên cứu chẳng hạn như:
Phương pháp nghiên cứu xây dựng cơ sở lý thuyết Tôi vận dụng ghép phần thuật toán và cùng kết hợp với phần lý thuyết xâu kí tự
Phương pháp dạy học theo nhóm, thực hành theo nhóm
Phương pháp điều tra khảo sát thực tế, thu thập thông tin
Phương pháp thống kê, xử lý số liệu Học sinh phải tự cho một bài toán trong thực tế, và giải quyết bài toán đó
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1 Cơ sở lí luận của sáng kiến kinh nghiệm.
Hầu hết học sinh khối 10, vì các em mới bắt đầu tiếp cận với chương trình THPT, áp lực học hành của nhiều môn học, phương pháp học tập cũng có khác
sơ với THCS, lượng kiến thức nhiều, môn tin học, nhất là phần lập trình lại khá
Trang 4mới với các em, vì nó liên quan đến rất nhiều môn học như: Toán, lý, anh Môn học này yêu cầu cao về tư duy, logic Sau khi học sinh học những nội dung của phần lập trình như cấu trúc chương trình, kiểu dữ liệu, câu lệnh rẽ nhánh, câu lệnh lặp, học sinh vẫn rất mơ hồ và chưa thật sự hứng thú với tin học lập
trình Vì vậy tôi đã trăn trở rất nhiều “Làm thế nào để học sinh hứng thú học tập phần tin học lập trình?” và tôi đã quyết định vận dụng những kinh nghiệm của mình trong dạy học phần xâu kí tự Nó là một phần học dễ tạo hứng thú cho
học sinh nhất vì học sinh có thể lấy những ví dụ và có thể chạy bài và hiểu tác dụng của từng câu lệnh hơn
Phần ngôn ngữ lập trình bậc cao lớp 10 nó có liên quan kiến thức đến cả toán, lý, tiếng anh và yêu cầu cao của môn học về tư duy, logic Vì thế để các
em có hứng thú học phần tin học lập trình là cả một vấn đề Tôi đã áp dụng một
số kinh nghiệm vào quá trình giảng dạy tại lớp, và đầu tiên đó là phần xâu kí tự
vì phần này có thể dễ dàng khơi gợi lòng ham thích học lập trình của học sinh, rèn luyện một số phẩm chất cần thiết của người lập trình như: cẩn thận, chu đáo, sáng tạo, không thỏa mãn với kết quả đạt được…
Học sinh có thể hiểu được xâu kí tự là gì? “là dãy kí tự trong bộ mã Unicode [1,3] Thành phần của xâu gồm: “các phần tử trong xâu” [3], cách xác
định độ dài xâu “ số lượng phần tử của xâu” [3]
Theo tôi muốn cho giờ học đạt kết quả tốt, học sinh nắm bài tốt và có thể vận dụng nó trong quá trình lập trình giải bài toán trên máy tính bằng chương trình thì cần phải có tiết dạy tốt Vậy theo bạn thế nào là tiết dạy tốt? Theo tôi tiết dạy tốt là học sinh phải hăng hái học tập, hăng say phát biểu bài, giải quyết tốt những vấn đề mà giáo viên đặt ra Để làm được điều này tôi đã áp dụng một
số biện pháp trong tiết dạy nội dung bài kiểu xâu tại các lớp như sau:
Yêu cầu học sinh nắm được ý nghĩa của kiểu xâu: xâu có thể coi như là
một mảng một chiều, mỗi kí tự là một phần tử [3] Nếu xâu có độ dài bằng 0 thì xâu đó là xâu rỗng.[3]
Cách truy cập từng kí tự của xâu thông qua chỉ số, chỉ số bắt đầu từ 0 [1,3]
Áp dụng thực hiện làm một số ví dụ thực tế của giáo viên giao và lấy ví dụ trong sách giáo khoa
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Mục tiêu của chương trình tin học 10 là nhằm trang bị cho học sinh một số khái niện cơ bản về lập trình và ngôn ngữ lập trình bậc cao đặc trưng là Python, C++ Học sinh có thể giải được một số bài toán đơn giản trên máy tính bằng cách vận dụng được các kiến thức về thuật toán, cấu trúc dữ liệu, ngôn ngữ lập trình cụ thể ví du như Python, C++
Bài kiểu xâu là một nội dung phù hợp nhất cho học sinh làm quen để giải quyết các bài toán đơn giản sau khi học cấu trúc chương trình
Kết hợp phần thuật toán – Tin 10 chương trình cũ, trong quá trình giảng dạy cho học sinh hay nói đúng hơn là trước khi giải một bài toán bằng ngôn ngữ lập trình thì cần phải yêu cầu học sinh xây dựng thuật toán, cần xác định được input và output Như vậy sẽ phát hiện lỗi nhanh và không làm cho học sinh cảm
Trang 5thấy chán nãn, học sinh có thể chạy được một số chương trình đơn giản phù hợp với mọi đối tượng học sinh
Trước khi tôi áp dụng một số giải pháp theo kinh nghiệm dạy học của mình tôi thấy học sinh không hứng thú với phần tin học lập trình, mỗi khi đến giờ Tin học, học sinh luôn trong tâm trạng mệt mõi, lù đù, không phản ứng khi cô giáo hỏi, chất lượng học tập của học sinh rất kém, tỉ lệ trung bình và yếu nhiều, hầu như học sinh không nắm được kiến thức cơ bản, Vì vậy tôi đã mạnh dạn áp dụng một số giải pháp dạy học, đặc biệt trong nội dung tài liệu này tôi chỉ đưa ra minh chứng mà tôi áp dụng trong nội dung bài “Xâu kí tự”, để là một minh chứng cho chất lượng dạy học để nâng cao hiệu quả học tập và tôi nhận thấy kết quả học tập tại các lớp tốt hơn nhiều, học sinh ham thích học tin học lập trình hơn, có tinh thần học tốt hơn, nhiều học sinh còn chờ đợi đến tiết Tin học
Nội dung học phần ngôn ngữ lập trình bậc cao - Tin học 10 là phần học khá khó, vì vậy với nội dung trong sách giáo khoa học sinh rất khó hiểu, từ đó sẽ dẫn đến tình trạng ngại học Kinh nghiệm của tôi sau nhiều năm dạy tin học nhất là phần lập trình, dạy phần này cần tạo cho học sinh hứng thú học cần thiết Trong sách giáo khoa tin 10 trong phần xâu kí tự cho học sinh học một số ví dụ ban đầu không phù hợp với học sinh Vì vậy tôi đưa ra một số ví dụ có yêu cầu thấp hơn, đi vào giải quyết từng vấn đề nhỏ, từng câu lệnh Từ đó học sinh dễ dàng nắm bắt kiến thức Kết hợp cả các biện pháp khuyến khích như có những lời nói khích lệ các em trước tập thể lớp, khuyến khích cho điểm cao để học sinh hứng thú và hăng say phát biểu bài hơn Từ đó có thể giải quyết các ví dụ trong sách giáo khoa
2.3 Các giải pháp đã áp dụng để giải quyết vấn đề.
Theo tôi muốn cho giờ học đạt kết quả tốt, học sinh nắm bài tốt và có thể vận dụng nó trong quá trình lập trình giải bài toán trên máy tính bằng chương trình ngôn ngữ bậc cao như Python hay C++… thì cần phải có tiết dạy tốt Vậy theo bạn thế nào là tiết dạy tốt? Theo tôi tiết dạy tốt là học sinh phải hăng hái học tập, hăng say phát biểu bài, giải quyết tốt những vấn đề mà giáo viên đặt ra
Để làm được điều này tôi đã áp dụng một số biện pháp trong tiết dạy nội dung bài kiểu xâu tại các lớp như sau:
Tôi đã thực hiện lồng ghép các phương pháp dạy học vào với nhau trong các tiết dạy
Cho ví dụ phù hợp với nhóm đối tượng học sinh không nhất thiết phải áp dụng ví dụ trong sách giáo khoa
Ứng dụng phương pháp dạy học theo nghiên cứu bài học, học sinh làm việc theo nhóm, thực hành theo nhóm
Tôi đã thực hiện kết hợp dạy lồng ghép kiến thức “Thuật toán”, “Rẽ nhánh”, “ lặp” và “Xâu” trong bài dạy, bên cạnh đó tôi lấy thêm nhiều ví dụ phù hợp với đối tượng học sinh của từng lớp
Tôi nhắc lại kiến thức cho học sinh về lệnh rẽ nhánh, lặp, mảng Sau khi ôn lại kiến thức đã học trên, tôi yêu cầu học sinh giải quyết một số bài toán đơn giản để học sinh có thể thực hiện xây dựng một chương trình đơn giản giải quyết bài toán đơn giản bằng chương trình C++ hoặc Python
Trang 6Sau khi ôn lại kiến thức đã học tôi cho học sinh bắt đầu tìm hiểu kiến thức một số lệnh làm việc với xâu kí tự.
A Nội dung lý thuyết
Nhiệm vụ 1: Xác định thành phần của xâu
‘Hoc python khong kho’
‘chuc cac em hoc tap tot!’
?Tại sao dãy kí tự trên lại đặt trong cặp ‘ ’? (đó là dãy kí tự của bảng mã Unicode) [3]
Nhiệm vụ 2: Tìm hiểu khái niệm kiểu xâu
Từ ví dụ trên yêu cầu học sinh đưa ra khái niệm: Xâu là dãy kí tự trong bảng mã Unicode Xâu có thể coi là danh sách các kí tự nhưng không thay đổi từng kí tự của xâu, chỉ số được đánh số từ 0 [1]
Xâu có thể xem như một mảng một chiều, mỗi phần tử là một kí tự [3]
Nhiệm vụ 3: Một số thao tác với xâu
*) Khai báo xâu
Cú pháp:
<tên biến xâu> = str() Cú pháp: 1. String <tên biến xâu>;
2. String <tên biến xâu>[độ dài xâu];
Ví dụ:
S=str()
Ví dụ: string S;
string S[10];
Nên cho học sinh biết tại sao lại có 2 dạng trên của C++? [3]
Ở dạng 1: không khai báo độ dài lớn nhất của xâu nhưng tự ngầm hiểu độ dài của xâu được nhập vào không quá 255 kí tự được sử dụng đối với các xâu chưa xác định được độ dài Vi dụ như: Họ tên
Ở dạng 2: đối với những xâu đã xác định được độ dài Ví dụ như: Ngày/ tháng/ năm (gồm 10 kí tự)
*) Nhập xâu từ bàn phím
Cho học sinh thực hiện nhập xâu bất kỳ, sau khi đã thực hiện khai báo biến xâu
input
cin>> <tên biến xâu>; nhập xâu không chưa dấu cách
getline(cin,<tên biến xâu>); nhập xâu
có chứa dấu cách
Trang 7*) Cho ra xâu có nội dung vừa nhập.
Khi nhập xâu bằng lệnh cin thì chỉ nhập được từ kí tự đầu tiên đến trước dấu cách, nên chỉ đưa ra màn hình nội dung trước dấu cách
Trang 8*) Gán xâu
<tên biến xâu>=< “nội dung xâu” > <tên biến xâu>=< “nội dung xâu” >
*) Tính độ dài xâu
Thực hiện: Tính độ dài của xâu s
Ví dụ: Cho xâu s có nội dung ‘Viet Nam’
Cú pháp: len (<tên biến xâu>) <tên biến>=<tên biến xâu> length();
Hoặc <tên biến>=<tên biến xâu> size();
Xâu là kiểu string nhưng giá trị tìm được của xâu với hàm length là kiểu số (a là độ dài của xâu – là số lượng kí tự của xâu) [3]
*) phép ghép xâu (+)
Tác dụng: Ghép nhiều xâu thành một xâu
Ví dụ: Nhập vào 2 xâu từ bàn phím Hãy thực hiện ghép 2 xâu thành một xâu có nghĩa
Trang 9
Có thể thực hiện nhập xâu từ bàn phím hoặc thực hiện gán xâu [3]
Chú ý cho học sinh khi xây dựng lệnh thì cần xác định xâu nào gọi ra trước, xâu nào gọi ra sau Nếu xâu nào muốn xuất hiện trước thì gọi ra trước.
Ví dụ 2: Cho xâu ‘Ha Noi’ va xâu ‘Viet Nam’ Ghép hai xâu thành một xâu [3]
Từ hai ví dụ trên, học sinh có thể đưa ra nhận xét gì về thao tác ghép xâu?
Có thể ghép xâu gián tiếp qua biến xâu hoặc trực tiếp bằng xâu kí tự Nếu ghép trực tiếp bằng xâu kí tự thì không cần khai báo biến và không cần nhập xâu từ
Trang 10bàn phím, nếu gián tiếp qua biến thì phải khai báo biến và nhập xâu từ bàn phím
*) So sánh xâu Theo quy tắc: [3]
Hai xâu bằng nhau: Hai xâu giống nhau hoàn toàn
Xâu s1>s2 nếu kí tự đầu tiên khác nhau giữa 2 xâu kể từ trái sang phải trong xâu có mã ASCII lớn hơn (Độ dài 2 xâu bằng nhau)
Xâu s1>s2 khi s2 là đoạn đầu của s1 (Độ dài 2 xâu khác nhau) [3]
Python
C++
*) Tìm vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2:
Thực hiện: Kiểm tra xem vị trí xuất hiện đầu tiên của xâu s2 trong xâu s1 từ vị trí nào
Ví dụ: cho xâu, s1= ‘Viet Nam’, s2= ‘nam’ Kiểm tra xem s2 trong s1 từ vị trí nào