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 lớp 11 thông qua sử dụng cấu trúc rẽ nhánh

docx 22 trang sk11 06/07/2024 970
Bạn đang xem 20 trang mẫu của tài liệu "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 lớp 11 thông qua sử dụng cấu trúc rẽ nhánh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

Tóm tắt nội dung tài liệu: 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 lớp 11 thông qua sử dụng cấu trúc rẽ nhánh

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 lớp 11 thông qua sử dụng cấu trúc rẽ nhánh
 SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ NỘI
 -------------------
 MÃ SKKN
 SÁNG KIẾN KINH NGHIỆM
 TÊN ĐỀ TÀI
“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”
 Lĩnh vực/Môn : Tin Học 
 Cấp học : THPT
 Tác Giả : Nguyễn Thị Mỹ Hạnh
 Đơn vị công tác : Trường THPT Lưu Hoàng 
 NĂM HỌC 2018-2019 PHẦN I : ĐẶT VẤN ĐỀ
I.1. LÝ DO CHỌN ĐỀ TÀI
 Căn cứ vào công văn số 3627/SGDĐT-GDPT, ngày 29/8/2018 của 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 2018-2019 và hướng dẫn hoạt động chuyên 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 
ngoà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 Hoà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 Hoà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 quá 
khó đối với các em, một phần vì tư duy giài toá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 toá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 nguyên nhân và những lỗi học sinh hay mắc phải khi 
lập trình giải toá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 hoàn thiện sản phẩm ở nhà .
I.2. 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 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.
 Đề 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 quá trình lĩnh hội tri thức. 
 1/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 ;
 Đúng
 Điều kiện Câu lệnh
 Sai
 Đ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 sẽ được 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 ;
 Sai Đúng
 Câu lệnh 2 Điều Câu lệnh 1
 kiện
 Điều kiện : là biểu thức logic.
 3/20 - Lỗi thiếu dấu ngặc hoặc không sử dụng phép toán logic. 
 Chẳng hạn tính z=x+y nếu x2 y2 1 và y x
 Thì các em viết như sau : if x * x y* y 1 , y x 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 như : Lỗi 
 biểu biễn biểu thức Toá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 toán logic ., giáo viên yêu cầu học sinh 
 phân tích kỹ bài toán trong Toán học, sau đó yê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 toá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 x * x y* y 1 then z x * x y* y ;
 If ( x * x y* y 1) and ( y x ) then z x y ;
 If ( x * x y* y 1) and ( y x ) then z 0.5 ;
- Yê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 x * x y* y 1 bằng sqr(x) sqr(y) 1 và so sánh kết quả với 
cùng một bộ Test.
- Tôi yê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
 Output
 x y
 1 3
 1 z=
 2 2
 1 1 1
 z 
 2 2 2
 3 2 z 0.5
 5/20 If sqrt((x a)*(x a) (y b)*(y b)) r then z:=abs(x)+abs(y) 
 Else z:=x+y; 
Bài tập giao cho học sinh theo nhóm: Về hoà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
+ 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ố nguyên 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 toá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? 
 7/20 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:
 Input
 Output
 a b
 0 1 Phuong trinh vo nghiem
 0 0 Phuong trinh co vo so nghiem
 2 - 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 ? 
Yê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 toá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 < b+c) and (b < a+c) and (c < a+b) Then 
 P := (a + b + c) / 2 ;
 S := Sqrt(p*(p-a)*(p-b)*(p-c)) ;
+ Sau từ khóa Then muốn thực hiện hai câu lệnh tính P và S nên phải sử dụng 
câu lệnh ghép, và hai câu lệnh này chỉ được thực hiện khi biểu thức (a < b+c) 
and (b < a+c) and (c < a+b) nhận giá trị True. 
Cách khắc phục:
 9/20 II.2.3 Phát triển tư duy lập trình cho học sinh thông qua việc phát triển bài 
