1. Trang chủ
  2. » Tất cả

Thao giảng toàn hội đồng...

20 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 258,76 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hướng dẫn học sinh lớp 11 trường THPT Hoằng Hóa cách nhận biết và sửa lỗi lập trình thường gặp SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT HOẰNG HOÁ SÁNG KIẾN KINH NGHIỆM HƯỚNG DẪN HỌC SINH LỚP 11 TR[.]

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ

TRƯỜNG THPT HOẰNG HOÁ

SÁNG KIẾN KINH NGHIỆM

HƯỚNG DẪN HỌC SINH LỚP 11 TRƯỜNG THPT HOẰNG HÓA

CÁCH NHẬN BIẾT VÀ SỬA LỖI LẬP TRÌNH THƯỜNG GẶP

Người thực hiện: Nguyễn Thị Trường Chức vụ: Giáo viên

SKKN thuộc lĩnh vực (môn): Tin

THANH HÓA NĂM 2018

Trang 2

MỤC LỤC

1.1 Lý do chọn đề tài 3

2.2 Thực trạng vấn đề trước khi sử dụng sáng kiến kinh nghiệm 5

2.4 Hiệu quả của sáng kiến kinh nghiệm 19

Trang 3

1 Mở đầu

1.1 Lý do chọn đề tài

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 Nhiều quốc gia trên thế giới ý thức được rất rõ tầm quan trọng của tin học và có những đầu tư lớn cho lĩnh vực này, đặc biệt trong giáo dục nâng cao dân trí về tin học và đào tạo nguồn nhân lực có chất lượng cao Người Việt Nam có nhiều tố chất thích hợp với ngành khoa học này, vì thế chúng ta hi vọng có thể sớm hoà nhập với khu vực và trên thế giới

Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết Và để làm được việc đó cần

có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích hợp

Ngoài ra các em học sinh của trường đều có đầu vào thấp, các em được ví như “những hạt gạo dưới sàn”, nên kiến thức bị rỗng rất nhiều, ngại học ngại tìm tòi Mặt khác, nội dung môn tin học lớp 11 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 sau đây:

+ Học sinh thường gặp khó khăn khi xác định bài toán

+ 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ứ đề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 Turbo 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ư lợi ích của các chương trình hoạt động trong máy tính, các máy tự động… Qua

đó giúp các em có thêm một định hướng, một niềm đam mê về tin học

Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Hướng dẫn học sinh lớp 11 trường THPT Hoằng Hóa cách nhận biết và sửa lỗi lập trình thường gặp”

1.2 Mục đích nghiên cứu

Do gặp phải những khó khăn trên nên khi lập trình giải các bài toán học sinh thường mắc rất nhiều lỗi, thậm chí có những lỗi các em mắc phải nhiều lần do

Trang 4

không hiểu nguyên nhân xuất hiện lỗi Vì vậy trong nội dung đề tài này tôi nêu

ra một số lỗi phổ biến các em thường mắc phải và cách sửa các lỗi này Với mong muốn giúp học sinh có thể hiểu bài một cách nhanh chóng, nắm chắc kiến thức và kĩ năng lập trình

1.3 Đối tượng nghiên cứu

Đối tượng nghiên cứu trong đề tài này là học sinh các lớp 11A1, 11A2, 11A3 trường THPT Hoằng Hóa năm học 2017 – 2018

Trong đề tài này tôi trình bày một số lỗi thường gặph khi sử dụng Pascal để lập sinh giải các bài toán, từ đó giúp các em rút ra kinh nghiêm lập trình

1.4 Phương pháp nghiên cứu

Viết sáng kiến kinh nghiệm thường xuyên liên tục cũng là nhiệm vụ chính trị của mỗi giáo viên, nhưng cần phải lựa chọn phương pháp nghiên cứu đúng đắn và phù hợp với nhà trường trung học phổ thông Sáng kiến kinh nghiệm đang trình bày của tôi dựa theo các luận cứ khoa học hướng đối tượng, cụ thể: thuyết trình, quan sát, điều tra cơ bản, phân tích kết quả thực nghiệm sư phạm,v.v… phù hợp với bài học và môn học

Trang 5

2 Nội dung sáng kiến kinh nghiệm

2.1 Cơ sở lí luận

Đảng và Nhà nước ta đã nhận thấy được tầm quan trọng của ngành Tin học

và đã đưa môn học này vào nhà trường phổ thông như những môn khoa học khác bắt đầu từ năm học 2006-2007

Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mới phương pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinh

trong hoạt động học tập Điều 24.2 của Luật giáo dục đã nêu rõ : “Phương pháp giáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh” Như vậy, chúng ta

