Đang tải... (xem toàn văn)
Sáng kiến kinh nghiệm THPT Phát triển tư duy lập trình và khắc phục sai lầm cho học sinh lớp 11 thông qua sử dụng cấu trúc rẽ nhánh chủ yếu tập trung vào nghiên cứu những sai lầm thường mắc phải của các em khi sử dụng câu lệnh rẽ nhánh. Hệ thống các bài tập nghiên cứu quen thuộc, các bài toán gần gũi với thực tế, có mở rộng bài toán, có phát triển bài toán, có áp dụng liên môn giúp học sinh yêu thích môn học và phát triển tư duy lập trình.
MỤC LỤC PHẦN I : ĐẶT VẤN ĐỀ LÝ DO CHỌN ĐỀ TÀI Căn cứ vào công văn số 3627/SGDĐTGDPT, ngày 29/8/2018 Sở Giáo dục và Đào tạo về việc Hướng dẫn thực hiện nhiệm vụ giáo dục trung học năm học 20182019 và hướng dẫn hoạt động chun mơn bộ mơn Tin học cấp THPT của Sở Giáo dục Đào tạo Hà Nội. Đổi mới hình thức tổ chức dạy học ngồi việc tổ chức cho học sinh thực hiện các nhiệm vụ học tập ở trên lớp, cần coi trọng giao nhiệm vụ và hướng dẫn học sinh học tập ở nhà. Căn cứ vào kế hoạch giảng dạy mơn Tin 11 của trường THPT Lưu Hồng về số lượng, nội dung các tiết bài tập và thực hành ở các chương III, chương IV. Với tình hình thực tế giảng dạy mơn Tin trường THPT Lưu Hồng, tơi nhận thấy học sinh chưa có hứng thú với mơn học, một phần vì mơn Tin học 11 q khó đối với các em, một phần vì tư duy giài tốn chưa cao do đầu chất lượng tuyển sinh vào 10 cịn thấp. Để góp phần nâng cao chất lượng giờ dạy, việc thu hút học sinh tích cực giải tốn bằng máy tính và phát triển tư duy lập trình của học sinh là rất cần thiết. Câu lệnh rẽ nhánh và câu lệnh ghép là một nội dung tiêu biểu của phần lập trình. Thực tế khi sử dụng câu lệnh này để giải bài tập các em thường mắc phải nhiều lỗi sai, đặc biệt là xác định biểu thức logic và khơng sử dụng câu lệnh ghép trong trường hợp cần thiết Sau khi tìm hiểu các ngun nhân và những lỗi học sinh hay mắc phải khi lập trình giải tốn có sử dụng cấu trúc rẽ nhánh, tơi tìm giải pháp khắc phục củng cố, khắc sâu kiến thức thơng qua việc hướng dẫn và giao bài tập cho học sinh hồn thiện sản phẩm ở nhà MỤC ĐÍCH NGHIÊN CỨU Đề tài này chủ yếu tập trung vào nghiên cứu những sai lầm thường mắc phải của các em khi sử dụng câu lệnh rẽ nhánh. Hệ thống các bài tập nghiên cứu quen thuộc, các bài tốn gần gũi với thực tế, có mở rộng bài tốn, có phát triển bài tốn, có áp dụng liên mơn giúp học sinh u thích mơn học và phát triển tư duy lập trình 3/20 Đề tài có ý nghĩa lớn đối với việc đổi mới phương pháp giảng dạy. Phát huy tính tích cực của học sinh, tạo sự hứng thú cho học sinh, khuyến khích học sinh tự tìm tịi, sáng tạo trong q trình lĩnh hội tri thức. ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU VÀ THỜI GIAN THỰC HIỆN ĐỀ TÀI I.3.1. Đối tượng nghiên cứu Những lỗi mà học sinh lớp 11 thường mắc phải khi sử dụng cấu trúc rẽ nhánh để giải toán I.3.2. Phạm vi nghiên cứu Bài tập về cấu trúc rẽ nhánh. I.3.3. Thời gian thực hiện đề tài Đề tài được viết và áp dụng trong Năm học 20182019 Q TRÌNH THỰC HIỆN ĐỀ TÀI Tình hình thực tế trước khi thực hiện đề tài Sau khi dạy xong bài 9 : Cấu trúc rẽ nhánh,. Tơi đã cho khảo sát lớp 11A1, 11A2 Cịn nhiều học sinh mắc lỗi sai khi sử dụng câu lệnh rẽ nhánh do xác định biểu thức logic khơng đúng, cịn nhầm lẫn và nhớ sai cú pháp. Chưa hiểu rõ về cấu trúc rẽ nhánh nên khơng viết câu lệnh khơng đúng hoặc khơng sử dụng câu lệnh ghép khi cần thiết Tư duy lập trình thấp, kỹ năng giải tốn chưa cao Học sinh qn kiến thức cũ. Cơ sở vật chất cịn thiếu số lượng máy tính thực hành cho học sinh ít, số lượng học sinh có máy tính riêng ở nhà chưa nhiều. Các yếu tố này làm ảnh hưởng đến chất lượng, hiệu quả của tiết học Số liệu điều tra trước khi thực hiện đề tài Lớp Xếp loại Giỏi Khá 4/20 Trung Bình Yếu Kém 11A1 (Thực nghiệm) 16 0 11A2 (Đối chứng) 14 10 0 5/20 PHẦN 2: GIẢI QUYẾT VẤN ĐỀ Sáng kiến kinh nghiệm : “ Phát triển tư duy lập trình và khắc phục sai lầm cho học sinh 11 thơng qua sử dụng câu lệnh rẽ nhánh” Sáng kiến gồm các nội dung chính : +Giới thiệu về cấu trúc rẽ nhánh + Phân tích các lỗi của học sinh hay mắc phải khi sử dụng cấu trúc rẽ nhánh + Đề xuất giải pháp khắc phục +Thử nghiệm sư phạm II.1. GIỚI THIỆU VỀ CẤU TRÚC RẼ NHÁNH II.1.1 Dạng thiếu Cú pháp: If Then ; Điều kiện : là biểu thức logic Câu lệnh : Là một câu lệnh của Pascal Nếu điều kiện đúng (có giá trị true) thì câu lệnh thực hiện, ngược lại câu lệnh sẽ bị bỏ qua II.1.2 Dạng đủ Cú pháp: If Then Else ; Điều kiện : là biểu thức logic Câu lệnh 1, câu lệnh 2: Là một câu lệnh của Pascal Nếu điều kiện đúng thì câu lệnh 1 được thực hiện, ngược lại câu lệnh 2 6/20 được thực hiện II.1.3 Câu lệnh ghép Theo cú pháp, sau từ khóa Then hoặc ELSE phải là một câu lệnh. Nhưng trong nhiều trường hợp, các thao tác sau những tên dành riêng đó khá phức tạp, địi hỏi khơng phải là một mà là nhiều câu lệnh để mơ t. Trong trường hợp như vậy ngơn ngữ lập trình cho phép gộp một dãy câu lệnh thành một câu lệnh ghép Câu lệnh ghép của Pascal có dạng : Begin ; End; II.2 CÁC LỖI CỦA HỌC SINH THƯỜNG MẮC VÀ CÁCH KHẮC PHỤC II.2.1 Lỗi về cách viết và xác định biểu thức logic Loại biểu thức nhất thiết phải có mặt trong câu lệnh rẽ nhánh đó là biểu thức Logic, vấn đề viết biểu thức trong ngơn ngữ lập trình Pascal phải tn thủ đúng các quy tắc của ngơn ngữ lập trình, có những bài tốn các em phải xác định biểu thức logic, việc này khơng phải dễ đối với các em. Điều này cịn phụ thuộc vào khả năng tư duy về mặt tốn học Lỗi viết dấu chấm phẩy trước Else Do số lượng máy tính của trường rất ít, nên nhiều tiết bài tập các em học phịng máy chiếu hoặc làm bài trên giấy vì vậy cần phải rèn cho các em cách viết cẩn thận. Ví dụ 1: Viết câu lệnh rẽ nhánh tính a) Tính Lỗi biểu diễn sai phép tốn trong ngơn ngữ pascal Chẳng hạn : x*x thì học sinh vẫn viết là: x.x , lỗi này nếu các em thực hành trên phịng máy thì chương trình dịch sẽ thơng báo nhưng các em mất thời gian sửa và có em cịn khơng biết cách sửa. 7/20 Lỗi thiếu dấu ngặc hoặc khơng sử dụng phép tốn logic. Chẳng hạn tính z=x+y nếu và Thì các em viết như sau : if , then z:=x+y; Cách khắc phục : Dự kiến trước những lỗi sai của học sinh dễ mắc : Lỗi biểu biễn biểu thức Tốn trong ngơn ngữ Pascal, lỗi đặt dấu chấm phẩy khơng đúng chỗ, lỗi viết phép tốn logic …., giáo viên u cầu học sinh phân tích kỹ bài tốn trong Tốn học, sau đó u cầu các em biểu diễn biểu thức trong ngơn ngữ Pascal, nhấn mạnh cho học sinh + Phép nhân thay bởi dấu sao * + Phép chia thay bởi dấu gạch chéo / +Phép tốn logic và (and), hoặc (or) +Khi xét đồng thời nhiều biểu thức , phải có cặp đóng mở ngoặc cho từng biểu thức. Kết quả : If then ; If () and () then ; If () and () then ; u cầu học sinh viết lại bằng cách sử dụng cấu trúc rẽ nhánh dạng đủ và thay biểu thức bằng và so sánh kết quả với cùng một bộ Test Tơi u cầu học sinh đề xuất một bộ Test : Có đủ cả 3 trường hợp sảy ra mà đã biết trước kết quả, mục đích là để học sinh tự kiểm tra lại tính đúng đắn của chương trình. Sau đây là một bộ Test tiêu biểu: Input x Output y z= b) Tính Học sinh dễ mắc lỗi khi xác định và viết biểu thức logic : 8/20 +Lỗi thứ nhất: Về mặt Tốn học, các em nhầm lẫn Hình trịn và đường trịn nên chỉ đưa ra được điều kiện, thậm chí có học sinh cịn qn cả cơng thức tính khoảng cách giữa hai điểm +Lỗi thứ hai : Có dấu chấm phẩy trước từ khóa Else , Lỗi này do sử dụng cú pháp rẽ nhánh dạng đủ sai. Cụ thể như sau : If then z:=abs(x)+abs(y) ; Else z:=x+y; Cách khắc phục: So sánh sự khác nhau nhau giữa hai dạng rẽ nhánh, đặc biệt trước từ khóa Else khơng có dấu chấm phẩy,về kiến thức Tốn, học sinh tìm hiểu kiểm tra điều kiện để một điểm thuộc hình trịn tâm I(a,b) bán kính r ? giáo viên vẽ đường trịn ra, kiểm tra học sinh cách tính cơng thức khoảng cách giữa hai điểm I(a,b) và M(x,y) ? +Biểu thức trong Tốn học : Điểm M(x,y) thuộc hình trịn tâm I(a,b) bán kính r khi +u cầu học sinh : Viết biểu thức trên trong ngơn ngữ Pascal và sử dụng cấu trúc rẽ nhánh để viết câu lệnh kiểm tra vị trí của điểm M có thuộc hình trịn khơng. + Nhấn mạnh cho học sinh nếu sử dụng cấu trúc rẽ nhánh dạng đủ thì trước Else khơng có dấu chấm phẩy Kết quả: Cách 1: Sử dụng cấu trúc rẽ nhánh dạng thiếu If then z:=abs(x)+abs(y) ; If then z:=x+y; Cách 2: Sử dụng cấu trúc rẽ nhánh dạng đủ If then z:=abs(x)+abs(y) Else z:=x+y; Bài tập giao cho học sinh theo nhóm: Về hồn thiện chương trình, + Nhập vào tọa độ điểm M(x,y), tâm I(a,b), bán kính R + Tính và đưa ra giá trị của z 9/20 + Xây dựng bộ Test và nộp báo cáo kết quả thử nghiệm Ví dụ 2: Viết câu lệnh rẽ nhánh để kiểm tra 3 số ngun dương a,b,c có phải 3 cạnh của một tam giác khơng ? Lỗi biểu thức logic : Trường hợp 1: Biểu thức logic kiểm tra chưa đúng, chưa xét được hết các trường hợp, lỗi này thuộc về mặt tư duy tốn học. Lỗi này chương trình dịch khơng thể phát hiện và thơng báo, chỉ khi chạy chương trình với các bộ Test cụ thể học sinh mới phát hiện ra sai. If a+b>c then write(‘ Ba so a,b,c la do dai ba canh cua tam giac ’) Else write(‘ Ba so a,b,c khong la do dai ba canh cua tam giac ’); Trường hợp 2: Học sinh xác định được biểu thức logic rồi nhưng khi trình bày sai, chương trình dịch báo lỗi khơng sửa được. Đây là lỗi thiếu ngoặc, cụ thể học sinh viết như sau: If a+b>c and a+c>b and b+c>a then write(‘ Ba so a,b,c la do dai ba canh cua tam giac ’) Else write(‘ Ba so a,b,c khong la do dai ba canh cua tam giac ’); Cách khắc phục lỗi : Kiểm tra về kiến thức Toán học : Điều kiện để 3 số nguyên dương là độ dài 3 cạnh của một tam giác ? Điều kiện : a+b>c và a+c>b và b+c>a + GV phải nhấn mạnh : Ba điều kiện đồng thời thỏa mãn: (a+b>c) và (b+c>a) và (a+c>b). Biểu thức logic nhận giá trị True khi cả 3 điều kiện thỏa mãn Dự kiến câu hỏi của học sinh : Học sinh có thể thắc dùng hiệu hai số bất kỳ trong 3 số nhỏ hơn số cịn lại, cách này cũng được nhưng các em nên dùng tổng 2 số lớn hơn số cịn lại. Đề xuất một bộ Test tiêu biểu để kiểm tra tính đúng đắn của chương trình? +GV chuẩn bị một chương trình sai có câu lệnh sau If a+b>c then write(‘ Ba so a,b,c la do dai ba canh cua tam giac ’) 10/20 Else write(‘ Ba so a,b,c khong la do dai ba canh cua tam giac ’); Sau đó chạy thử cho học sinh, đưa vào một bộ Test cụ thể như : a=1, b=3, c=2 và cho học sinh nhận xét về kết quả mặc dù thỏa mãn điều kiện a+b>c nhưng bộ 3 số đó có là độ dài của một tam giác khơng? Từ đó giáo viên nhấn mạnh cho học sinh: Đối với mỗi bài tốn, việc xác định biểu thức logic rất quan trọng. Có những biểu thức logic bao gồm đồng thời nhiều điều kiện. Khi đó chúng ta phải sử dụng phép tốn logic và (AND) Giao nhóm học sinh về nhà: + Hồn thiện chương trình + Xây dựng một bộ Test tiêu biểu Ví dụ 3: Viết chương trình giải bài tốn dạng (trong đó a,b là các số ngun nhập vào từ bàn phím) Lỗi học sinh thường mắc phải : Học sinh dễ nhầm lẫn với việc giải phương trình bậc nhất một ẩn nên thường khơng xét tới khả năng a=0 nên học sinh đưa ln ra nghiệm x=b/a. Lỗi này do học sinh qn kiến thức tốn học. Cách khắc phục : u cầu học sinh viết câu lệnh rẽ nhánh, xây dựng bộ Test + Nếu a=0 và b=0 thì phương trình có vơ số nghiệm + Nếu a=0 và b0 thì phương trình vơ nghiệm + Nếu a0 thì phương trình có nghiệm duy nhất x=b/a. Kết quả mong đợi : If (a=0) and (b=0) then write(‘phuong trinh co vo so nghiem ’) ; If (a=0) and (b0) then write(‘phuong trinh vo nghiem ’) ; If a0 then write(‘phuong trinh co nghiem duy nhat x=’, b/a :2:1) ; Học sinh phải hiểu rõ hoạt động của câu lệnh rẽ nhánh dạng thiếu, dạng đủ và có thể sửa lại bằng cách sử dụng cấu trúc rẽ nhánh dạng đủ 11/20 If a0 then write(‘phuong trinh co nghiem duy nhat x=’, b/a :2:1) Else If b0 then write(‘phuong trinh vo nghiem ’) Else wite(‘phuong trinh co vo so nghiem ’) ; Hướng dẫn cho học sinh xây dựng bộ Test tiêu biểu, có đủ các trường hợp mà đã biết trước kết quả Ví dụ một bộ Test tiêu biểu sau: a Input b Output Phuong trinh vo nghiem 0 Phuong trinh co vo so nghiem 6 Phuong trinh co nghiem duy nhat x=3.0 II.2.2 Lối khơng sử dụng câu lệnh ghép khi cần thiết Các lỗi thường gặp khi lập trình sử dụng câu lệnh rẽ nhánh là khơng tạo câu lệnh ghép trong trường hợp cần thiết, đây là lỗi mà các em khó phát hiện vì chương trình dịch khơng phát hiện giúp được. Khi có nhiều câu lệnh IF liền nhau thường tạo ra nhiều tiềm ẩn dẫn tới lỗi. Học sinh thường mắc lỗi khơng sử dụng câu lệnh ghép khi cần thiết. Ví dụ 1: Có sẵn chương trình nhập vào 3 số thực a,b,c . Kiểm tra 3 số đó có là 3 cạnh của một tam giác khơng ? u cầu học sinh sửa lại chương trình : Nếu là 3 cạnh của một tam giác hãy tính chu vi và diện tích tam giác đó ? Bài tốn này quen thuộc với học sinh nhưng khi sửa lại chương trình, lỗi học sinh khơng sử dụng câu lệnh ghép: If (a