1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Một số giải pháp giúp học sinh xử lí lỗi khi học ngôn ngữ lập trình pascal lớp 11

20 131 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 196,5 KB

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

Nội dung

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT NGUYỄN TRÃI SÁNG KIẾN KINH NGHIỆM TÊN ĐỀ TÀI MỘT SỐ GIẢI PHÁP GIÚP HỌC SINH XỬ LÍ LỖI KHI HỌC NGÔN NGỮ LẬP TRÌNH PASCAL LỚP 11 Người thực hiệ

Trang 1

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

TRƯỜNG THPT NGUYỄN TRÃI

SÁNG KIẾN KINH NGHIỆM

TÊN ĐỀ TÀI

MỘT SỐ GIẢI PHÁP GIÚP HỌC SINH XỬ LÍ LỖI KHI HỌC

NGÔN NGỮ LẬP TRÌNH PASCAL LỚP 11

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

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

THANH HOÁ NĂM 2019.

Trang 2

MỤC LỤC

1 MỞ ĐẦU

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

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

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

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

1.5 Những điểm mới của sáng kiến kinh nghiệm……….3

2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 Cơ sở lý luận 4

2.2 Thực trạng của đề tài 4

2.3 Giải pháp đã thực hiện đề tài……… ………….…5

2.3.1 Cách xử lí khi màn hình Pascal chạy trong Window bị thu nhỏ….….5 2.3.2 Một số lỗi sai thường gặp của học sinh trong lập trình Pascal… 6

2.3.3 Một số kinh nghiệm dạy lập trình Pascal 8

2.4 Kết quả thực nghiệm……… …….……… 15

3 KẾT LUẬN, KIẾN NGHỊ 3.1 Kết luận……….………18

3.2 Kiến nghị……… ………18

DANH MỤC TÀI LIỆU THAM KHẢO 19

Trang 3

1 MỞ ĐẦU 1.1 Lý do chọn đề tài

- Nội dung ngôn ngữ lập trình Pascal tin 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 cơ bản sau đây:

 Màn hình Pascal tự động thu nhỏ khi làm việc trong Windows

 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ứ đ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 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ư ích lợi của các chương trình hoạt động trong máy tính 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 sau này

- Xuất phát từ cơ sở trên, tôi đã chọn đề tài “ Một số giải pháp giúp học sinh

xử lí lỗi khi học ngôn ngữ lập trình Pascal lớp 11”.

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

- Do gặp phải những khó khă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 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

- Tuy nhiên, với đối tượng học sinh khá giỏi đa phần các em rất hào hứng với việc học lập trình, cụ thể là ngôn ngữ lập trình Turbo Pascal Do đó trong đề tài này tôi cũng trình bày thêm một số giải pháp cũng như kinh nghiệm dạy lập trình Pascal đề 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 Pascal

1.3 Đối tượng, kế hoạch và phạm vi nghiên cứu.

- Đối tượng nghiên cứu: học sinh các lớp 11B1, 11B2, 11B7, 11B8 trường THPT Nguyễn Trãi năm học 2018-2019

- Kế hoạch nghiên cứu: Trực tiếp qua các bài học trong suốt quá trình dạy

- Phạm vi nghiên cứu: Toàn bộ chương trình tin học lớp 11

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

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

Trang 4

theo phân tích kết quả thực hành trực tiếp khi giảng dạy bài toán bằng ngôn ngữ lập trình Pascal lớp 11 trên máy tính, qua đó phát hiện ra những lỗi mà học sinh thường hay mắc phải Từ đó giúp học sinh khắc phục những sai sót cần sửa chữa

1.5 Những điểm mới của sáng kiến kinh nghiệm

Điểm mới trong sáng kiến kinh nghiệm này là học sinh có thể sửa những lỗi từ cơ bản đến phức tạp thường mắc phải khi sử dụng ngôn ngữ lập trình Đồng thời học sinh khá giỏi có thể giúp đỡ bạn sửa lỗi mà không cần giáo viên hướng dẫn lại những lỗi thường gặp khi thực hành tại phòng máy

Ngoài ra, tôi mạnh dạn trình bày sáng kiến kinh nghiệm này còn để phục

vụ cho những năm dạy tiếp theo

Trang 5

2 NỘI DUNG

2.1 Cơ sở lí luận

Nhiệm vụ trung tâm trong trường học THPT là hoạt động dạy của thầy và

hoạt động học của trò, xuất phát từ mục tiêu đào tạo “ Nâng cao dân trí, đào

tạo nhân lực, bồi dưỡng nhân tài” Giúp học sinh củng cố những kiến thức

phổ thông, đặc biệt là môn tin học là môn học rất cần thiết và không thể thiếu được trong kỉ nguyên công nghệ thông tin, được ứng dụng rất nhiều trong đời sống con người

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” Với một

số nội dung trong đề tài này, học sinh có thể tự học, tự giải quyết được một số bài toán thông qua một số sách bài tập, dạng bài tập cụ thể trong sách giáo khoa

và sách bài tập tin học 11, hoặc ngôn ngữ lập trình Pascal của Quách Tuấn Ngọc giúp học sinh yêu thích ngôn ngữ lập trình hơn

2.2 Thực trạng của đề tài