có thể thấy định hướng đổi mới phương pháp dạy học đã được khẳng định, không còn là vấn đề tranh luận Cốt lõi của việc đổi mới phương pháp dạy học ở trường phổ thông là giúp học sinh hướng tới việc học tập chủ động, chống lại thói quen học tập thụ động Với một số nội dung trong đề tài này, học sinh có thể

tự học, tự rèn luyện thông qua một số bài tập, dạng bài tập cụ thể

2.2 Thực trạng vấn đề trước khi sử dụng sáng kiến kinh nghiệm

Qua thực tế giảng dạy ở trường THPT Hoằng Hóa 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 bộ môn này rất khó

Các học sinh thường gặp khá nhiều lỗi khi viết một chương trình trong ngôn ngữ lập trình Pascal

Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2016 – 2017 khi chưa thực hiện đề tài

cầu

Trang 6

2.3 Một số lỗi lập trình thường gặp

(1) Viết sai từ khóa

Từ khóa (từ dành riêng) khi các em viết lên màn hình soạn thảo của ngôn ngữ lập trình Turbo Pascal nó sẽ hiển thị khác so với các từ, các kí hiệu khác đó

là màu trắng

Ví dụ 1: Một số từ khóa thường gặp: Program, Var, Uses, Const, Begin, End, If, Then, Else, For, To, Do, Downto, While, Array, Of, String, Procedure, Function …

(2) Viết sai cú pháp

Khi lập trình, mỗi câu lệnh đưa ra phải tuẩn thủ theo đúng cú pháp do ngôn ngữ lập trình đó quy định Nếu viết sai chương trình dịch sẽ thông báo lỗi

Ví dụ 2: Khai báo tên chương trình: Program <tên chương trình>;

Khai báo biến: Var <danh sách biến>: <kiểu dữ liệu>;

Lệnh gán: <tên biến> := <biểu thức>;

(3) Thiếu kí hiệu ; khi kết thúc câu lệnh

Khi một lệnh kết thúc ta phải sử dụng kí hiệu ; để ngăn cách

Ví dụ 3: Cho x = 100; y = 6,25 hãy khai báo 2 biến trên

Học sinh khai báo biến như sau:

Var x: Byte;

Y: Real;

(4) Chưa khai báo biến trước khi sử dụng

Tất cả các biến dùng trong chương trình đều phải được đặt tên và khai báo cho chương trình dịch biết để lưu trữ và xử lí Mỗi biến chỉ được khai báo một lần

Ví dụ 4: Em có nhận xét gì về chương trình sau? Hãy viết lại cho hợp lí Program Tinh_DTTG;

Uses crt;

Var a,b,c: Integer;

Begin

Trang 7

Write (‘ Nhap do dai 3 canh tam giac ’);

Readln(a, b, c);

p := (a + b + c) / 2;

s := Sqrt (p * (p - a) * (p - b) * (p - c) );

Writeln (‘Dien tich tam giac =’, s : 6 : 2);

Readln

End

Học sinh nhận xét 2 biến p va s có sử dụng trong chương trình nhưng chưa được khai báo Chương trình trên được viết lại như sau:

Program Tinh_DTTG;

Uses crt;

Var a,b,c : Integer;

p,s : Real;

Begin

Clrscr;

Write (‘ Nhap do dai 3 canh tam giac ’);

Readln(a, b, c);

p := (a + b + c) / 2;

s := Sqrt (p * (p - a) * (p - b) * (p - c) );

Writeln (‘Dien tich tam giac =’, s : 6 : 2);

Readln

End

(5) Thừa hoặc thiếu Begin hoặc End

Begin và end luôn luôn đi cặp với nhau Nếu chương trình có sử dụng từ khóa Begin thì phải sử dụng từ khóa End để báo hiệu kết thúc lệnh

Ví dụ 5: Viết chương trình hoán đổi giá trị của x và y

Học sinh viết như sau:

Program Hoandoi;

Uses crt;

Trang 8

Var x, y, z : Integer;

Begin

Clrscr;

Write(‘ Nhap x, y:’);

Readln(x, y);

Begin

z := x;

x := y;

y:= z;

end;

Writeln (‘ Ket qua:’, x: 4, y:4);

Readln

End

(6) Khai báo sai miền chỉ số cho dữ liệu kiểu mảng

Ví dụ 6: 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;

(7) Giá trị biến điều khiển vượt quá miền chỉ số của mảng

Ví dụ 7: Nhập vào một dãy số gồm 7 phần tử và cho biết dãy vừa nhập có tạo thành cấp số cộng không?

Học sinh lập trình giải bài toán trên như sau:

