Sáng kiến kinh nghiệm Một số phương pháp giúp học sinh phát hiện lỗi và học tốt ngôn ngữ lập trình Pascal Lớp 8
Để đáp ứng cho nền kinh tế phát triển theo hướng công nghiệp 4.0 thì người lao động và làm việc hiện nay cần phải biết sử dụng từ mức độ biết đến thành thạo những trang thiết bị ở lĩnh vực công nghệ là điều rất cần thiết với mọi người, trong đó lĩnh vực giáo dục nói chung và phân môn Tin học nói riêng ở nhà trường đóng vai trò khá quan trọng đối với học sinh. Mà xuất phát điểm cho các trang thiết bị sẳn có trong lĩnh vực công nghệ là khâu lập trình cho các máy móc hay dây chuyền sản xuất, vì thế bộ môn lập trình Pascal là môn học rất quan trọng giúp học sinh hình thành năng lực lập trình để giải quyết nhu cầu thực tế cuộc sống.
Tuy nhiên, trong thực tế, Tin học còn là một môn học tự chọn ở các trường phổ thông và là môn chính khóa với mô hình trường học mới nên học sinh còn nhiều bỡ ngỡ, chưa nhận thấy tầm quan trọng của môn học này. Nội dung tin học lập trình lớp 8 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà 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.
Nguyên nhân dẫn đến những khó khăn mà học sinh thường gặp là rất phong phú nhưng có thể thấy một số nguyên nhân chính như (Học sinh thường gặp khó khăn khi xác định bài toán, học sinh khó liên hệ phương pháp giải một bài toán trong Toán học với thuật giải trong Tin học). Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học ngôn ngữ lập trình Pascal là khởi đầu cho việc tiếp cận 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, các máy tự động, Robot, … Qua đó giúp các em có thêm một định hướng, một niềm đam mê về Tin học, về nghề nghiệp mà các em chọn lựa sau này, xuất phát từ cơ sở trên đã thúc đẩy tôi chọn biện pháp “ Một số phương pháp giúp học sinh phát hiện lỗi và học tốt ngôn ngữ lập trình Pascal lớp
” .
Tuy nhiên, trong thực tế, Tin học còn là một môn học tự chọn ở các trường phổ thông và là môn chính khóa với mô hình trường học mới nên học sinh còn nhiều bỡ ngỡ, chưa nhận thấy tầm quan trọng của môn học này. Nội dung tin học lập trình lớp 8 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà 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.
Nguyên nhân dẫn đến những khó khăn mà học sinh thường gặp là rất phong phú nhưng có thể thấy một số nguyên nhân chính như (Học sinh thường gặp khó khăn khi xác định bài toán, học sinh khó liên hệ phương pháp giải một bài toán trong Toán học với thuật giải trong Tin học). Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học ngôn ngữ lập trình Pascal là khởi đầu cho việc tiếp cận 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, các máy tự động, Robot, … Qua đó giúp các em có thêm một định hướng, một niềm đam mê về Tin học, về nghề nghiệp mà các em chọn lựa sau này, xuất phát từ cơ sở trên đã thúc đẩy tôi chọn biện pháp “ Một số phương pháp giúp học sinh phát hiện lỗi và học tốt ngôn ngữ lập trình Pascal lớp
” .
Bạn đang xem tài liệu "Sáng kiến kinh nghiệm Một số phương pháp giúp học sinh phát hiện lỗi và học tốt ngôn ngữ lập trình Pascal Lớp 8", để 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 Một số phương pháp giúp học sinh phát hiện lỗi và học tốt ngôn ngữ lập trình Pascal Lớp 8

