SKKN 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 – môn Tin học 11

SKKN 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 – môn Tin học 11

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ọc sinh 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ọc phổ thông (THPT), các nhà biên soạn sách đã đưa vào các chương bài giúp học sinh tiếp cận được với ngôn ngữ lập trình bậc cao. Qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt động cũng như ích lợi của các chươ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ên họ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ọc lậ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 sinh miền núi như trường chúng tôi việc học Toán, Ngoại ngữ đã khó nay học lậ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ấy rằng, việc học sinh lập trình bằng ngôn ngữ lập trình Turbo Pascal để giải các bà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ác câ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ột cá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ục những khó khăn cho học sinh lớp 11 khi học Tin học. Đó cũng là vấn đề trong đề tài: "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 – môn Tin học 11"

 

doc 21 trang thuychi01 12321
Bạn đang xem 20 trang mẫu của tài liệu "SKKN 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 – môn Tin học 11", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
	1. 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ọc sinh 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ọc phổ thông (THPT), các nhà biên soạn sách đã đưa vào các chương bài giúp học sinh tiếp cận được với ngôn ngữ lập trình bậc cao. Qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt động cũng như ích lợi của các chươ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ên họ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ọc lậ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 sinh miền núi như trường chúng tôi việc học Toán, Ngoại ngữ đã khó nay học lậ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ấy rằng, việc học sinh lập trình bằng ngôn ngữ lập trình Turbo Pascal để giải các bà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ác câ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ột cá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ục những khó khăn cho học sinh lớp 11 khi học Tin học. Đó cũng là vấn đề trong đề tài: "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 – 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ật toá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ói chung.
	1.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ủa họ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ững năm 1970, với tên Pascal để kỷ niệm nhà toán học người Pháp Blaise Pascal thế kỷ 17. Lúc đầu, ngôn ngữ lập trình này được sáng tác ra nhằm giúp cho nhữ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ấu trú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ột nhiệ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ủa chươ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ười phụ 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ên má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 & ĐT khô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ải nhữ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ều vướ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ải phá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ấy khi 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ên má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ình thì 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 chương trình trong ngôn ngữ lập trình Pascal. Những khó khăn ấy, tôi đưa về 3 trường hợp cụ thể sau: 
	Trường hợp 1: Khó khăn về phát hiện và sửa lỗi sai cú pháp thường gặp của học sinh trong lập trình Pascal.
	1.Đặt sai tên: Tên hằng, biến, tên chương trình , đăt tên biến trùng nhau,....v v.
	Tên chứa dấu cách, chứa kí tự đặc biêt, bắt đầu bằng chữ số, tên biến là a và 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 trong cặ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ỗng khô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 sang biể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ệu cho 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ích phầ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 
	- ....
	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
	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; (Pascal khô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ủa ngô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ặp dấ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 trong cặ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ương trì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ác bà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àng phá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.
	Cách thực hiện:
	Bước 1: Yêu cầu cả lớp soạn thảo chương trình đã viết sẵn ở SGK trang 34:
	Bước 2: yêu cầu học sinh thực hiện biên dịch chương trình để phát hiện và sửa lỗi. Mặc dù là nhìn chương trình đã viết sẵn trong sách giáo khoa để soạn thảo nhưng chương trình các em soạn thảo vẫn còn rất nhiều lỗi. Có rất nhiều nguyên nhân, như kỹ năng soạn thảo chưa thành thạo dẫn đến sai lỗi chính tả, hay chưa nắm vững cách viết một biểu thức, cách viết thông báo ra ngoài màn hình,
	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 đang cò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 trong chươ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:
	Program	 Giai_PTB2 ;
	Uses	Crt ;
	Var	a, b, c, D : Read ;	x1, x2: Read;
	begin
	Clrscr; 	Write(‘a, b, c: ’);
	Readln(a;b;c);
	D:= b * b – 4 *a*c;
	x1:= (-b – sqrt(D)) / (2a)
	x2:= -b/a –x1;
	write(‘x1= ’ x1:6:2, ‘ x2= ’, x2:6:2);
	readln;
	end;
	Bướ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:
 Sai kiểu dữ liệu, không phải là Read mà là Real (mã lỗi: 26)
Câu lệnh Read(a;b;c); sai vì ngăn cách giữa các biến phải là dấu phẩy, sửa lại là: Read(a,b,c); (mã lỗi: 89)
Câu lệnh 	x1:= (-b – sqrt(D)) / (2a); sai vì trong phép nhân phải dùng kí hiệu *, sửa lại là: 	x1:= (-b – sqrt(D)) / (2*a); (mã lỗi: 89)
 Câu lệnh write(‘x1= ’ x1:6:2, ‘ x2= ’, x2:6:2); sai vì ngăn cách giữa các 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);
Câu lệnh end; sai vì kết thúc chương trình phải là dấu chấm, sửa lại là: 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; 5 Như 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áo viê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ị cho nhiề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ểu thức logic.
Câu lệnh trước từ khóa else có dấu chấm phẩy.
- Trong câu lệnh Forto do thì giá trị đầu lại lớn hơn giá trị cuối hay trong câu lệnh For downto  do thì giá trị đầu lại nhỏ hơn giá trị cuối.
Trong câu lệnh lặp While  Do không có câu lệnh làm thay đổi điều kiệ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 :
 ax2 + bx + c = 0 (a # 0).
	Giáo viên chiếu chương trình đã chuẩn bị sẵn cho cả lớp quan sát.
	Program	Vidu ;
Uses 	Crt ;
	Var	a, b, c, d :Real ;	x1, x2 : Real;
	begin
	clrscr;
	write(‘Moi nhap a, b, c: ’); Readln(a,b,c);
	d := b * b – 4 * a*c;
	if d < 0 then
	writeln(‘Phuong trinh vo nghiem’);
	else
	 if d > 0 then
	Begin
	 x1 : = (-b – sqrt(d))/(2*a);
	 x2 :=(-b + sqrt(d))/(2*a);
	 writeln(‘Phuong trinh co hai nghiem, ’x1,x2);	
 End;
	 if d=0 then
	 writeln(‘Phuong trinh co nghiem kep,’-b/2a);
	Readln
	End.
	Cách thực hiện:
	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);