Var a: array[1 7] of integer;

i, d : integer;

kt : boolean;

Begin

Write(‘nhap day so:’);

Trang 9

For i := 1 to 7 do

Begin

Write(‘a[’ ,i, ‘]’);

Readln(a[i]);

End;

d := a[2] - a[1]; kt := true; i := 1;

while (kt) and (i<=7) do

if (a[i] - a[i - 1] <> d) then kt := false

else i := i+1;

if kt then writeln(‘Day so tao thanh cap so cong!’)

else writeln(‘Day so khong tao thanh cap so cong!’);

readln

End

Khi thực hiện chương trình trên, chương trình dịch không báo lỗi nhưng kết quả khi thực hiện chương trình sẽ bị sai lệch Khi thực hiện từng bước chương trình ta có thể khắc phục lỗi trên bằng cách gán lại giá trị ban đầu cho biến đếm i=2

(8) Dùng cùng tên biến điều khiển cho các vòng lặp for lồng nhau

Ví dụ 8: Tính tổng S=1k+2k+….+nk

Học sinh lập trình giải bài toán trên như sau:

S := 0;

For i :=1 to n do

Begin

T:=1;

Trang 10

For i:=1 to k do

T:=T*i;

S:=S+T;

End;

Đoạn chương trình trên có thể lặp vô tận khi kết thúc vòng lặp con i luôn nhận giá trị bằng k

Để khắc phục lỗi này, chỉ cần chú ý các vòng lặp lồng nhau phải sử dụng biến điều khiển khác nhau

(9) Sử dụng dấu ; sai vị trí

Trước Else không có dấu chấm phẩy

Ta có cấu trúc mô tả câu lệnh rẽ nhánh dạng đủ như sau:

If <điều kiện> then <câu lệnh 1> else <câu lệnh 2>;

Vậy cả một cấu trúc đầy đủ như trên mới gọi là một lệnh Nhưng khi lập trình các em thường có thói quen cứ có một lệnh thì sử dụng dấu “ ;” để ngăn cách

Ví dụ 9: Hãy chỉ ra lỗi và sử lỗi lập trình sau:

If b>a Then max:=b; else max:=a;

Học sinh làm: Lỗi sai khi sử dụng dấu ; sau lệnh max:=b Lệnh trên được sửa lại như sau: If b>a Then max:=b else max:=a;

(10) Không phân biệt được hằng xâu và biến

Học sinh cần chú ý rằng hằng xâu phải đặt trong cặp nháy đơn còn biến thì không

Ví dụ 10: ‘x’: x trong trường hợp này được gọi là hằng xâu

x: x trong trường hợp này được gọi là biến

(11) Tràn số do kết quả tính toán vượt quá giới hạn

Function GT(n:integer): integer;

Trang 11

Var i,t: integer;

Begin

T:=1;

For i:=2 to n do t:=t*i;

Gt:=t;

End;

Begin

Write(‘GT(8)=’, GT(8));

Readln;

End

Khi thực hiện chương trình GT(8)=-25126 là sai vì thực tế 8!=40320

Lỗi này do khai báo hàm trả về số nguyên nên miền giá trị tối đa là 32767

(12) Sử dụng tên hàm làm biến cục bộ

Do lệnh trả kết quả cho tên hàm rất giống một lệnh gán bình thường nên học sinh thường nhầm tên hàm là biến cục bộ Vì vậy khi viết chương trình để tiết kiệm biến cục bộ học sinh đã sử dụng tên hàm làm biến cục bộ

Function GT(n:integer):Longint;

Var i:integer;

Begin

For i:=2 to n do GT:=GT*i;

End;

Trong thân hàm đã sử dụng tên hàm làm biến cục bộ nên khi biên dịch sẽ báo lỗi gọi hàm nhưng thiếu tham số do chương trình hiểu GT:=GT*i là lời gọi đệ qui

Trang 12

Để tránh lỗi này cần lưu ý với học sinh: để trả kết quả cho hàm (không đệ quy), tốt nhất nên tính kết quả hàm vào một biến cục bộ, trước khi kết thúc ta mới gán tên hàm bằng giá trị biến này để trả giá trị về cho hàm

(13) Chưa hiểu thứ tự ưu tiên phép toán

Thứ tự ưu tiên các phép toán trong ngôn ngữ lập trình Pascal như sau:

- Lời gọi hàm

- Biểu thức trong ngoặc

- Toán tử NOT

Toán tử đổi dấu:

* / div mod

- + - or

- >=,>,<=,<,=,<>

(14) Không hiểu nguyên tắc làm tròn số đối với số thực