o viên hướng dẫn học sinh cách tìm kết quả mà tác giả đã xây dựng cho bài toán qua các bước của thuật toán. Ví dụ: Hãy cho biết kết quả của thuật toán sau: Bước 1- SUM ß 0; i ß 0; Bước 2- Nếu i > 100 thì chuyển tới bước 4. Bước 3- i ßi + 1; SUM ß SUM + i. Quay lại bước 2. Bước 4- Thông báo giá trị SUM và kết thúc thuật toán. 2 .1.3. Bài tập về đọc hiểu chương trình. Loại bài tập này sẽ giúp phát triển tư duy, giúp học sinh hiểu bài, nhất là khi dạy các cấu trúc lệnh. Đối với dạng bài tập này, giáo viên nên hướng dẫn các em thực hiện tuần tự từng lệnh theo từng câu lệnh cụ thể. Ví dụ: Cho biết kết quả khi thực hiện chương trình sau: Uses crt; Var i:integer; Begin Clrscr; I:=7; While i>1 do Begin If (i mod 2)0 then i:=i*3+1; Else i:=i div 2; Writeln(i); End; Readln End. - 7 - 2 .1.4. Bài tập về sửa lỗi chương trình. Ví dụ: Để tìm số lớn nhất trong 3 số a,b,c được nhập vào từ bàn phím, có người đã viết chương trình như sau: Uses crt; Var a,b,c:integer; Begin Clrscr; Write(‘nhap vao 3 so:’); Readln(a,b,c); If a<b then a:=b Else If a<c then a:=c; Write(‘So lon nhat la:’,a); Readln End. Chương trình trên cho đáp số lúc đúng, lúc sai tuỳ thuộc vào a,b,c. Hãy giải thích tại sao và sửa lại cho đúng. Ta thực hiện chương trình trên với 2 bộ input sau đây: - a=3,b=4,c=5 a 3 4 b 4 c 5 a<b T (3<4) a<c Vậy số lớn nhất là 4 "Kết quả sai - a=5,b=4,c=7 a 5 7 b 4 c 7 a<b F (5<4) a<c T (5<7) Vậy số lớn nhất là 7 "Kết quả đúng Chương trình trên thực hiện lúc đúng lúc sai do chương trình mới chỉ so sánh 2 số a và b thôi đã đưa ra kết luận. Ta có thể sửa lại chương trình như sau: Uses crt; Var a,b,c:integer; Begin Clrscr; Write(‘nhap vao 3 so:’); Readln(a,b,c); If a<b then Begin If b<c then a:=c else a:=b; - 8 - End Else If a<c then a:=c; Write(‘So lon nhat la:’,a); Readln End. 2 .2. Trình bày thuật toán, viết chương trình theo đúng thuật toán đó. Một bài toán có thể có nhiều cách giải khác nhau ứng với mỗi cách giải ta có một thuật toán. Để giúp học sinh có khả năng nhanh chóng nắm được ý tưởng của người khác cần luỵên cho các em biết giải bài toán theo một thuật toán đã được trao đổi. Khả năng hiểu được nhanh ý tưởng của người khác cũng chính là yêu cầu trong hoạt động nhóm. Phát triển khả năng này là phát triển một phẩm chất tư duy quí báu để các em biết hợp tác trong công việc, một trong những yêu cầu của người lao động, sáng tạo trong thời đại mới, thời đại mà một sản phẩm là sự kết tinh lao động của nhiều người. Ví dụ: Lập chương trình cắt bỏ các kí tự trống thừa của một xâu cho trước. Hãy viết chương trình theo thuật toán sau: - Bước 1- i :=1;Tword:= ‘’;XauM:= ‘’; - - - Bước 2- Kiểm tra xau[i] ‘ ’. nếu đúng thì đến bước 3, sai đến bước 5. Bước 3- Tword:=Tword+xau[i] Bước 4- Kiểm tra i<=length(xau). Đúng thì tăng i lên 1 và quay lại bước 2; sai thì đến bước 8. - - Bước 5- Kiểm tra Tword ‘’. Đúng thì xauM:=xauM+Tword+ ‘ ’ ; gán Tword= ‘’ và quay lại bước 4. Sai thì chuyển đến bước 6. Bước 6- Kiểm tra Tword ‘’. Đúng thì gán xauM:=xauM+Tword; sai thì xoá kí tự trống ở vị trí length(xauM) của xauM. - - Bước 7- Gán xau:=xauM; Bước 8- Kết thúc. Chương trình có thể được viết như sau: Uses crt; Var xau, xauM,Tword:string; I:byte; Begin - 9 - Wrire(‘nhap vao mot xau ki tu’);readln(xau); xauM:= ‘’;Tword:= ‘’; for i:=1 to length(xau) do if xau[i] ‘ ’ then Tword:=Tword+xau[i]; else begin if Tword ‘’ then xauM:=xauM+Tword+ ‘ ’; Tword:= ‘’; End; If Tword ‘’ then xauM:=xauM+Tword Else xau:=xauM; Write(‘Xau sau khi xoa cac ki tu trang thua la:’,xau); Readln End. Tuy nhiên bài toán trên ngoài cách giải trên ta có thể sử dụng thuật toán khác để giải. Thuật toán như sau: Bước 1- Xoá các kí tự trong thừa ở đầu. Sử dụng vòng lặp while: while xau[1]= ‘ ’ do delete(xau,1,1); Bước 2- Xoá các kí tự trống ở cuối. Sử dụng vòng lặp while: while xau[length(xau)]= ‘ ’ do delete(xau,length(xau),1); Bước 3- Xoá các kí tự trống thừa giữa các từ. Kiểm tra 2 kí tự liền kề nhau có hơn 1 kí tự trống thì xoá kí tự trống. While pos( ‘ ’,xau)0 do delete(xau,pos( ‘ ’,xau),1) 2 .3. Nhận xét lời giải bài toán, phát hiện thiếu sót từ chương trình. Ví dụ: Viết chương trình đếm và in ra các số trong 1 xâu đã cho. Cho đoạn chương trình giải quyết công việc trên như sau: I:=1; dem:=0; While i<=length(xau) do Begin If (xau[i]>= ‘0’) and (xau[i]<= ‘9’) then - 10 - Begin xauM:= ‘’; while (xau[i]>= ‘0’) and (xau[i]<= ‘9’) do begin xauM:=xauM+xau[i]; i:=i+1; end; dem:=dem+1; val(xauM,a[dem],n); i:=i-1; End; I:=i+1; End; Write(‘xau co ’,dem, ‘ so la:’); For i:=1 to dem-1 do write(a[i], ‘,’); Write(a[dem]); Đối với bài tập này, giáo viên yêu cầu học sinh nhận xét chương trình đã thực hiện đúng hay chưa, có đúng đối với tất cả các trường hợp hay không? Học sinh có thể phát hiện chương trình chỉ đúng với xâu chứa các số thông thường, còn nếu xâu chứa số thực thị chương trình chưa cho kết quả đúng. Từ nhận xét đó giáo viên hướng dẫn các em bổ sung và chỉnh sửa lại chương trình. 2 .4 Phân chia một bài toán thành nhiều bài toán nhỏ Trong thực tế chúng ta thường gặp những vấn đề lớn mà với sức của một người thì không thể giải quyết được. khi gặp những vấn đề như vậy, ta thường nhờ bạn bè, người thân giúp một tay, mỗi người lo một phần việc.Khi giải một bài toán, ta thường chia bài toán lớn ban đầu thành nhiều bài toán con để việc giải bài toán ban đầu trở nên dễ dàng hơn, Và như vậy, khi cần giải quyết một vấn đề nào đó bằng máy tính, để viết một chương trình phức tạp ta có thể viết từng phần chương trình giải quyết từng vấn đề nhỏ. Như vậy, việc phân chia một bài toán thành nhiều bài toán nhỏ sẽ giúp cho việc giải quyết bài toán mạch lạc, vịêc kiểm tra sai sót thuận tiện, có thể thấy kết quả ở từng bước và có thể điều chỉnh kịp thời. - 11 - 2 .5. Sửa lỗi chương trình. Trong dạy lập trình Pascal việc giúp học sinh nhận ra lỗi và cách sửa các lỗi đó là rất cần thiết và quan trọng. Để có thể sửa lỗi nhanh chóng cần có sự tích luỹ kinh nghiệm những lỗi thường hay gặp: MỘT SỐ LỖI THƯỜNG GẶP: (LỖI BIÊN DỊCH) MÃ LỖI THÔNG BÁO LỖI Unknown identifier Duplicate indentifier Syntax error Ý NGHĨA Tên gọi chưa được mô tả Khai báo lặp một tên gọi Lỗi cú pháp 3 4 5 8 String constant exceeds line Hằng xâu vượt quá một dòng 2 3 3 4 5 5 5 6 8 8 8 8 8 9 9 9 9 9 9 9 6 6 7 2 0 4 7 3 5 6 7 8 9 0 1 2 3 4 5 6 Type mismatch Begin expected End expected Error in expression DO expected OF expected THEN expected Invalid file type “;” expected “:” expected “,” expected “(” expected “)” expected “=” expected “:=” expected “(.” expected “.)” expected “.” expected “..” expected Too many variables Sai kiểu (kiểu không thích hợp) Thiếu BEGIN Thiếu END Lỗi trong biểu thức Thiếu DO Thiếu OF Thiếu THEN Kiểu tệp không hợp lệ Thiếu dấu “;” Thiếu dấu “:” Thiếu dấu “,” Thiếu dấu “(” Thiếu dấu “)” Thiếu dấu “=” Thiếu dấu “:=” Thiếu dấu “(.” Thiếu dấu “.)” Thiếu dấu “.” Thiếu dấu “..” Quá nhiều biến MỘT SỐ LỖI THƯỜNG GẶP: (LỖI SINH RA TRONG QUÁ TRÌNH CHẠY CHƯƠNG TRÌNH) Runtime Error MÃ LỖI THÔNG BÁO LỖI File not found Ý NGHĨA Không tìm thấy tệp Không tìm thấy đường dẫn Lỗi khi đọc đĩa 2 3 Path not found Disk read error Disk write error File not open Division by zero 1 1 1 2 00 01 03 00 Lỗi khi ghi đĩa Tệp chưa được mở Lỗi chia cho số 0 - 12 - 3 . Một số bài tập tham khảo (dành cho học sinh khá, giỏi): Dạng 1: Viết chương trình giải các dạng phương trình. Ví dụ: Viết chương trình giải phương trình bậc 2 (ax2 + bx +c =0) Uses crt; Var a,b,c,d,x,x1,x2:real; Begin Writeln('GIAI PHUONG TRINH BAC II:'); Write('Nhap he so a=');readln(a); Write('Nhap he so b=');readln(b); Write('Nhap he so c=');readln(c); If a=0 then If b=0 then If c=0 then Writeln('Phuong trinh co vo so nghiem') Writeln('Phuong trinh vo nghiem') Else Else Else Writeln('Phuong trinh co mot nghiem: x=',-c/b:4:2) Begin d:=b*b-4*a*c; If d=0 then Writeln('Phuong trinh co nghiem kep: x=',-b/(2*a):4:2) If d<0 then Writeln('Phuong trinh vo nghiem') Else Else Begin x1:= (-b+sqrt(d))/(2*a); x2:= (-b-sqrt(d))/(2*a); Write('Phuong trinh co hai nghiem: ‘); Writeln(‘ x1=',x1:4:2,' va x2=',x2:4:2); End; End; - 13 - Readln End. Dạng 2: Viết chương trình giải các bài toán cổ. Ví dụ: Bài toán cổ Trăm trâu trăm cỏ Trâu đứng ăn năm Trâu nằm ăn ba Trâu già ba con một bó. Hỏi có bao nhiêu con mỗi loại? Uses crt; Var td,tn,tg:integer; Begin Clrscr; Writeln(' TRAM TRAU TRAM CO:'); Writeln('----------------------------------'); Writeln('Trau dung Trau nam Trau gia'); For td:=0 to 20 do For tn:=0 to 33 do For tg:=0 to 100 do If ((5*td+3*tn+tg div 3=100) and (td+tn+tg=100) and (tg mod 3=0))then Writeln(td:5, tn:5, tg:5); Readln; End. Dạng 3: Viết chương trình tính diện tích một hình Viết các chương trình con tính diện tích tam giác, tròn, vuông, chữ nhật trong một chương trình. Sau đó hỏi chọn một trong các phương án tính diện tích bằng cách chọn trong bảng chọn lệnh sau: 0 1 2 . Không làm gì hết và trở về màn hình soạn thảo. . Tính diện tích hình vuông . Tính diện tích hình tròn - 14 - 3 4 . Tính diện tích tam giác . Tính diện tích hình chữ nhật Uses crt; Procedure HV; Var s,a:real; Begin Writeln('TINH DIEN TICH HINH VUONG:'); Write('Nhap chieu dai cua canh a = ');readln(a); s:=a*a; Writeln('Dien tich hinh vuong = ',s:6:2); Procedure HT; End; Var s,r:real; Begin Writeln('TINH DIEN TICH HINH TRON:'); Write('Nhap ban kinh R = ');readln(r); s:=pi*r*r; Writeln('Dien tich hinh tron = ',s:6:2); End; Procedure TG; Var a, b, c,s,p:real; Begin Writeln('TINH DIEN TICH TAM GIAC:'); Write('nhap a =');readln(a); Write ('nhap b =');readln(b); Write('nhap c =');readln(c); If ((a+b)>c)and((b+c)>a)and((a+c)>b) then Begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); Writeln('Chu vi tam giac:',2*p:4:2) ; Writeln('Dien tich tam giac:',s:4:2); End Else - 15 - Writeln(a,', ',b,', ',c,' khong phai la ba canh cua tam giac') ; End; Procedure CN; Var a, b, s:real; Begin Writeln('TINH DIEN TICH HINH CHU NHAT:'); Write('Nhap chieu dai a =');readln(a); Write('Nhap chieu rong b= ');readln(b); s:= a*b; Writeln('Dien tich hinh chu nhat, s= ',s:6:2); End; Procedure menu; Var d:integer; Begin Clrscr; Writeln('CHON MOT TRONG CAC PHUONG AN SAU:'); Writeln('0: Quay ve man hinh soan thao'); Writeln('1: Tinh dien tich hinh vuong'); Writeln('2: Tinh dien tich hinh tron'); Writeln('3: tinh dien tich tam giac'); Writeln('4: Tinh dien tich hinh chu nhat'); Write(' Hay chon mot phuong an: '); readln(d); Writeln; Case d of 0 1 2 3 4 : Exit; : HV; : HT; : TG; : CN; End; End; Begin - 16 - menu; Readln; End. Dạng 4: Viết chương trình giải các bài toán thực tế. Ví dụ: viết chương trình giải bài toán sau : Hằng tháng các hộ dân đều nhận được hóa đơn tiền điện. Tiền điện tiêu dùng của mỗi hộ gia đình được tính như sau: - - - - - 100 số đầu tiên: mỗi số phải trả 1 678 đồng. Từ 101 đến 150 số mỗi số phải trả 1 734 đồng. Từ 151 đến 200 số mỗi số phải trả 2 014 đồng. Từ 201 số trở lên mỗi số phải trả 2 500 đồng Số tiền phải trả là tổng số tiền tính được cộng thêm 10% thuế VAT. Biết rằng lượng điện tiêu thụ trong một tháng của nhà bạn Tuấn là a ( KW). Hãy tính số tiền điện phải trả cho tháng đó của gia đình bạn Tuấn. Program tinh_tien_dien; Var S: real; a: integer; Begin Writeln ( ‘ Cho biet so dien tieu thu:’) ; Readln(a); If a<=100 then S:= 1678*a else If a<=150 then S:= 100*1678+ (a-100)*1734 else If a<= 200 then S:= 100*1678+50*1734+( a-150)*2014 else S:= 100*1678+50*1734+ 50*2014+ ( a-200)*2500; Writeln (‘ So tien phai tra la:’, S+S*10/100: 9:0, ‘VND’); Readln End. Dạng 5: Viết chương trình kiểm tra số nguyên tố Nhập vào một số n bất kỳ và kiểm tra xem n có phải là số nguyên tố không. uses crt; var n,i:integer; BEGIN clrscr; write('Nhap so nguyen duong n: '); readln(n); if n<2 then writeln(n,' khong la so nguyen to') else begin - 17 - i:=2; while ((i0)) do i:=i+1; if i>trunc(sqrt(n)) then writeln(n,' la so nguyen to') else writeln(n,' khong la so nguyen to'); end; readln END. Dạng 6: Viết chương trình tính quãng đường di chuyển với 2 vận tốc khác nhau Viết chương trình để giải bài toán sau: 1 người di chuyển trong thời gian đầu t1 (giờ) bằng xe máy với vận tốc đều là v1(km/h). Sau đó người đó đi bộ vời vận tốc đều là v2(km/h), trong t2 (phút). Hãy tính quãng đường S mà người đó đi được đi được. program TinhQuangDuong; var t1, t2, v1, v2, S: real; begin write('Nhap vao thoi gian di chuyen bang xe may (h): '); readln(t1); write('Nhap vao van toc xe may (km/h): '); readln(v1); write('Nhap vao thoi gian di bo (phut): '); readln(t2); write('Nhap vao van toc di bo (km/h): '); readln(v2); S := t1 * v1 + t2 / 60 * v2; writeln('Quang duong nguoi do di duoc la: ', S:0:2, ' km'); end. IV. HIỆU QUẢ ÁP DỤNG. - Khi thực hiện thực nghiệm qua các đối tượng học sinh đã nêu trên, đa số các em tránh được các lỗi thường gặp khi học lập trình Pascal. Một số không ít học sinh có tiến bộ rõ rệt khi viết các chương trình có sử dụng lập trình có cấu trúc. Nâng cao việc yêu thích học tin học đối với một bộ phận học sinh và một số em có định hướng nghề nghiệp sau này. - - - 18 - - Bảng số liệu kết quả đạt được của học sinh lớp 8 cuối năm học 2021-2022 sau khi thực hiện biện pháp: Giỏi TL 30% Khá Trung bình Yếu TL STT Lớp Sỉ số SL 9 SL 12 12 TL SL 9 TL 30% SL 0 0 1 2 8A 8C 30 32 40% 37.5% 20 62.5% 0 V. KẾT LUẬN. Trong nội dung của biện pháp này, với mong muốn giúp cho việc dạy và học ngôn ngữ lập trình nói chung và Pascal nói riêng của giáo viên và học sinh được tốt hơn. Qua quá trình, áp dụng biện pháp tôi nhận thấy nội dung này phù hợp với nhu cầu thực tiễn trong quá trình giảng dạy nhất là khi thực hành. Khi áp dụng biện pháp cũng đòi hỏi người hướng dẫn phải luôn biết tự nghiên cứu, tạo cảm hứng và khơi gợi sự sáng tạo cho học sinh. Đồng thời nó có sức ảnh hưởng đến học sinh qua các bài kiểm tra, nhất là học sinh được làm việc ở dạng kiến thức tổng quát của một nội dung Toán học cụ thể. Biện pháp này cũng có thể áp dụng dạy kiến thức nâng cao cho học sinh ở cấp trung học phổ thông lớp 11 chương trình GDPT 2006 với mô đun lập trình Pascal. Trên đây là toàn bộ kinh nghiệm của tôi qua nhiều năm liền dạy ở khối lớp 8 cũng như tham khảo qua nhiều nguồn thông tin, tư liệu khác nhau, rất mong được sự đóng góp của các đồng nghiệp nhằm giúp biện pháp của tôi được hoàn thiện hơn. Mộ Đức, ngày 10 tháng 10 năm 2022 Người viết Phan Vũ Song Quỳnh Xác nhận của Hiệu trưởng Biện pháp đã được áp dụng cho .........................và được đánh giá ở mức ............. Hiệu trưởng - 19 - Võ văn Dung - 20 -
File đính kèm:
sang_kien_kinh_nghiem_mot_so_phuong_phap_giup_hoc_sinh_phat.docx
Sáng kiến kinh nghiệm Một số phương pháp giúp học sinh phát hiện lỗi và học tốt ngôn ngữ lập trình P.pdf