toán đã biết.
 a) Lựa chọn và đưa vào bài tập phù hợp và có tính kế thừa, phát triển bài toán 
 mới nhưng quen thuộc với học sinh, phát huy tính tìm tòi sáng tạo của học 
 sinh. 
 Ví dụ 1: Ở ví dụ 3 sách giáo khoa trang 40, các em đã biết viết câu lệnh rẽ 
 nhánh để tìm Max của hai số a,b
 If a > b Then Max := a Else Max:=b; 
 Câu hỏi 1: Đối với bài toán tìm Max của 3 số a, b, c. thì các em sẽ thêm lệnh 
 nào?
 học sinh dễ dàng nói thêm lệnh. 
 IF max < c Then max := c ;
 Kết quả mong đợi :
 IF a > b Then Max := a Else max := b ;
 IF max < c Then Max := c ;
 Câu hỏi 2: Đối với bài toán tìm Max của 4 số : a, b, c, d thì các em sẽ thêm 
 lệnh nào? học sinh dễ dàng nói thêm lệnh. 
 IF max < d Then max := d ; 
 - Tuy nhiên với bài toán tìm Max của nhiều số thì phải có công cụ khác mà ở 
 các bài học sau các em sẽ biết, điều này gợi mở vấn đề cho học sinh tìm tòi kiến 
 thức mới, xây dựng lòng ham mê học tập của các em. 
 - Chương trình sau được cấu trúc lại từ các lệnh đã có ở chương trình trước. 
 Được bổ sung câu lệnh mới làm cho tính hợp lí, tính khoa học của lập trình 
 được nâng cao. học sinh có dịp nhìn lại chương trình cũ, ôn lại kiến thức cũ, so 
 sánh chương trình mới với chương trình cũ để thấy cái hay của chương trình 
 mới, cái hạn chế của chương trình cũ.
Câu hỏi 3: Hãy sửa lại chương trình trên thành bai toán viết chương trình 
nhận vào 2 số nguyên không âm a và b viết lên màn hình 2 số đó theo thự tự 
tăng dần.
 • Giao cho nhóm học sinh về nhà: Sửa chương trình và chọn một bộ Test tiêu 
 biểu.
Kết quả:
Program sapxep_2so;
 Uses Crt ;
 Var a , b : Word ;
Begin
 11/20 If a > b Then 
 Begin 
 tg := a ; 
 a := b ; 
 b := tg; 
 End ;
 Writeln ( a : 7, b : 7, c : 7 );
 End.
 Ở chương trình 1 và trình bày cách đã dùng để giải quyết vấn đề là so sánh 
giá trị của hai biến, nếu biến ở trước lớn hơn biến ở sau thì tráo đổi giá trị của 
chúng cho nhau. Việc làm trên còn có cách hiểu khác là đưa giá trị lớn hơn trong 
hai số về số đứng sau.
 Có ba biến. Vậy theo cách tiếp cận như trên, phải đưa số lớn nhất về c, số 
lớn thứ hai về b.
Ví dụ 2: Trong bài thực hành số 2 trang 49: Kiểm tra bộ 3 số nguyên dương 
a,b,c có phải là bộ số pitago không?
 a2 b2 c2
 2 2 2
- Bộ ba số a,b,c là bộ pitago nếu thỏa mãn điều kiện : b c a
 2 2 2
 a c b
- Phát triển bài toán : Yêu cầu học sinh viết chương trình thành bài toán viết 
chương trình nhập vào 3 số nguyên dương a,b, c là 3 cạnh của tam giác. Hãy 
kiểm tra và đưa ra thông báo thông báo tam giác đó có là tam giác vuông, tam 
giác cân, tam giác đều hay tam giác thường? Đề xuất một bộ Test tiêu biểu. 
- Học sinh đã thực hiện trong bài tập và thực hành số 2-Sách giáo khoa trang 49. 
Các em đã biết câu lệnh rẽ nhánh để kiểm tra như sau:
 If (a * a b *b c *c) or (a * a c *c b * b) or (b* b c *c a *a) 
 Then write(‘Ba so la bo pitago’); 
Vì vậy học sinh dễ dàng sử dụng câu lệnh rẽ nhánh trên để áp dụng giải bài toán 
- Phân tích tìm lỗi cho học sinh: Cách để nhận dạng tam giác vuông, cân, 
đều,học sinh thường nhầm lẫn khi xét tam giác chỉ vuông ở một góc mà không 
xét hết khả năng vuông ở hai góc còn lại. Khi xét tam giác cân thì cũng lỗi chỉ 
xét cân tại một đỉnh mà không xét hết trường hợp cân tại hai đỉnh còn lại. 
- Kết quả:
 13/20

File đính kèm:

  • docxsang_kien_kinh_nghiem_phat_trien_tu_duy_lap_trinh_va_khac_ph.docx