Trong toán học: 3 1 1 1

2  2  2  2 Tuy nhiên trong Pascal biểu thức sau sẽ cho kết quả sai:

If 3/sqrt(2)=1/sqrt(2)+1/sqrt(2)+1/sqrt(2) then write(‘Dung!’) else write(‘sai!’);

Khi thực hiện vế trái máy tính chỉ tính sai số 1lần, còn vế phải chịu sai số

3 lần Do đó kết quả khi thực hiện là không giống nhau Đây chỉ là 1 nguyên nhân khiến cho quá trình tính toán gần đúng trên máy tính thành tính toán sai

Để tránh điều này bạn nên tuân thủ theo các qui tắc dưới đây:

- So sánh bằng nên dùng biểu thức a b 

Const e=0.0001;

If abs(a-b)<e then write(‘Dung!’) else write(‘sai!’);

Trang 13

- Quá trình tối ưu tính toán biểu thức của ngôn ngữ có thể làm ảnh hưởng đến kết quả của phép toán Trong Pascal chỉ ép được qua lại các kiểu nguyên mà không cho ép từ kiểu thực sang kiểu nguyên và ngược lại Để chuyển từ kiểu thực sang kiểu nguyên ta dùng hàm Round hoặc Trunc

(15) Ví dụ về một số dạng bài tập

Có nhiều dạng bài tập: Khi dạy lập trình nói chung và Pascal nói riêng, nhiều khi người dạy chỉ chú ý tới các bài tập về lập trình mà không nghĩ rằng trong những bước đầu để học sinh hiểu bài cần phải đưa ra nhiều dạng bài tập, trong số các dạng bài tập đó ở đây ta có thể nêu ra một số dạng như sau: bài tập về viết thuật toán, bài tập về đọc hiểu chương trình, bài tập về sửa lỗi chương trình,… a) Bài tập về viết thuật toán:

Theo định nghĩa trong sách giáo khoa Tin học 10, thuật toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định, sao cho sau khi thực hiện dãy thao tác ấy từ INPUT của bài toán ta nhận được OUTPUT cần tìm Nói cách khác, trình bày thuật toán tức là chỉ ra các bước cần thực hiện để đi đến kết quả

Việc trình bày thuật toán trước khi viết chương trình là hết sức quan trọng Thuật toán đúng thì chương trình mới có khả năng đúng, còn một thuật toán sai chắc chắn là cho một chương trình sai Tuy nhiên đối với phần lớn học sinh lớp

11 thường bỏ qua bước này do tâm lý học sinh không thích các loại bài tập như thế

Trong nhiều trường hợp tưởng như không cần thuật toán cụ thể học sinh vẫn viết được chương trình Thực tế thuật toán đó không được viết ra nhưng đã hình thành sẵn trong đầu người viết

Với các học sinh, cần phải dành một lượng thời gian thích hợp để rèn luyện loại bài tập này Phải làm sao cho việc viết thuật toán trở thành kĩ năng để khi các em lập trình trên máy, tuy không cần viết thuật toán ra song các em có thể hình dung được thuật toán đó trong đầu Cần phải tạo cho các em có ý thức khi viết một chương trình Pascal là phải tuân thủ theo trình tự sau:

Bài toán Xây dựng thuật toánViết chương trình

Ví dụ: Có n hộp có khối lượng khác nhau và một cái cân dĩa Hãy chỉ ra cách cân để tìm được hộp nặng nhất.Với bài toán trong thực tế như trên ta có thể phát biểu lại dưới dạng bài toán trong toán học như sau: Cho tập hợp A có số

Trang 14

phần tử hữu hạn Tìm phần tử lớn nhất trong tập A nói trên Khi đó ta có thể trình bày thuật toán như sau:

1 Nếu chỉ có 1 hộp thì đó chính là hộp nặng nhất và kết thúc

2 Nếu số hộp n>1 thì

Chọn 2 hộp bất kì và đặt lên bàn cân

Giữ lại hộp nặng hơn và cất hộp nhẹ đi chỗ khác

3 Nếu không còn hộp chưa được cân thì chuyển sang bước 5, ngoài ra: Chọn một hộp bất kì và để lên đĩa cân còn trống

Giữ lại hộp nặng hơn, cất hộp nhẹ sang chỗ khác

4 Trở lại bước 3

5 Hộp còn lại trên cân là hộp nặng nhất và kết thúc

b) 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:

Program vd2;

Uses crt;

Var i:integer;

Begin

Clrscr;

I:=7;

While i>1 do

Begin

Ngày đăng: 01/11/2022, 19:35

TỪ KHÓA LIÊN QUAN

w