- Qua khảo sát thực tế, học sinh THPT hiện nay nói chung và học sinh trường THPT Nguyễn Trãi nói riêng (chất lượng đầu vào ở mức trung bình), tư duy

hệ thống logic và khái quát của các em còn hạn chế, điều kiện kinh tế của gia đình còn nhiều khó khăn, rất nhiều sinh viên học đại học ra trường không xin được việc làm Vì vậy 65% số học sinh trong trường không có nhu cầu học đại học, các em chủ yếu lựa chọn học nghề vừa mất ít thời gian, lại có tay nghề tốt, xin việc lại dễ hơn Vì vậy khi dạy học, giáo viên cần phải liên hệ nhiều đến những kiến thức thực tế để tăng tính tập trung, các em vận dụng kiến thức tốt hơn Đặc biệt học tốt môn tin học cũng giúp các em có thêm kênh thông tin và những định hướng nghề nghiệp tốt hơn trong tương lai

- Trên thực tế giảng dạy ở trường THPT Nguyễn Trãi 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ó, 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

- Để khắc phục các lỗi cơ bản đó tôi xin đưa ra các giải pháp giúp giải quyết những vấn đề cơ bản khi sử dụng ngôn ngữ lập trình Pascal mà học sinh thường hay gặp phải Trong phạm vi sáng kiến kinh nghiệm này tôi chỉ trình bày một số giải pháp, kinh nghiệm của cá nhân tôi qua các nội dung cụ thể sau:

- Cách xử lí khi màn hình Pascal chạy trong Window bị thu nhỏ.

Trang 6

- Một số lỗi sai phổ biến của học sinh khi học lập trình Pascal.

- Một số kinh nghiệm dạy lập trình nói chung và Pascal nói riêng.

2.3 Giải pháp thực hiện

Để hiểu và vận dụng ngôn ngữ lập trình giải các bài toán trên máy tính bằng phương pháp thực hành, qua thực tế giảng dạy giáo viên cần xây dựng các dạng bài thường gặp cụ thể sau đây

2.3.1 Cách xử lý khi màn hình Pascal bị thu nhỏ?

Khi làm việc trong môi trường Windows như hiện nay, tôi thấy thường xuyên xảy ra hiện tượng màn hình của Free Pascal tự động thu nhỏ lại rất khó làm việc Để khắc phục tình trạng đó tôi có đưa ra cách xử lí rất nhanh mà hiệu quả mà tôi thường hướng dẫn học sinh cách xử lí như sau:

- B1: Nháy phải chuột vào biểu tượng Free Pascal trên màn hình nền.

- B2: Chọn Properties -> Font -> Consolas -> Size 28 (hoặc 36)

- B3: Nháy -> Apply( hoặc OK )

2.3.2 Một số lỗi sai thường gặp của học sinh trong lập trình Pascal:

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

Ví dụ 1: Nhập vào một mảng số nguyên gồm các số lớn hơn 10 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 [10 100] of integer;

Khi thực hiện chương trình trên học sinh nhầm lẫn miền chỉ số mảng với giá trị từng phần tử của mảng, cần giải thích rõ hơn cho học sinh về miền chỉ số mảng và giá trị từng phần tử khác nhau như thế nào

Cụ thể phần khai báo vẫn viết như bình thường

Var a: array [1 n] of integer;

Giải thích cho học sinh mảng a gồm n phần tử từ a[1] đến a[n]

Lưu ý: Khi nhập các giá trị a[i] bất kì ta nhập đúng theo đề bài 10< a[i]<100 Vd: a[1] =17, a[2] = 11,…., a[n] =99

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

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

Trang 7

Write(‘nhap day so:’);

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

VD3 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ụ 3: 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;

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

Trang 8

Để 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

VD4 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 dẫn đến câu lệnh lặp rỗng không làm việc gì cả

VD5 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 cụ thể:

readln(s); nhập vào xâu s (biến xâu là s)

write(‘ nhap xau bât ki’); ( ‘ nhap xau bat ki’ là hằng xâu)

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

Function GT(n:integer): integer;

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 vượt quá miền khai báo của hàm trả về

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

VD7 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;

Trang 9

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

Để 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

VD8 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

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

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

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!’);

- 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

- Tránh tràn số (đã trình bày ở mục 6)

Trang 10

3.2.3 Một số kinh nghiệm dạy lập trình Pascal

a 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,…

Dạng 1: Bài tập về xây dựng thuật toán:

- 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 đa số học sinh hiện nay, 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ố 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 sangbước 5, ngoài ra: Chọn một hộp bất kì và để lên dĩ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

Trang 11

Dạng 2 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

If (i mod 2) <> 0 then i:=i*3+1

Else i:= i div 2;

Writeln(i);

End;

Readln;

End

Với dạng bài tập này giáo viên sẽ cho học sinh nhập thử như sau:

Nhập I =7, I không chia hết cho 2 nên kết quả I = i*3 +1 =22

Viết lại thuật toán gán I = 6, I chia hết cho 2 nên kết quả bằng i= I div 2 =3

Dạng 3 Bài tập về sửa lỗi chương trình

Ví dụ 3: Để 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:

Program vd3;

Uses crt;

Var a,b,c:integer;

Begin

Clrscr;

Write(‘nhap vao 3 so:’);

Readln(a,b,c);

If a<b then a:=b

Ngày đăng: 21/10/2019, 20:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w