Đặc biệt làtrong chương trình sách giáo khoa SGK Tin học lớp11 bậc trung họcphổ thông THPT, các nhà biên soạn sách đã đưa vào các chương bài giúp họcsinh tiếp cận được với ngôn ngữ lập t
Trang 1MỤC LỤC
1 Mở đầu 2
- Lý do chọn đề tài : 2
- Mục đích nghiên cứu: 2
- Đối tượng nghiên cứu: 3
1.4 Phương pháp nghiên cứu: 3
2 Nội dung 3
2.1 Cơ sở lí luận: 3
2.2 Thực trạng vấn đề: 3
2.3 Một số kinh nghiệm khắc phục khó khăn của học sinh khi học lập trình Pascal – Tin học 11 5
2.3.1 Kinh nghiệm khắc phục những lỗi sai cú pháp cơ bản : 5
2.3.2 Kinh nghiệm khắc phục những lỗi sai về ngữ nghĩa 13
2.3.3 Kinh nghiệm giúp học sinh lập trình giải bài toán trong toán học hoặc trong thực tế 16
2.4 Hiệu quả của sáng kiến kinh nghiệm: 19
3 Kết luận 19
Trang 21 Mở đầu
1.1 Lý do chọn đề tài
Chúng ta đang sống ở thế kỉ XXI là thế kỉ của Công nghệ thông tin
và truyền thông Sự phát triển mạnh mẽ như vũ bão của tin học đã làm cho
xã hội có nhiều nhận thức mới về cách tổ chức các hoạt động Vì vậy việc trang
bị những kiến thức Tin học là một vấn đề có ý nghĩa và tầm quan trọng rất lớnđối với quá trình đào tạo nhân lực, bồi dưỡng nhân tài cho đất nước
Xác định được tầm quan trọng đó nên từ năm 2006 môn Tin học đã được
bộ Giáo dục-Đào tạo đưa vào giảng dạy ở các cấp học, nhằm trang bị cho họcsinh những kiến thức cơ bản, phổ thông về ngành khoa học Tin học Đặc biệt làtrong chương trình sách giáo khoa (SGK) Tin học lớp11 bậc trung họcphổ thông (THPT), các nhà biên soạn sách đã đưa vào các chương bài giúp họcsinh tiếp cận được với ngôn ngữ lập trình bậc cao Qua đó giúp các emhình dung được sự ra đời, cấu tạo, hoạt động cũng như ích lợi của cácchương trình hoạt động trong máy tính Từ đó khơi gợi ở các em niềm đam mêđối với bộ môn Tin học, tạo niềm tin để các em có thể dễ dàng tự định hướng,lựa chọn nghề nghiệp sau này
Tuy nhiên, Tin học là một môn học mới ở các trường phổ thông nênhọc sinh còn nhiều bỡ ngỡ khi tiếp cận với môn học này Nội dung tin họclập trình lớp 11 là một nội dung mới lạ đối với đa số học sinh, với học sinhmiền núi như trường chúng tôi việc học Toán, Ngoại ngữ đã khó nay họclập trình thì điều đó lại càng khó khăn hơn bởi nhiều khái niệm, thuật ngữ,cấu trúc dữ liệu, cú pháp câu lệnh học sinh mới được tiếp xúc lần đầu.Chính vì vậy mà học sinh dễ mắc sai lầm khi lập trình giải quyết các bài toán.Khi thực hiện giảng dạy môn Tin học lớp 11 tại Trường THPT Lê Lai, tôi thấyrằng, việc học sinh lập trình bằng ngôn ngữ lập trình Turbo Pascal để giải cácbài toán trên máy tính thường gặp rất nhiều khó khăn trong việc sử dụng cáccâu lệnh để diễn tả các bước của thuật toán, phát hiện và sửa lỗi về cú pháp,ngữ nghĩa vv Trong khi đó để viết được một chương trình hoàn chỉnh thìhọc sinh phải có tư duy logic về thuật toán, biết khai báo kiểu dữ liệu mộtcách hợp lí, biết sử dụng các câu lệnh đúng cú pháp Từ những điều trăn trở
đó mà qua một số năm giảng dạy, tôi đã có một số kinh nghiệm để khắc phụcnhững khó khăn cho học sinh lớp 11 khi học Tin học Đó cũng là vấn đề
học lập trình Pascal – môn Tin học 11"
1.2 Mục đích nghiên cứu
Giúp học sinh (đặc biệt là học sinh miền núi như trường THPT Lê Lai)
tự tin có niềm đam mê hứng thú khi học lập trình Pascal – Tin học 11; từ chỗcác em ngại phải giải một bài toán Tin học vì găp phải nhiều rào cản: tìm thuậttoán, phát hiện lỗi và sửa lỗi vv Giờ đây (sau khi áp dụng SKKN) các em đã
có niềm tin và yêu thích học lập trình Pascal nói riêng và bộ môn Tin học 11 nóichung
Trang 31.3 Đối tượng nghiên cứu
Khắc phục những khó khăn khi học lập trình Pascal - Tin học 11 củahọc sinh các lớp 11A1, 11A2 trường THPT Lê Lai năm học 2015- 2016
1.4 Phương pháp nghiên cứu
Trong đề tài này tôi sử dụng một số phương pháp nghiên cứu chính:
+ Phương pháp nghiên cứu tài liệu
+ Phương pháp quan sát
+ Phương pháp phỏng vấn
2 Nội dung
2.1 Cơ sở lí luận
Pascal là ngôn ngữ lập trình bậc cao do giáo sư Niklaus Wirth
(trường đại học kỹ thuật , Zurich, Thụy sĩ) sáng tác và công bố vào đầu nhữngnăm 1970, với tên Pascal để kỷ niệm nhà toán học người Pháp Blaise Pascalthế kỷ 17 Lúc đầu, ngôn ngữ lập trình này được sáng tác ra nhằm giúp chonhững người mới học lập trình có được thói quen viết một chương trình có cấutrúc sáng sủa, rõ ràng, dễ hiểu và dễ đọc cho mọi người Giáo sư Wirth thấy rằng
có thể tránh được rất nhiều lỗi khi lập trình với một ngôn ngữ có cấu trúc khối
và có sự kiểm tra kỹ lưỡng sự tương thích giữa các kiểu dữ liệu Mà Pascal làmột ngôn ngữ như thế: mọi biến và hằng của một kiểu dữ liệu không thể tự dođem trộn lẫn với các biến và hằng của một kiểu dữ liệu khác Ngôn ngữ Pascal
có thể tách các thông tin dữ liệu (biến, hằng,…) và các lệnh cần dùng cho mộtnhiệm vụ xác định thành những khối riêng, tách ra khỏi phần còn lại củachương trình để người lập trình có thể giải quyết dần từng phần một,từng khối một và thậm chí có thể cho nhiều người tham gia lập trình, mỗi ngườiphụ trách một vài khối
Từ tính ưu việt đó của ngôn ngữ lập trình Pascal mà ngôn ngữ này đãđược sử dụng rộng dãi Pascal rất thích hợp dùng để giảng dạy trong các nhàtrường và cho những người mới bắt đầu học lập trình Do đó trường THPT
Lê Lai đã chọn ngôn ngữ lập trình này để dạy học sinh giải bài toán trênmáy tính Mặc dù mục tiêu của chương trình giáo dục Tin học của Bộ GD & ĐTkhông quy định phải dạy học sinh trên một ngôn ngữ lập trình cụ thể nào
Tuy nhiên trong quá trình học tập, học sinh ở trường chúng tôi găp phảinhững khó khăn nhất định: mắc lỗi cú pháp, lỗi ngữ nghĩa chưa biết cách sửa;việc giải một bài toán trong toán học hoặc bài toán thực tế còn lúng túng, nhiềuvướng mắc Vì vậy để khắc phục những hạn tồn tại đó, tôi đã cố gắng tìm ra giảipháp trong quá trình giảng dạy
2.2 Thực trạng vấn đề
Qua thực tế giảng dạy ở trường THPT Lê Lai các năm qua, tôi nhận thấykhi học đến chương trình tin học lớp 11 đa số học sinh đều nhận xét ngại học bộmôn này vì rất khó khăn khi viết hoàn chỉnh một chương trình chạy được trênmáy tính đó là các em khó xác định bài toán, thuât toán; khi chạy chương trìnhthì gặp khá nhiều lỗi: lỗi về cú pháp và lỗi về ngữ nghĩa không biết sửa
Trang 4chương trình trong ngôn ngữ lập trình Pascal Những khó khăn ấy, tôi đưa
2 Sai tên kiểu dữ liệu;
Vd: Kiểu thực thì viết là Read; Kiểu nguyên thì viết interger
3 Thiếu dấu kết thúc câu {;} và dấu kết thúc chương trình;
4 Viết sai tên các từ khóa;
5 Không phân biệt được hằng xâu và biến: học sinh cần phải chú ýhằng xâu đặt trong cặp nháy đơn còn biến thì không cần đặt trongcặp nháy đơn;
6 Sử dụng dấu ; sai vị trí.Trước Else không có dấu chấm phẩy
Sử dụng dấu chấm phẩy sau từ khoá do trong các câu lệnh lặp câu lệnh lặp rỗngkhông làm việc gì cả
Trường hợp 2: Khó khăn khi phát hiện lỗi sai về ngữ nghĩa thường gặp của học sinh trong lập trình Pascal Lỗi về ngữ nghĩa là lỗi trình biên dịch sẽ bỏ qua mà khi chạy chương trình mới phát hiện được lỗi.
1.Chưa hiểu thứ tự ưu tiên phép toán, chuyển từ biểu thức toán học sangbiểu thức trong pascal bị sai;
2 Khai báo sai miền chỉ số cho dữ liệu kiểu mảng; sai kiểu dữ liệucho biến
Ví dụ 1: Nhập vào một mảng số nguyên gồm các số lớn hơn 3 và nhỏ hơn
100 In mảng vừa nhập
Học sinh khai báo mảng như sau: Var a: array[3 100] of integer;
3 Giá trị biến điều khiển vượt quá miền chỉ số của mảng;
4 Dùng cùng tên biến điều khiển cho các vòng lặp for lồng nhau;
5 Tràn số do kết quả tính toán vượt quá giới hạn;
6 Sử dụng tên hàm làm biến cục bộ
Trường hợp 3: Khó khăn khi xác định bài toán và liên hệ phương pháp giải một bài toán trong toán học hoặc trong thực tế với thuật giải trong tin học.
- Đối với bài tập 9 –SGK Tr36: Yêu cầu viết chương trình tính diện tíchphần gạch chéo
- Các bài tập ở cuối chương III:
+ Bài toán cổ: Vừa gà vừa chó
+ Bài toán tuổi cha, tuổi con
+ Bài toán gửi tiền tiết kiệm không kì hạn
-
Trang 52.3 Một số kinh nghiệm khắc phục khó khăn của học sinh khi học lập trình Pascal – Tin học 11
2.3.1 Kinh nghiệm khắc phục những lỗi sai cú pháp cơ bản
2.3.1.1 Đối với chương II:‘‘Chương trình đơn giản’’
a) Ở các tiết lí thuyết khi dạy giáo viên sẻ lưu ý cho học sinh các lỗi cú pháp thường gặp
- Lỗi đặt tên hằng, tên biến trùng nhau VD: Var a, A: byte; (Pascalkhông phân biệt chữ hoa và chữ thường Do đó a và A chỉ là một)
- Lỗi đặt tên hằng, tên biến, tên chương trình, không đúng qui định củangôn ngữ lập trình
- Ngăn cách giữa các biến phải là dấu phẩy thì các em thường dùng dấu
chấm phẩy Khi kết thúc câu lệnh không có dấu chấm phẩy.
- Khi viết từ khóa thường viết sai lỗi chính tả VD: Const thì viết là Cont,end thì viết là and, Real thì viết là Read,…
- Viết sai câu lệnh gán VD: x := 0; thì viết là: x = 0;
- Khi viết hằng xâu thường quên không đặt hằng xâu vào giữa cặpdấu nháy đơn
- Khi viết thông báo ra ngoài màn hình thì các biểu thức lại cùng đặt trongcặp dấu nháy đơn với hằng xâu kí tự
- Khai báo biến thuộc kiểu dữ liệu này nhưng trong phần thân chươngtrình lại dùng biến đó với kiểu dữ liệu khác dẫn đến sai kiểu VD : Khai báo biến
a thuộc kiểu nguyên, nhưng trong phần thân chương trình lại có câu lệnh
a := a/2 ; (biểu thức a/2 là một số thực, biến a thuộc kiểu nguyên nên không thểlưu trữ được giá trị thực) vv
b) Biện pháp khắc phục:
*) Đối với các tiết bài tập trong chương giáo viên cho học sinh làm cácbài tập dạng phát hiện lỗi, qua đó giúp học sinh khi thực hành có thể dễ dàngphát hiện lỗi và sửa lỗi hơn
*) Đối với bài tập thực hành của chương II : Bài tập và thực hành 1.
Thực hành theo yêu cầu của SGK.
Bước 3: Để học sinh tự sửa lỗi Giáo viên quan sát, bao quát phòng máy,
hỗ trợ cho những học sinh yếu kém Sau đó, giáo viên chiếu chương trình đangcòn lỗi mà các em chưa khắc phục được và những lỗi đa phần các em mắc phải.Giáo viên phân tích nguyên nhân của từng lỗi và yêu cầu các em sửa lại trongchương trình của mình Dưới đây là chương trình giáo viên chiếu lên màn chiếu:
Trang 6Bước 4: Giáo viên thực hiện biên dịch, hướng dẫn học sinh sửa lỗi có
trong chương trình trên Cụ thể chương trình trên có các lỗi sai:
lại là: Read(a,b,c); (mã lỗi: 89)
hiệu *, sửa lại là: x1:= (-b – sqrt(D)) / (2*a); (mã lỗi: 89)
kết quả ra phải là dấu phẩy Sửa lại là: write(‘x1= ’, x1:6:2, ‘ x2=
’,x2:6:2); (mã lỗi: 89);
end (mã lỗi : 88)
Bước 5 : Sau khi đã hết lỗi về mặt cú pháp, yêu cầu học sinh chạy chương
trình như yêu cầu của sách giáo khoa
Tuy nhiên vẫn có nhiều em thực hiện chưa đúng, lỗi thường gặp đó là:
Khi thực hiện câu lệnh nhập Read(a,b,c) các em dùng dấu chấm phẩy để ngăn
cách giữa các giá trị VD: Khi nhập giá trị cho a, b, c, thì các em gõ: 3 ; 4; 5Như vậy các em chưa nắm vững cách nhập giá trị cho nhiều biến Lúc này giáoviên cần làm mẫu cho học sinh quan sát và nhấn mạnh cách nhập giá trị chonhiều biến: những giá trị này phải được gõ cách nhau bởi ít nhất một dấu cách
hoặc một kí tự xuống dòng (nhấn phím Enter)
2.3.1.2 Khắc phục những lỗi sai cơ bản thường gặp trong chương III:
‘‘Cấu trúc rẽ nhánh và lặp’’.
a) Ở các tiết lí thuyết khi dạy giáo viên lưu ý các lỗi thường gặp.
- Viết thiếu các từ khóa như: then, do, downto, to…
- Điều kiện trong câu lệnh rẽ nhánh haycâu lệnh lặp không phải là biểuthức logic
- Câu lệnh trước từ khóa else có dấu chấm phẩy.
- Trong câu lệnh For…to …do thì giá trị đầu lại lớn hơn giá trị cuối haytrong câu lệnh For… downto … do thì giá trị đầu lại nhỏ hơn giá trị cuối
Trang 7- Trong câu lệnh lặp While … Do không có câu lệnh làm thay đổi điềukiện lặp Do đó vòng lặp không thể dừng lại được.
b) Biện pháp sửa lỗi.
Với Tiết 11 – Bài ‘‘Cấu trúc rẽ nhánh’’ Cho học sinh phát hiện
những lỗi trong chương trình
Ví dụ 1: Viết chương trình tìm nghiệm thực của phương trình bậc hai :
Bước1: GV chia lớp thành 4 nhóm Yêu cầu mỗi nhóm tìm lỗi sai có
trong chương trình ở trên
Bước 2: Các nhóm suy nghĩ rồi cử đại diện các nhóm lên bảng trình bày
kết quả
Bước 3: Giáo viên thực hiện biên dịch chương trình để học sinh thấy được
các lỗi sai và phân tích để học sinh hiểu được nguyên nhân vì sao sai
Các lỗi sai trong chương trình trên là :
+ Câu lệnh writeln(‘Phuong trinh vo nghiem’); sai (mã lỗi: 113), vì câu
lệnh này đứng trước từ khóa else nên không có dấu chấm phẩy
+ Câu lệnh writeln(‘Phuong trinh co hai nghiem, ’x1,x2); sai (mã lỗi: 89).Danh sách kết quả ra ngoài màn hình trong câu lệnh này gồm có 1 hằng xâu kí
tự và 2 biến Các kết quả ra phải được ngăn cách nhau bởi 1 dấu phẩy, hằng xâu
kí tự phải được đặt trong cặp dấu nháy đơn
Sửa lại là: writeln(‘Phuong trinh co hai nghiem ’,x1:6:2,x2:6:2);
Trang 8+ Câu lệnh writeln(‘Phuong trinh co nghiem kep,’-b/2a); sai
Câu lệnh này có 2 lỗi sai: Thứ nhất, sai cách viết danh sách kết quả ra ngoàimàn hình (mã lỗi 26) Thứ hai, viết biểu thức chưa đúng với quy định củaPascal (mã lỗi: 89)
Sửa lại là: writeln(‘Phuong trinh co nghiem kep’,-b/(2*a));
Bước 4: Giáo viên chỉnh sửa lại chương trình trên thành chương trình
a) Ở các tiết lí thuyết khi dạy giáo viên lưu ý các lỗi thường gặp.
- Khi khai báo biến mảng thì thường viết sai từ khóa
- Trong khai báo mảng thì chỉ số đầu và chỉ số cuối chưa được xác định
- Khi tham chiếu đến một phần tử của mảng một chiều thì thường viếtsai Ví dụ để tham chiếu đến phần tử thứ 1 của mảng a thì học sinh viếta1 hoặc a(1)
- Đối với bài ‘‘Kiểu xâu’’ học sinh thường nhầm lẫn giữa hàm và thủtục vv
b) Biện pháp sửa lỗi.
Trang 9Ví dụ: Cho dãy A gồm n số nguyên dương A1, A2, …, An Tìm phần tử
lớn nhất của dãy cùng với chỉ số của nó
Bước 1 Sau khi học sinh nêu lại được thuật toán tìm giá trị lớn nhất (đã
học ở lớp 10) Giáo viên chiếu chương trình đã chuẩn bị sẵn cho cả lớp quan sát
for i:=2 to n do if a[i] > max then begin max:= a[i]; cs:=i; end;
writeln(‘Gia tri lon nhat la: ’, max,’ tai vi tri: ’, cs) ;
readln
end.
Bước 2: Chia lớp thành 4 nhóm Yêu cầu các nhóm tìm lỗi sai có
trong chương trình ở trên
Bước 3: Đại diện các nhóm lên bảng trình bày kết quả.
Bước 4: Giáo viên thực hiện biên dịch chương trình để học sinh thấy
được các lỗi sai và phân tích để học sinh hiểu được nguyên nhân vì sao sai
Các lỗi sai trong chương trình trên là :
Trong khai báo biến mảng: Var A: aray[1 Nmax] of integer; có tới 2 lỗi sai Một là, sai từ khóa Array chứ không phải là Aray (mã lỗi:3) Hai là, chỉ
số cuối Nmax chưa được xác định (mã lỗi:3) Lỗi này nhiều học sinh vẫn khônghiểu vì sao sai Vì các em thấy trong SGK cũng viết như vậy
=>Do đó giáo viên cần làm rõ để học sinh hiểu, Nmax trong SGK đã có giá trị
xác định là 250 nhờ đã khai báo hằng trước đó: Const Nmax=250;
Câu lệnh nhập Readln(a(i)); sai (mã lỗi: 64) Sửa lại là: Readln(a[i]);Chương trình được sửa lại là:
Trang 10writeln(‘Gia tri lon nhat la: ’, max,’ tai vi tri: ’, cs) ;
readln
end.
Bước 5: Chạy thử chương trình cho cả lớp quan sát, để các em được khắc
sâu thêm nội dung bài học
Bước 6: Giáo viên đánh giá kết quả và cho điểm các nhóm.
2.3.1.4 Khắc phục những lỗi sai cơ bản trong chương V: “Tệp và thao tác với tệp”
a) Ở các tiết lí thuyết khi dạy giáo viên lưu ý các lỗi thường gặp.
- Quên không khai báo biến tệp Quên không gắn tên tệp.
- Đường dẫn đến tệp sai; Không mở tệp để đọc hay ghi nhưng vẫn thaotác đọc/ghi tệp; Mở quá nhiều tệp
- Thao tác trên tệp xong thì không thực hiện đóng tệp
b) Biện pháp sửa lỗi.
Tiết 38 – Ví dụ làm việc với tệp yêu cầu học sinh làm bài tập sau:
Ví dụ: Cho tệp SONGUYEN.INP chứa các số nguyên, các số cách nhau
bởi dấu cách Hãy viết chương trình tính tổng các số nguyên dương có trong tệp
ở trên, kết quả ghi lên tệp SONGUYEN.OUT
Cách tiến hành:
Bước 1: Chia lớp thành 4 nhóm Nhiệm vụ của mỗi nhóm là giải quyết bài
toán ở trên
Bước 2: Giáo viên thu kết quả của các nhóm Soạn thảo và chiếu kết
quả của một nhóm bất kì cho cả lớp cùng quan sát Đây là chương trình của