SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA TRƯỜNG THPT YÊN ĐỊNH 3 SÁNG KIẾN KINH NGHIỆM DẠY HỌC LẬP TRÌNH HIỆU QUẢ CHO HỌC SINH LỚP 11 THPT Họ và tên tác giả Lê Tiến Lực Chức vụ Giáo viên SKKN thuộc môn Tin học[.]
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA TRƯỜNG THPT YÊN ĐỊNH SÁNG KIẾN KINH NGHIỆM DẠY HỌC LẬP TRÌNH HIỆU QUẢ CHO HỌC SINH LỚP 11 THPT Họ tên tác giả: Lê Tiến Lực Chức vụ: Giáo viên SKKN thuộc mơn: Tin học THANH HỐ, NĂM 2021 UAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC Nội dung Mở đầu 1.1 1.2 1.3 1.4 Lí chọn đề tài Mục đích nghiên cứu Đối tượng nghiên cứu Phương pháp nghiên cứu Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lý luận 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm 2.3 Các giải pháp sử dụng để giải vấn đề 2.3.1 Rèn luyện tư thuật toán cho học sinh THPT 2.3.2 Phong cách lập trình tốt 2.3.3 Phong cách viết mã nguồn 2.3.4 Tối ưu thực thi mã nguồn 2.3.5 Kiểm nghiệm chương trình với test đầy đủ 2.3.6 Các dạng tốn bồi dưỡng mơn Tin cho HSG THPT 2.4 Hiệu sáng kiến kinh nghiệm Kết luận, kiến nghị UAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỞ ĐẦU 1.1 Lí chọn đề tài Việt Nam đổi cách bản, toàn diện giáo dục để giáo dục Việt Nam phát triển hòa nhập với quốc tế, theo kịp với phát triển vũ bão khoa học - kĩ thuật - công nghệ tri thức lồi người gia tăng nhanh chóng Đổi giáo dục tồn diện lộ trình thực hiện, bước trình đổi đổi phương pháp dạy học nhằm phất huy tính tích cực, chủ đông, sáng tạo học tập để tạo đà cho cấp học thực tiễn sống sau Môn tin học đưa chương trình THPT tích cực thực đổi phương pháp dạy học nhằm mang lại hiệu dạy học giáo dục cao Mặt khác môn Tin học môn khoa học lý thuyết túy học sinh khơng thể nhớ không hiểu Việc giáo viên bắt học sinh ghi nhớ thụ động nội dung sách giáo khoa điều cực khó, cho dù học sinh có cố gắng ghi nhớ bị lẫn lộn Hơn nữa, gặp toán phải sử dụng thuật toán phức tạp nhiều em lúng lúng Việc giải toán thực cần thiết cho em làm học lập trình chương trình Tin học phổ thơng nói riêng việc giải tốn thực tế nói chung Là giáo viên trực tiếp giảng dạy môn Tin học nhiều năm tìm tịi vận dụng phương pháp dạy học tích cực để giúp em tiếp cận giải hiệu học Tin học nói chung tập lập trình nói riêng, có kỹ giúp học sinh lập trình giải tốn ngơn ngữ lập trình bậc cao (cụ thể NNLP Pascal) cho hiệu nhất, hướng đến tính chuyên nghiệp để tạo điều kiện cho em học lên cao nữa, mặt khác học sinh cần rèn luyện tính kiêm trì, chịu khó, chăm làm việc có tổ chức, có kế hoạch học tập lao động sản xuất sau 1.2 Mục đích nghiên cứu Theo tin tức tư vấn chuyên gia giáo dục, việc kết hợp lý thuyết thực hành xu hướng phát triển tất yếu giáo dục để đáp ứng nhu cầu chất lượng nguồn lao động Đây xem phương pháp dạy học Tin học hiệu Thực tế, học sinh phải học q nhiều mơn, cá biệt có em cho Tin học môn học phụ, không thi THPT quốc gia Nếu học lý thuyết chung chung học sinh nắm bắt nhanh quên Bên cạnh Tin học mơn học địi hỏi kỹ sử dụng máy tính thành thạo Chính thế, cần kết hợp đào tạo lý thuyết rèn luyện kỹ thực hành theo hướng chuẩn chuyên nghiệp Đây xem yếu tố cần thiết dạy học môn Tin học Mặt khác qua trình nhiều năm giảng dạy thực tế đơn vị trao đổi đồng nghiệp đơn vị khác, qua trình tìm hiểu học sinh, UAN VAN CHAT LUONG download : add luanvanchat@agmail.com thi học sinh giỏi cấp tỉnh năm qua cho thấy: Một số làm em chưa viết phong cách lập trình có cấu trúc, chưa có phong cách viết mã nguồn chuyên nghiệp, chưa thực tối ưu hóa mã nguồn nên gây khó khăn cho việc hiệu chỉnh phát triển chương trình Hầu hết chương trình em học sinh mang tính trọng tìm output nên đọc chương trình người khác khó hiểu khó hiệu chỉnh theo hướng chuyên nghiệp Để khắc phục tình trạng tơi mạnh dạn áp dụng sáng kiến nhiều năm, với nhiều hệ học sinh cách thường xuyên liên tục trình dạy học học, tiết học, đặc biệt trình bồi dưỡng học sinh giỏi môn Tin học Kết bước đầu đạt đáng khích lệ tự hào, đồng nghiệp học sinh đánh giá cao 1.3 Đối tượng nghiên cứu o o o o o o o o o o Sáng kiến kinh nghiệm nghiên cứu đúc rút kinh nghiệm tập trung vào vấn đề sau: Rèn luyện tư thuật toán cho học sinh THPT Rèn luyện kỹ tìm tịi thuật toán giải toán hiệu Xác định rõ INPUT OUTPUT Mịn dần thuật toán - Rèn luyện phong cách lập trình tốt cho học sinh THPT Quy ước cách đặt tên cho định danh Phong cách viết mã nguồn Tối ưu thực thi mã nguồn Tạo Test kiểm tra tính đắn chương trình Các dạng tốn tiêu biểu bồi dưỡng mơn Tin học cho HSG THPT 1.Các tốn số học 2.Các toán mảng chiều, hai chiều Các toán xử lý xâu 1.4 Phương pháp nghiên cứu Để nghiên cứu đề tài sử dụng số phương pháp sau: Phương pháp nghiên cứu xây dựng sở lý thuyết lập trình Nghiên cứu vấn đề lí luận có liên quan đến đề tài tài liệu thuật toán, toán hay tin học Nghiên cứu tài liệu phương pháp dạy học tích cực mơn Tin học Nghiên cứu nội dung cấu trúc chương trình mơn Tin học THPT Phương pháp khảo sát thực tế, thu thập thông tin học sinh Trao đổi với giáo viên có kinh nghiệm phương pháp dạy học tích cực UAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tìm hiểu khó khăn học sinh giúp đỡ em trình học tập, thực hành phòng máy NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 Cơ sở lí luận Cơ sở việc dạy học môn: Dạy học tác động hai chiều giáo viên học sinh, học sinh chủ thể trình nhận thức, giáo viên người tổ chức hoạt động nhận thức cho học sinh Nếu giáo viên có phương pháp tổ chức tốt, phù hợp học sinh nắm kiến thức dễ dàng, giải tốt tốn, tình cụ thể thực tiễn ngược lại Cơ sở việc nắm kiến thức, kĩ năng: + Về mặt kiến thức: Học sinh phải nắm đơn vị kiến thức sách giáo khoa, học theo chuẩn kiến thức, kĩ Bộ giáo dục đào tạo quy định Đó tảng để em phát triển tư duy, nâng cao lực giải vấn đề + Về kĩ năng: Học sinh biết vận dụng kiến thức học học để giải nhanh gọn dạng tập từ đơn giản đến phức tạp, từ tái kiến thức đến vận dụng kiến thức Điều địi hỏi học sinh phải có phương pháp giải vấn đề cho dạng tập tốt Việc học học sinh cần ý hai mức độ: mức độ vận dụng mức độ sáng tạo Trong mức độ sáng tạo địi hỏi học sinh phải có tố chất, có kĩ tổng hợp, phân tích để từ có cách giải phù hợp 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm Qua giảng dạy môn Tin học trường THPT, thân nhận thấy nhiều học sinh lớp 11 thấy mơn lập trình Pascal khó, khơ khan phức tạp Mới đầu em sợ thấy giải tốn ngồi đơn giản vịng vài giây nhẩm kết cịn lập trình tốn mà phải làm đến hàng chục phút, đưa thuật tốn mà cho kết sai Tâm lý số em cho môn Tin học khơng phải mơn học chính, đại đa số em khơng tích cực học tập chủ yếu thụ động tiếp thu kiến thức theo hướng dẫn giáo viên với tâm lý học để lấy điểm cho hết giờ, hết mà chưa nhận lợi ích thiết thực, lâu dài mơn Xét góc độ lập trình phần học khó học sinh THPT Khó khơng phải tính phức tạp phần học hay phạm vi kiến thức rộng lớn Nếu đem so sánh lập trình mơn Tốn học, Vật Lý, Hóa học lập trình Pascal gọn nhỏ lại khó tiếp cận Lập trình Pascal "khó" học sinh THPT mơi trường lập trình Pascal có giao diện từ khóa tiếng Anh, dịng thơng báo hay UAN VAN CHAT LUONG download : add luanvanchat@agmail.com trợ giúp Nhìn chung học sinh THPT vốn tiếng Anh khơng nhiều, nhiều em cịn yếu tiếng Anh Một vấn đề rào cản việc học sinh THPT tiếp cận với lập trình Pascal là: tư Tốn học em hạn chế phụ thuộc vào Sách Giáo Khoa kỹ phân tích, tổng hợp, xây dựng thuật toán cho toán hay vấn đề cần lập trình chưa tốt Các em thụ động việc tiếp cận toán, xếp tư duy, xây dựng thuật giải Từ thực tế trên, trình dạy học băn khoăn, trăn trở làm nâng cao chất lượng kỹ lập trình cho học sinh lớp 11 THPT Việc tiếp cận với môn học khó khăn, phải làm nhiều lần thực hành nhiều tiết em hiểu việc nhập xuất liệu Do khó khăn để em hình thành kỹ viết chương trình Nhất năm gần Ngành giáo dục thành lập đội tuyển tham dự thi học sinh giỏi mơn Tin học,… Điều thúc đẩy tơi q trình giảng dạy phải nghiên cứu tìm tịi biện pháp, kinh nghiệm để giúp cho em có đam mê học tập lập trình, giúp em biết quy trình lập trình định hướng cho học sinh cách để trở thành nhà lập trình cần phải nâng cao kỹ lập trình NNLT Pascal theo hướng chuyên nghiệp Giúp em hiểu, u thích lập trình học lập trình hứng thú, phấn khởi Một số học sinh có suy nghĩ sai lầm Tin học mơn học giải trí để lên mạng, xem phim, chơi game, nghe nhạc… mà quên tin học có nhiều ứng dụng quan trọng khác đời sống Do khó khăn đưa Tin học vào trường THPT xuất phát từ việc phát triển toàn diện cho học sinh thêm vào qua mơn học hình thành phẩm chất lao động chăm chỉ, kiên trì, chịu khó, … Những khó khăn đặt nhiều thách thức cho người trực tiếp giảng dạy môn học tơi Từ tơi nhận thấy cần có giải pháp cụ thể để nâng cao chất lượng giảng dạy môn Tin học trường THPT để mơn học thực có ý nghĩa giảng dạy học tập - 2.3 Giải pháp sử dụng 2.3.1 Rèn luyện tư thuật toán cho học sinh THPT Tại phải rèn luyện tư thuật toán cho học sinh THPT Trong sách tiếng NNLT Pascal ( viết năm 1970), tác giả N.With viết dòng từ trang đầu: CHƯƠNG TRÌNH= THUẬT TỐN +CẤU TRÚC DỮ LIỆU Như thuật toán phần quan trọng bậc để tạo nên chương trình Nhưng cấp học học sinh chưa làm quen với khái niệm thuật tốn Do học lập trình khó khăn ban đầu học sinh UAN VAN CHAT LUONG download : add luanvanchat@agmail.com tìm thuật toán để giải toán cho Một học sinh muốn tiến sâu, tiến xa tương lai phải có tư thuật toán tốt Bởi làm quen rèn luyện tư thuật toán cho học sinh bắt đầu học lập trình yêu cầu thiết yếu Để thực điều này, từ cịn học lớp 10 đặc biệt chương trình lớp 11, GV nên ý rèn luyện cho em vấn đề sau: Từ ý tưởng đến hình thành tư thuật toán Thuật toán từ đơn giản đến phức tạp, Từ toán quen thuộc đến phát triển tốn khó Từ thuật tốn phải kết hợp với cấu trúc liệu hợp lý Và cuối thiết kế thuật tốn hồn chỉnh tối ưu nhất, dễ lập trình Khi em thành thạo GV nâng cao yêu cầu tìm thuật tốn khác so sánh lựa chọn thuật tốn phù hợp Ví dụ: Các dạng tốn bồi dưỡng mơn tin cho HSG THPT Nhóm tốn lập trình thường phân loại theo thuật toán, theo cấu trúc liệu dùng để giải Ở bậc THPT dạng toán phong phú nhiều mở rộng CTDL song song với việc mở rộng thuật toán Ở bậc trung THPT tốn thường sử dụng vịng lặp, sử dụng kiến thức toán UCLN , BCNN, số nguyên tố, chia hết số ngun,…Các dạng tốn thường gặp là: Nhóm tốn số học: Nhóm tốn thao tác mảng chiều Nhóm tốn xử lý xâu Các toán khác Các toán số học Để giải toán số học giáo viên cần cho học sình ứng dụng nhuần nhuyễn kiến thức số học THPT chủ yếu dựa vào phép tốn DIV, MOD: Thuật tốn tìm UCLN số nguyên dương: Cho số nguyên dương m, n Tìm UCLN(m,n) Học sinh thường dùng thuật toán Thuật toán 1: Sử dụng phép trừ liên tục số nhau: + Nhập m, n + While mn If m>n then m:=m-n Else n:=n-m; +UCNN:=n; Thuật tốn chạy chậm: Ví dụ với m=1000000000, n=1 phải chạy tỷ phép toán Thuật toán 2: (Đối với HSG nên hướng em sử dụng thuật toán này) + Nhập m, n UAN VAN CHAT LUONG download : add luanvanchat@agmail.com + + Ở While n Begin r:= m mod n m:=n; n:=r; End; +UCLN:=m Với thuật toán m=1000000000, n=1, vài phép tốn để tính UCLN(m,n) Để tìm UCLN dãy a1, a2,…,an, cần lập hàm: FUNCTION UCLN(a, b: longint): longint; Khi + d:=a1; for i:=2 to n Begin b:=ai; d:=UCLN(d, b);End; Thuật tốn tìm BCNN số: Ta có BCNN(m,n)= (m * n) div UCLN(m, n) học sinh thường mắc sai lầm sau : Sai lầm : d :=UCLN(m, n) ; BCNN :=m*n div d ; Đúng phải : BCNN :=m * n (lưu tích m.n) d := UCLN(m, n) ; BCNN := BCNN div d Sai lầm : BCNN(m, n, k) = m*n*k div UCLN(m, n k) Để tìm BCNN dãy số nguyên dương a1, a2, …,an (n>=2) BCNN:=a1; d:=a1; For i:=2 to n n Begin b:=ai BCNN:=BCNN*b; d:=UCLN(BCNN,b); BCNN:=BCNN div d ; End ; 2.3.2 Phong cách lập trình tốt Để có phong cách lập trình tốt ngồi việc tn theo quy chuẩn, cần phải tuân theo quy ước Cơ sở cho việc cài đặt chương trình hiệu là: Cách trình bày rõ ràng, sáng sủa bật cấu trúc logic chương trình Một phần nhỏ lập trình để máy tính đọc Phần lớn viết mã lệnh cho chương trình chạy theo chức để người dễ đọc, dễ hiểu Lợi ích việc trình bày cẩn thận: Thể tốt cấu trúc lôgic mã lệnh UAN VAN CHAT LUONG download : add luanvanchat@agmail.com - Cải thiện khả đọc Bảo đảm xác thay đổi Các lợi ích hệ lợi ích Chương trình mắc lỗi dễ sửa chữa mắc lỗi Tiết kiệm thời gian sửa lỗi Tăng khả làm việc theo nhóm, Quy ước cách đặt tên cho định danh Thông thường tùy theo ngơn ngữ mơi trường lập trình, người viết chương trình chọn cho phong cách quán việc đặt tên cho định danh Tuy nhiên, nên đặt cho thuận tiện, dễ đọc, dễ nhớ dễ làm việc, có số quy tắc cần quan tâm đặt tên sau: Đặt tên cho biến Tên biến nên thể ý nghĩa: thông thường biến nguyên i, j, k dùng làm biến lặp; x, y dùng làm biến lưu tọa độ… Cịn biến lưu trữ khác nên đặt tên gợi nhớ: Biến đếm số lần dùng “Count” hay “Sluong”; biến trọng lượng “weight” hay “Tluong”… Nếu đặt ngắn “c” cho biến đếm hay “w” cho biến trọng lượng sau nhìn vào chương trình khó hiểu dễ nhầm lẫn, khơng nên q dài dịng “Demsoluong” hay “Tinhtrongluong” dùng rườm rà, tốn thời gian viết Đặt tên hằng: Tất ký tự viết hoa Ví dụ: Const MAXN = 10000; INPUT = ‘Baitap.inp’; Đặt tên cho chương trình con: Tên chương trình thường bắt đầu chữ hoa Vì chương trình thường thực chức nên tên hay bắt đầu động từ Ví dụ: TimMax( ); GetNum( ); Ví dụ cụ thể qua bái toán sau Kiểm tra số nguyên tố Cho số nguyên P Hỏi P có phải số ngun tố khơng? Nhiều học sinh lập thuật toán đếm số ước P Nếu số ước P kết luận P số ngun tố Thuật tốn khơng sai chậm FUNCTION Ngto(P:Integer): Boolean; Var NT:Boolean; I:integer; Begin NT:=P>1; For i:=2 to Trunc(Sqrt(P)) If P mod I =0 then Begin NT:=False; Break End; Ngto:=NT; End; UAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đếm số chữ số số, tính tổng chữ sơ Bài tốn : Nhập số ngun n Số n có chữ sơ Tính tổng chữ số n + +TongCS:=0; SoCS:=0; While n0 Begin Inc(SoCS); TongCS:=TongCS+ n mod 10; n := n div 10 ; End ; Biểu diễn số tự nhiên n từ hệ đếm thập phân qua hệ đếm khác ngược lại Bài toán : Cho n số nguyên dương biểu diễn hệ thập phân Hãy biểu diễn n hệ đếm q – phân ( 11 Tìm số k ngun tố khơng vượt q n trường hợp sau: a) k lớn b) k có tổng chữ số lớn c) k số đối xứng lớn ( k số đối xứng đọc số từ trái qua phải hay từ phải qua trái Ví dụ: số 373, 3, 979…là số đối xứng) Input cho tệp NT.INP:- gồm dòng ghi số nguyên n (1