khi thực hiện giảng dạy môn Tin học lớp 11 tại Trường …………………., tôi thấy rằng, việc học sinh lập trình giải các bài toán trên máy tính thường gặp không ít khó khăn. Phần lớn các em đều gặp một số lỗi cơ bản về mặt cú pháp và ngữ nghĩa. Một phần là do thời lượng thực hành trên lớp không nhiều mà phần lớn nhà các em không có máy vi tính hoặc có máy vi tính chăng thì các em cũng sử dụng chưa đúng mục đích do đó các em không được thực hành thường xuyên, dẫn đến các em vẫn mắc phải một số lỗi cơ bản.
SỞ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG THPT ………………………… SÁNG KIẾN KINH NGHIỆM VẬN DỤNG KIẾN THỨC HƯỚNG DẪN HỌC SINH 11 TÌM VÀ SỬA LỖI TRONG NGƠN NGỮ LẬP TRÌNH PASCAL Người thực hiện: …………………… Tân Trụ, tháng năm 2019 DANH MỤC CỤM TỪ VIẾT TẮT THPT: Truong học phổ thơng SGK: Sách giáo khoa CTC: Chương trình SKKN: Sáng kiến kinh nghiệm MỤC LỤC A ĐẶT VẤN ĐỀ .1 I LÝ DO CHỌN ĐỀ TÀI .1 II MỤC ĐÍCH NGHIÊN CỨU .1 III ĐỐI TƯỢNG NGHIÊN CỨU IV PHƯƠNG PHÁP NGHIÊN CỨU B GIẢI QUYẾT VẤN ĐỀ I CƠ SỞ LÝ LUẬN II THỰC TRẠNG CỦA VẤN ĐỀ Thuận lợi 2 Khó khăn .2 III CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH Lỗi cú pháp a Những lỗi sai b Những lỗi sai câu lệnh rẻ nhánh lặp c Những lỗi sai kiểu liệu có cấu trúc d Những lỗi sai tệp thao tác với tệp, chương trình .10 Lỗi ngữ nghĩa .15 IV HIỆU QUẢ CỦA SKKN 20 C KẾT LUẬN VÀ KIẾN NGHỊ 22 I KẾT LUẬN 22 II KIẾN NGHỊ 22 A ĐẶT VẤN ĐỀ I LÝ DO CHỌN ĐỀ TÀI Thế kỉ XXI kỉ Công nghệ thông tin truyền thơng Vì việc trang bị kiến thức Tin học vấn đề có ý nghĩa tầm quan trọng lớn trình đào tạo nhân lực, bỗi dưỡng nhân tài cho đất nước Xác định tầm quan trọng nên mơn Tin học Giáo dục - Đào tạo đưa vào giảng dạy cấp học, nhằm trang bị cho học sinh kiến thức bản, phổ thông ngành khoa học Tin học Đặc biệt chương trình SGK Tin học lớp 11 bậc THPT, nhà biên soạn sách đưa vào chương giúp học sinh tiếp cận với ngơn ngữ lập trình bậc cao Pascal Qua giúp em hình dung đời, cấu tạo, hoạt động ích lợi chương trình hoạt động máy tính Từ khơi gợi em niềm đam mê môn Tin học, tạo niềm tin để em dễ dàng tự định hướng, lựa chọn nghề nghiệp sau Tuy vậy, thực giảng dạy môn Tin học lớp 11 Trường …………………., tơi thấy rằng, việc học sinh lập trình giải tốn máy tính thường gặp khơng khó khăn Phần lớn em gặp số lỗi mặt cú pháp ngữ nghĩa Một phần thời lượng thực hành lớp khơng nhiều mà phần lớn nhà em khơng có máy vi tính có máy vi tính em sử dụng chưa mục đích em khơng thực hành thường xun, dẫn đến em mắc phải số lỗi Để khắc phục vấn đề giúp học sinh chủ động tìm lỗi sai sửa viết chương trình tơi áp dụng phương pháp “Vận dụng kiến thức học hướng dẫn học sinh tìm sửa lỗi viết chương trình ngơn ngữ lập trình Pascal” II MỤC ĐÍCH NGHIÊN CỨU - Giúp học sinh chủ động việc tìm sửa chữa lỗi viết chương trình ngơn ngữ lập trình Pascal chương trình Tin học 11 thực bục giảng phòng thực hành III ĐỐI TƯỢNG NGHIÊN CỨU - Học sinh lớp 11A1, 11A4 cuối năm học 2017– 2018 đầu năm học 2018-2019 - Sách giáo khoa Tin học 11, sách giáo viên, chương trình Pascal IV PHƯƠNG PHÁP NGHIÊN CỨU - Tiến hành thực nghiệm qua tiết dạy B GIẢI QUYẾT VẤN ĐỀ I CƠ SỞ LÝ LUẬN Pascal ngôn ngữ lập trình bậc cao giáo sư Niklaus Wirth (trường đại học kỹ thuật, Zurich, Thụy sĩ) sáng tác công bố vào đầu năm 1970, với tên Pascal để kỷ niệm nhà toán học người Pháp Blaise Pascal kỷ 17 Lúc đầu, ngơn ngữ lập trình sáng tác nhằm giúp cho người học lập trình có thói quen viết chương trình có cấu trúc rõ ràng, dễ hiểu dễ đọc cho người Giáo sư Wirth thấy tránh nhiều lỗi lập trình với ngơn ngữ có cấu trúc khối có kiểm tra kỹ lưỡng tương thích kiểu liệu Mà Pascal ngôn ngữ thế: biến kiểu liệu tự đem trộn lẫn với biến kiểu liệu khác Ngơn ngữ Pascal tách thông tin liệu (biến, hằng,…) lệnh cần dùng cho nhiệm vụ xác định thành khối riêng, tách khỏi phần lại chương trình để người lập trình giải dần phần một, khối chí cho nhiều người tham gia lập trình, người phụ trách vài khối Và Pascal đưa vào chương trình học thức Tuy nhiên trình học tập, học sinh trường mắc phải số lỗi lập trình Vì để khắc phục tình trạng mắc lỗi, tơi cố gắng tìm giải pháp q trình giảng dạy II THỰC TRẠNG CỦA VẤN ĐỀ Thuận lợi - Trường THPT ………………… trang bị phòng thực hành để học sinh thực hành máy tính - Giáo viên dạy mơn Tin học trẻ, nhiệt tình, động ln tìm tòi phương pháp giảng dạy tốt để mang lại cho học sinh tiết học thú vị bổ ích Khó khăn Do đa phần học sinh trường em nông thôn nên Tin học mơn học mẻ, có phụ huyh hỏi tơi “học Tin học học gì, học chi cho biết để chơi game gì” Phần lớn em tiếp xúc với máy tính nên em thực hành máy tính thao tác chậm Lập trình Pascal mơn học u cầu học sinh phải tư lơgic cao, tính chặt chẻ cao, việc áp dụng phương pháp dạy học phù hợp với môn với đối tượng học sinh thực khó khăn - Phần lớn tâm lí phụ huynh em trọng vào môn thi tốt nghiệp Đại học nên quan niệm học môn Tin học qua Trong lập trình Pascal lại sử dụng ngôn ngữ viết Tiếng Anh cần phải có kiến thức bổ trợ mơn Tốn học, Vật lý,… nên viết chương trình học sinh thường hay mắc lỗi mà lỗi thường gặp như: Đặt sai tên hằng, biến, khai báo không đủ biến, sử dụng biến mà không khai báo, khai báo sai tên chương trình, viết sai câu lệnh, viết sai từ khóa, sai cơng thức, khơng nhớ kiểu liệu… III CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH Lỗi cú pháp a Những lỗi sai - Khi viết chương trình học sinh thường mắc số lỗi như: + Khi kết thúc câu lệnh phải có dấu “ ; ” + Khi viết từ khóa học sinh hay viết thiếu thừa từ Ví dụ: Từ khóa: Program học sinh viết Progam End học sinh viết And + Sau từ khóa End kết thúc chương trình “.” Nhưng học sinh lại viết “;” + Khi viết chương học sinh thường hay viết thiếu thừa dấu: “(”, “)”, “ ,”, “.”, “:=”, “=”, “ ’ ”, … + Học sinh viết chương trình mà quên khơng xuống dòng dẫn đến dòng q dài + Khai báo q biến khơng đủ sử dụng chương trình + Đặt tên biến, tên chương trình, tên tệp khơng theo quy định ngơn ngữ lập trình + Giữa biến viết cách dấu “;” + Trong câu lệnh số lệnh >=2 phải đặt cặp từ khố Begin … End; (Câu lệnh ghép) + Học sinh khai báo kiểu liệu đường viết chương trình dùng kiểu liệu khác dẫn đến sai kiểu Ví dụ: Viết chương trình in hình dòng chữ: “Lop 11A1 truong THPT” - Bước Chia lớp thành nhóm - Bước Giáo viên thu kết nhóm Soạn thảo chiếu kết nhóm cho lớp quan sát - Bước u cầu nhóm lại phát lỗi sai Sau giáo viên hồn chỉnh Program vidu; Uses crt; Begin Clrscr; Writeln(‘ Lop 11A1 truong THPT’); Readln End - Bước 4: Mỗi học sinh tiến hành gõ trực tiếp máy tính, sau gõ chương trình xong học sinh biên dịch sửa lỗi thực chương trình - Bước 5: Giáo viên hồn chỉnh, nhận xét giới thiệu học sinh mã lỗi trang 136, 137, 138 SGK để học sinh biết cách sửa lỗi: Từ khoá Progam sai là: Program(mã lỗi: 36) Tên chương trình vi du1 sai tên chương trình đặt theo quy tắc đặt tên ngơn ngữ lập trình nên khơng chứa dấu cách (mã lỗi: 85) Sau Uses crt phải có dấu;(mã lỗi 85) Sau từ khóa Begin khơng có dấu “;”(mã lỗi: 85) Thủ tục Realn sai, phải Readln(mã lỗi: 3) End; sai phải End.(End từ khóa để kết thúc chương trình) (mã lỗi: 94) Qua ví dụ học sinh bước đầu biết cách biên dịch sửa lỗi thực chương trình máy tính b Những lỗi sai câu lệnh rẻ nhánh lặp - Đối với trường hợp học sinh hay mắc phải lỗi: +Thiếu từ khoá then do, downto,to, + Điều kiện câu lệnh rẻ nhánh biểu thức lôgic + Trong câu lệnh số lệnh >=2 phải đặt cặp từ khoá Begin … End; (Câu lệnh ghép) + Trước từ khố Else khơng có dấu “;” + Giá trị đầu luôn nhỏ giá trị cuối câu lệnh lặp số + Trong câu lệnh lặp While … phải có lệnh làm thay đổi giá trị biến đếm + Điều kiện câu lệnh While … biểu thức Logic + Khai báo thiếu biến sử dụng chương trình + Quên khai báo biến đếm chương trình + Qn đổi cơng thức viết Toán học theo cú pháp viết Pascal Ví dụ : Cho chương trình sau: Program vidu; Uses crt; Var a,b,c: read; x1,x2:read; Begin Clrscr; Write(‘ nhap a,b,c); readln(a,b,c); Delta:=b2-4ac; If delta=0 then Writeln(‘phuong trinh co nghiem kep,’ –b/2a); Else If delta>0 then x1:= (-b+ dela )/2a; x2:=(-b- dela )/2a; Writeln(‘phương trinh co nghiem,’x1,x2); If delta0 then x1:= (-b+ dela )/2a; x2:=(-b- dela )/2a; Writeln(‘phương trinh co nghiem,’x1,x2); Có nhiều lệnh nên phải sử dụng câu lệnh ghép: Begin End; Else If delta>0 then x1:= (-b+ dela )/2a; x2:=(-b- dela )/2a; Writeln(‘phương trinh co nghiem,’x1,x2); If delta0 then Begin x1:= (-b+sqrt(delta))/2*a; x2:=(-b-sqrt(delta))/2*a; Writeln(‘phương trinh co nghiem’,x1,x2); End; If delta then begin 14 tuso := tuso div a ; mauso := mauso div a ; end ; writeln(tuso :5, mauso :5) ; readln; end - Bước Chia lớp thành nhóm u cầu nhóm tìm lỗi sai - Bước Đại diện nhóm lên bảng trình bày kết - Bước Giáo viên thực biên dịch chương trình để học sinh thấy lỗi sai phân tích để học sinh hiểu nguyên nhân sai Các lỗi sai chương trình : + Từ khóa Funtion sai (mã lỗi : 86) , : Function Chưa khai báo kiểu liệu cho tên hàm UCLN (mã lỗi : 86), sửa lại là: Function UCLN(x,y :integer) : integer ; + Câu lệnh UCLN: = x; sai (mã lỗi: 88) Trình biên dịch thơng báo câu lệnh thiếu dấu “(” chất câu lệnh sai đặt sai vị trí Câu lệnh gán giá trị cho tên hàm phải nằm chương trình Cụ thể phải nằm câu lênh end; kết thúc chương trình - Bước Chạy thử chương trình cho học sinh quan sát - Bước Giáo viên đánh giá kết cho điểm nhóm Lỗi ngữ nghĩa - Các lỗi cú pháp chương trình dịch phát thơng báo cho người lập trình biết lỗi mặt ngữ nghĩa khó phát phát thực chương trình cụ thể Qua tiết dạy học sinh viết chương trình tơi phát số lỗi nghữ nghĩa mà học sinh thường gặp phải sau: + Khai báo tốn nhiều nhớ không sát với u cầu tốn Ví dụ 1: Đề bài: Cho dãy A gồm n số nguyên dương a1,a2, an Tìm giá trị nhỏ dãy, đưa vị trí số Học sinh viết khai báo sau: 15 Const nmax=50; Var A:Array[1 nmax] 0f Integer; N,i,min,csmin:integer; Bài toán cho ta dãy số nguyên dương học sinh khai báo Integer có nghĩa nhập giá trị cho phần tử mảng thõa mãn điều sai với yêu cầu toán N,i, csmin