+ 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ài màn hình (mã lỗi 26). Thứ hai, viết biểu thức chưa đúng với quy định của Pascal (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 hoàn chỉnh:
	Program	Vidu1 ; 
	Uses 	Crt ;
	Var	a, b, c, d :Real ; 	x1, x2 : Real; 
	begin
	clrscr;
	write(‘Moi nhap a, b, c: ’); Readln(a,b,c);
	d := b * b – 4 * a*c;
	if d < 0 then
	writeln(‘Phuong trinh vo nghiem’);
	else
	 begin
if d > 0 then
 begin
	 x1 : = (-b – sqrt(d))/(2*a);
	 x2 :=(-b + sqrt(d))/(2*a);
	 writeln(‘Phuong trinh co hai nghiem ’, x1:6:2,x2:6:2);
	 end;
	 if d=0 then
	 writeln(‘Phuong trinh co nghiem kep ’,-b/(2*a));
	End;
	Readln
	End.
	Bước 5: Tiếp theo giáo viên chạy thử chương trình cho học sinh quan sát.
	Bước 6: Cuối cùng giáo viên đánh giá kết quả và cho điểm các nhóm.
	2.3.1.3 Khắc phục những lỗi sai cơ bản trong chương IV: ‘‘Kiểu dữ liệu có cấu trúc’’.
	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ết sai. Ví dụ để tham chiếu đến phần tử thứ 1 của mảng a thì học sinh viết a1 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.
	Ví 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.
	Program	Tim_max ; 
	Uses 	Crt ;
	Var	A : aray[1..Nmax] of integer;
	n, i, cs: byte;
	max: integer;
	begin
	clrscr;
	write(‘Nhap n: ’);	Readln(n);
	for i:=1 to n do
	 begin
	write(‘Nhap phan tu thu ’, i,’ :’); 
	readln(a(i));
	 end;	
	max:=a[1]; cs:=1;
	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ông hiể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à:
	Program	Tim_max ; 
	Uses 	Crt ;
	Const	Nmax = 250;
	Var	A : array[1..Nmax] of integer; n, i, cs: byte;	max: integer;
	begin
	clrscr;
	write(‘Nhap n: ’);	Readln(n);
	for i:=1 to n do
	 begin
	write(‘Nhap phan tu thu ’, i,’ :’); 
	readln(a[i]);
	 end;	
max:=a[1]; cs:=1; 
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 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 thao tá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 nhóm đó:
	Program	Vi_du;
	Var	f, g : Text; 	n, s : integer ;
	begin
	asign(f, ‘SONGUYEN.INP’) ;assign(g,’ SONGUYEN.OUT’)
	S := 0 ;
	while not eof(f) do
	 	begin
	read(f,n) ;
	if n > 0 then S :=S + n ;
	 	end;	
	writeln(g, ‘Tong cac so duong co trong tep la: ’, s);
	end.
	Bước 3: Yêu cầu các nhóm còn lại phát hiện lỗi sai. Sau đó giáo viên củng cố.
	Các lỗi sai có trong chương trình trên là:
Câu lệnh asign(f, ‘SONGUYEN.INP’) ; sai (mã lỗi: 3), vì viết sai chính tả từ khóa assign
Câu lệnh while not eof(f) do sai (mã lỗi:104), vì tệp chưa được mở để nhập dữ liệu .
Câu lệnh writeln(g, ‘Tong cac so duong co trong tep la: ’, s); sai (mã lỗi: 105), vì tệp chưa được mở để xuất dữ liệu.
Thiếu câu lệnh đóng tệp. Trong trường hợp này, khi thực hiện biên dịch thì máy tính không báo lỗi (không sai về mặt cú pháp). Tuy nhiên sau khi thực hiện chương trình, mở tệp SONGUYEN.OUT để xem kết quả thì kết quả không có trong tệp. Nguyên nhân là do chưa thực hiện đóng tệp nên việc ghi tệp chưa được hoàn tất.
Giáo viên thực hiện chỉnh sửa chương trình trên thành chương trình hoàn chỉnh:
Program	Vi_du;
Var	f, g : Text;	n, s : integer ;
begin
	assign(f, ‘SO.INP’) ; reset(f);
	assign(g,’SO.OUT’); rewrite(g);
	S := 0 ;
	while not eof(f) do
	 begin
	read(f,n) ;
	if n > 0 then S :=S + n ;
	 end;	
	writeln(g, ‘Tong cac so duong co trong tep la: ’, s);
	close(f); close(g);
end.
Giáo viên chạy thử chương trình cho học sinh quan sát.
	Bước 4. Từ chương trình hoàn chỉnh ở trên, các nhóm tự đối chiế

Tài liệu đính kèm:

  • docskkn_mot_so_kinh_nghiem_khac_phuc_kho_khan_cua_hoc_sinh_khi.doc