Tải bản đầy đủ (.pdf) (19 trang)

(Sáng kiến kinh nghiệm) một số lưu ý khi dạy lập trình pascal cho học sinh lớp 11 trương THPT quan sơn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (192.18 KB, 19 trang )

PHẦN I: MỞ ĐẦU
I. 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 hồ 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 q 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.
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 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 tố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ố ngun nhân
chính sau đây:
+ Học sinh thường gặp khó khăn khi xác định bài tố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 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… 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ố lưu ý khi dạy lập trình
Pascal cho học sinh lớp 11 trường THPT Quan Sơn”.
II. 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
khơng hiểu ngun 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, cách sửa các lỗi này và một số lưu ý
khi dạy lập trình Pascal.
Tuy vậy, đối 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 Pascal. Do đó trong đề tài này
tơi cũng trình bày thêm một số lưu ý 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 và một số ví dụ mở rộng, nâng cao với đối tượng học sinh
này.


III. Đối tượng nghiên cứu
Đề tài này được áp dụng đối với sinh các lớp 11A1, 11A2, 11A3 trường
THPT Quan Sơn năm học 2018 - 2019.
Với nhiệm vụ chủ yếu là tổng hợp kiến thức Tin học11, tìm ra phương pháp
học mới, cách tiếp cận mới với ngôn ngữ lập trình Pascal.
Kế hoạch nghiên cứu: Trực tiếp trong các bài dạy ở tồn bộ chương trình
Tin học lớp 11.
IV. Phương pháp nghiên cứu
Để hồn thành đề tài này, tơi đã tiến hành và áp dụng một số phương pháp
nghiên cứu sau:
- Dựa trên cơ sở lý thuyết của Ngôn ngữ lập trình Pascal. Sự hoạt động tuần
tự từng bước của máy tính khi thực hiện chương trình.
- Thu thập dữ liệu thông qua việc hỏi học sinh về mức độ biết, hiểu và vận
dụng ngơn ngữ lập trình Pascal vào giải các bài tốn trong các mơn học khác.
- Phân tích đánh giá mức độ học sinh hiểu vận dụng, giải được các bài tập, từ
đó xây dựng, giới thiệu các bài tập phù hợp với từng đối tượng học sinh.
- Tổng kết rút kinh nghiệm



PHẦN II: NỘI DUNG
I. 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.
Chỉ thị số 55/2008/CT- BGTĐT ngày 30/9/2008 của Bộ trưởng Bộ GDĐT
về tăng cường giảng dạy, đào tạo và ứng dụng công nghệ thông tin trong ngành
giáo dục giai đoạn 2008-2011.
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ể.
II. Thực trạng vấn đề
Qua thực tế giảng dạy ở trường THPT Quan Sơn 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ó.
Theo thống kê kết quả học tập môn tin học 11 năm học 2017 – 2018 như
sau:
- 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.

- Tuy nhiên cũng có một số lượng khơng nhỏ học sinh rất u thích tin học
và thích tìm hiểu một số bài tốn, dạng tốn ngồi phạm vi sách giáo khoa.
III. Các giải pháp đã tiến hành để giải quyết vấn đề
1. Một số lỗi sai thường gặp của học sinh trong lập trình Pascal
a. 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 5 và nhỏ hơn
30. In mảng vừa nhập.
Học sinh khai báo mảng như sau:
Var a: array[5..30] of integer;
b. 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 tốn trên như sau:
Var a: array[1..7] of integer; i,d:integer; kt:boolean;
Begin


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.
c. 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 ln
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.
d. 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ả.
e. 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.
f. Tràn số do kết quả tính tốn vượt q 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
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
g. 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.
Để 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.
h. Chưa hiểu thứ tự ưu tiên phép toán
Thứ tự ưu tiên các phép tố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
>=,>,<=,<,=,<>
i. Không hiểu nguyên tắc làm trịn số đối với số thực
Trong tố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 q trình tính tốn gần đúng trên máy tính thành tính tố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)- Quá trình tối ưu tính tố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)
2. 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,…
 Bài tập về viết thuật tố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 ta nhận được OUTPUT. Nói cách khác, trình bày
thuật tố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 tốn trước khi viết chương trình là hết sức quan trọng.
Thuật tốn đúng thì chương trình mới có khả năng đúng, cịn một thuật tố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 tốn cụ thể học sinh vẫn
viết được chương trình. Thực tế thuật tố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 tốn ra song các em có
thể hình dung được thuật tố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 tn thủ theo trình tự sau:
Bài tốn  Xây dựng thuật tốn  Viết chương trình
Ví dụ 1: 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 tốn trong tố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 tốn như sau:
Bước 1: Nếu chỉ có 1 hộp thì đó chính là hộp nặng nhất và kết thúc.


Bướ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.
Bước 3: Nếu không cịn hộp chưa được cân thì chuyển sang Bước 5, ngồ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
Bước 4: Trở lại bước 3
Bước 5: Hộp còn lại trên cân là hộp nặng nhất và kết thúc.
 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ụ 2: 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.
 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ó
học sinh đã viết chương trình như sau:
Program max3so;
Uses crt;
Var a,b,c:integer;
Begin
Clrscr;
Write(‘nhap vao 3 so:’);
Readln(a,b,c);
If aElse
If aWrite(‘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
B
c
aa3
4
5
T (3<4)
4
Vậy số lớn nhất là 4 Kết quả sai
 a=5,b=4,c=7
a
B
c
aa5
4
7
F (5<4)
T (5<7)
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:
Program max3so_1;

Uses crt;
Var a,b,c:integer;
Begin
Clrscr;
Write(‘nhap vao 3 so:’);
Readln(a,b,c);
If aBegin
If bEnd
Else
If aWrite(‘So lon nhat la:’,a);
Readln;
End.
 Bài tập về khai báo biến:
Ví dụ 4: Trong một chương trình đã chạy tốt, khi thực hiện khơng có lỗi có
một số lệnh như sau:
…..
Ok:= ‘n’;
J:=round(sqr(n));
If ch= ‘Ok’ then ch:= ‘It is’ + ch;
…..
While kt and (i<=j) do
Begin
Kt:=Not(n mod i=0);


X:=1.5*j+i;
End;

Hãy viết phần khai báo biến cho đoạn chương trình trên.
Với dạng bài tập này, ta căn cứ vào các câu lệnh đã cho để viết phần khai
báo biến cho chương trình trên như sau:
Var n,i,j:integer;
X:real;
Kt:boolean;
ok:char;ch:string;
Tuy nhiên ta cũng có nhiều cách để khai báo biến ví dụ biến ok có thể thuộc
kiểu string; j có thể thuộc kiểu real,…
b. Trình bày thuật tốn, u cầu học sinh viết chương trình theo đúng thuật
tốn đó
Một bài tố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 tố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 luyệ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ụ 5: 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 tố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ì
xố 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:
Program vd5;
Uses crt;
Var xau, xauM,Tword:string;
I:byte;
Begin
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 tốn trên ngồ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: Xố 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: xố 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ì xố kí tự trống.
While pos( ‘ ’,xau)<>0 do delete(xau,pos( ‘ ’,xau),1);
Học sinh có thể viết chương trình theo thuật tốn 2.
c. Giải bài toán trong một trường hợp riêng, yêu cầu học sinh phát hiện
thiếu sót để từ đó hồn thiện chương trình
Ví dụ 6: 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
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 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.
d. 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, việ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.
e. 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 sai 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.
3. Một số bài tập tham khảo
Bài 1. Hệ đếm
Trong một cuộc truy tìm một xe ơtơ chở hàng lậu, nguồn tin đầu tiên cho
biết: số của biển xe là số có 3 chữ số đối xứng.
(Một số có n chữ số trong một hệ đếm nào đó được gọi là đối xứng nếu chữ
số thứ 1 giống với chữ số thứ n, chữ số thứ 2 giống với chữ số thứ n - 1,...).
Sau đó cảnh sát nhận được thêm thơng tin: số biển số là một số nguyên tố.
Cảnh sát dựa vào dự đoán của một chuyên gia tin học đưa ra sau khi phân tích
các nguồn tin và xác định tập các số có thể là số của biển số: biển số nếu viết

trong hệ nhị phân cũng là một số đối xứng. Nhờ vậy mà cảnh sát đã bắt đúng đối
tượng. Hãy cho biết các số mà chuyên gia tin học đã xác định mà số biển xe mà
ông ta đã dự đốn đúng.
Ý tưởng:
Có thể có nhiều cách giải khác nhau nhưng tất cả đều cần phải giải quyết các
vấn đề:
- Kiểm tra xem một số có là số ngun tố hay khơng?
- Tìm dạng biểu diễn nhị phân của một số.
- Kiểm tra một số có là đối xứng không?
- Chọn các số đối xứng (trong hệ thập phân) thích hợp để kiểm tra.


Chương trình:
PROGRAM BienSo;
Uses crt;
Var m,i,j,k,n,l:integer;
a,b: array[1..14] of integer;
Procedure ChuyenMa(i:integer);
Begin
i:=0;
while i<>0 do
begin
i:=i+1;
a[i]:=i mod 2;
i:=i div 2;
end;
End;
Function NgTo(i:integer):boolean;
var b:boolean;
j:integer;

Begin
b:=true; j:=1;
while (jbegin
j:=j+1;
if i mod j = 0 then b:=false;
end;
ngto:=b;
End;
Function DoiXung:boolean;
var b:boolean;
j:integer;
Begin
b:=true;
i:=1;
while (i<=l div 2) and b do
begin
if a[i]<>a[l-i+1] then b:=false
else i:=i+1;
end;
DoiXung:=b;
End;
BEGIN
clrscr;
b[1]:=1; b[2]:=3;


b[3]:=7; b[4]:=9;
for m:=1 to 4 do
for k:=0 to 9 do

begin
n:=101*b[m] + 10*k;
if ngto(n) then
begin
chuyenma(n);
if doixung then
begin
write('Bien so can tim: ',n:5,' Ma nhi phan la ');
for j:=1 to l do write(a[j]:2);
writeln;
end
else
writeln('So ngto doi xung nhung ma nhi phan khong doi
xung ',n:5);
end;
end;
END.
Bài 2. Quan hệ
Có N người mang tên tương ứng là 1, 2,..., N và tình trạng quen biết của N
người này được cho bởi mảng đối xứng A[1..N,1..N] trong đó A[i,j] = A[j,i] = 1
nếu i quen j và bằng 0 nếu i không quen j. Hãy xét xem liệu có thể chia N người
đó thành 2 nhóm mà trong mỗi nhóm hai người bất kì đều khơng quen nhau?
Dữ liệu vào được cho bởi file QUANHE.INP trong đó dịng thứ nhất ghi số
nguyên dương N <= 100, trong N dòng tiếp theo, dòng thứ i ghi N số A[i,1],...,
A[i,N].
Kết quả ghi ra file QUANHE.OUT như sau:
 Nếu khơng có thể, ghi dịng chữ KHONG THE
 Nếu có thể, ghi ra hai dịng, dịng thứ nhất tên những người thuộc
nhóm 1, dịng thứ hai tên những người thuộc nhóm 2.
Gợi ý:

Lập mảng XEP[1..N] khởi tạo mọi giá trị bằng 0. Bắt đầu chia nhóm từ
người thứ nhất cho tới người thứ N. Khi xét người thứ i, những khả năng sau có
thể xảy ra:
- Nếu XEP[i] = 0 (chưa được xếp nhóm) thì xếp vào nhóm 1(XEP[i] = 1) và
xếp những người j quen i vào nhóm 2 (cho XEP[j] =2).
- Nếu XEP[i] = 1 và trong số những người quen i có một người j mà XEP[j]
cũng bằng 1 thì kết luận khơng xếp được.
- Nếu XEP[i] = 2 và trong số những người quen i có một người j mà XEP[j]
cũng bằng 2 thì kết luận khơng xếp được.


Bài 3. Điểm trên mặt phẳng
Cho các số thực a, b, c, d, e, f, g, h. Biết rằng hai điểm (e,f) và (g,h) khác
nhau và các điểm (a,b); (c,d) không nằm trên đường thẳng l đi qua hai điểm (e,f)
và (g,h). Đường thẳng l chia mặt phẳng làm hai nửa mặt phẳng. Hai điểm (a,b) và
(c,d) có vị trí như thế nào so với đường thẳng l ?
Ý tưởng:
Trong bài này ta sử dụng một kiến thức về hình học: Điểm (x,y) muốn thuộc
đường thẳng đi qua hai điểm (x1,y1) và (x2,y2) khi và chỉ khi nó thoả mãn:
(x - x2)(y1 - y2) = (y - y2)(x1 - x2) hay (x - x2)(y1 - y2) - (y - y2)(x1 - x2) = 0
(*)
Đường thẳng l sẽ chia các điểm khơng thuộc nó thành 2 loại (tương ứng với
hai nửa mặt phẳng): một loại làm cho vế trái của (*) dương và loại cịn lại làm
cho nó âm. Vì lẽ đó nếu 2 điểm cùng phía khi và chỉ khi tích hai vế dương.
IV. Hiệu quả đạt được
Năm học 2017 – 2018, tôi được phân công giảng dạy môn Tin học các lớp
11A1, 11A5, 11A6 tại trường THPT Quan Sơn khi chưa áp dụng phương pháp
của Sáng kiến kinh nghiệm kết quả học tập ở 3 lớp 11A1, 11A5, 11A6 như
sau:
Lớp

11A1(35HS)

Giỏi
TL(%
SL
)
0
0

Khá

Trung Bình

SL

TL(%)

SL

TL(%)

21

60.0

14

40.0

Yếu

TL(%
SL
)
0
0

11A5(43HS)

0

0

15

34.88

25

58.13

3

6.97

11A6(40HS)

0

0


14

35

22

55

4

10

Bảng 1. Kết quả học tập cuối năm học 2017 – 2018
Qua bảng 1 kết quả học tập cuối năm học ta nhận thấy tỉ lệ học sinh có học
lực khá ít, tỉ lệ học sinh học lực trung bình chiếm nhiều; bên cạnh đó vẫn cịn số
ít học sinh có học lực yếu.
Năm học 2018 – 2019, tơi được phân công giảng dạy môn Tin học các lớp
11A1, 11A2, 11A3 tại trường THPT Quan Sơn tôi đã tiến hành áp dụng sáng kiến
kinh nghiệm vào giảng dạy cho các lớp 11A1, 11A2, 11A3, kết quả thu được như
sau:
Lớp

Giỏi
TL(%
SL
)

Khá

Trung Bình


SL

TL(%)

SL

TL(%)

Yếu
TL(%
SL
)

11A1(32HS)

2

6.25

25

78.12

5

15.62

0


0%

11A2(35HS)

1

2.86

27

77.14

7

20

0

0%


11A3(36HS)

0

0

29

80.55


7

19.45

0

0%

Bảng 2. Kết quả học tập cuối năm học 2018 – 2019
Số liệu so sánh tỉ lệ phần trăm bảng 1 với bảng 2 ta dễ dàng nhận thấy kết
quả học tập giữa các năm có sự chuyển biến rõ rệt. Cụ thể tỉ lệ học sinh khá tăng,
học sinh trung bình giảm và khơng cịn học sinh yếu; đặc biệt đã có học sinh giỏi
ở các lớp 11A1 và 11A2.
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.


PHẦN III: KẾT LUẬN, KIẾN NGHỊ
I. Kết luận
Qua việc tìm hiểu lộ trình đổi mới giáo dục của Bộ giáo dục và Đào tạo Việt
Nam và việc đổi mới phương pháp dạy học môn Tin học trường Trung học phổ
thông Quan Sơn, tôi đã đưa ra một số lưu ý khi dạy và học ngơn ngữ lập trình
Pascal và cách sửa lỗi khi dạy mơn Tin học nhằm khích lệ học sinh u thích hơn
mơn Tin học. Đặc biệt dạy học lập trình là một trong những phần khó mà bản
thân mình cũng như một số giáo viên khác đều gặp phải khơng ít những khó

khăn. Chính vì vậy trong sáng kiến kinh nghiệm này, tôi muốn đưa ra một số lưu
ý khi giảng dạy ở các dạng bài tập mơn Tin học. Từ đó giúp học sinh dễ dàng
phát hiện và sửa lỗi kịp thời khi lập trình một cách nhanh chóng. Trong q trình
nghiên cứu sẽ khơng tránh được những thiếu sót rất mong sự góp ý, bổ sung của
các thầy, cô, đồng nghiệp để sáng kiến được hồn thiện hơn, giúp ích cho cơng
tác giáo dục chung được tốt hơn.
2.1 Điều kiện áp dụng sáng kiến
Sáng kiến này có thể là tài liệu hữu ích đối với giáo viên tin học khi dạy,
hoặc các em học sinh khi học về ngơn ngữ lập trình.
II. Kiến nghị
1. Kiến nghị với nhà trường
Nhà trường cần tạo điều kiện ủng hộ hơn nữa trong quá trình đổi mới
phương pháp dạy học.
Đặc biệt việc dạy học lập trình là phần khó trong môn Tin học phổ thông,
nên nhà trường và giáo viên cần phải quan tâm đến việc bồi dưỡng chuyên mơn,
khả năng tư duy thuật tốn.
Trường tổ chức đầu tư thêm kính phí mua trang thiết bị máy tính ở phòng
máy và máy chiếu ở các lớp học phục vụ cho việc giảng dạy của giáo viên, thực
hành của học sinh được tốt hơn.
2. Hướng tiếp tục nghiên cứu
Sáng kiến kinh nghiệm này tơi mới tìm hiểu, nghiên cứu, áp dụng cho một
số ví dụ bài tập cơ bản trong tin học 11. Đối với học sinh các em đã có cảm tình,
u thích mơn Tin học, có hướng tiếp cận mới, nhận biết được các lỗi thường gặp
trong khi lâp trình Pascal. Đó sẽ là nền tảng tốt để các em tiếp cận thuận lợi tới
những kiến thức khó hơn trong ngơn ngữ lập trình mới.
Nội dung sáng kiến này tơi có hướng phát triển sâu hơn ở các dạng bài tập
trong tồn bộ chương trình tin học 11. Chỉ ra những lỗi thường gặp ở học sinh khi
lập trình Pascal cùng với thay đổi phương pháp, hướng tiếp cận trong giảng dạy
lập trình ở những sáng kiến kinh nghiệm sau.



XÁC NHẬN CỦA THỦ
TRƯỞNG ĐƠN VỊ

Thanh Hóa, ngày 20 tháng 05 năm 2019
Tôi xin cam đoan đây là SKKN của tôi viết,
không sao chép nội dung của người khác.

Lê Văn Ba


TÀI LIỆU THAM KHẢO
1. Sách giáo khoa Tin học 11, NXB Giáo dục, 2007.
2. Sách giáo viên Tin học 11, NXB Giáo dục, 2007.
3. Sách giáo khoa Đại số 10, Hình học 10 NXB Giáo dục, 2010.
4. Sách giá o khoa Đại số 11, NXB Giáo dục, 2011.
5. Quách Tuấn Ngọc, Bài tập Ngơn ngữ lập trình Pascal, NXB Đại học Bách
khoa, 1993.
6. Bùi Thế Tâm, Bài tập lập trình Pascal, NXB giao thông vận tải 1999.
7. Một số sáng kiến kinh nghiệp của đồng nghiệp.


Mục Lục
PHẦN I: MỞ ĐẦU................................................................................................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.......................................................................................2
IV. Phương pháp nghiên cứu..................................................................................2
PHẦN II: NỘI DUNG..........................................................................................3
I. Cơ sở lý luận........................................................................................................3

II. Thực trạng vấn đề...............................................................................................3
III. Các giải pháp đã tiến hành để giải quyết vấn đề...............................................3
1. Một số lỗi sai thường gặp của học sinh trong lập trình Pascal...........................3
a. Khai báo sai miền chỉ số cho dữ liệu kiểu mảng.................................................3
b. Giá trị biến điều khiển vượt quá miền chỉ số của mảng......................................3
c. Dùng cùng tên biến điều khiển cho các vòng lặp for lồng nhau.........................4
d. Sử dụng dấu “;” sai vị trí.....................................................................................4
e. Không phân biệt được hằng xâu và biến.............................................................4
f. Tràn số do kết quả tính tốn vượt q giới hạn...................................................4
g. Sử dụng tên hàm làm biến cục bộ.......................................................................5
2. Một số kinh nghiệm dạy lập trình Pascal............................................................6
a. Có nhiều dạng bài tập..........................................................................................6
b. Trình bày thuật tốn, u cầu học sinh viết chương trình theo đúng thuật tốn
đó.............................................................................................................................9
c. Giải bài tốn trong một trường hợp riêng, yêu cầu học sinh phát hiện thiếu sót
để từ đó hồn thiện chương trình..........................................................................10
d. Phân chia một bài toán thành nhiều bài toán nhỏ.............................................11
e. Sửa lỗi chương trình..........................................................................................11
3. Một số bài tập tham khảo..................................................................................11
IV. Hiệu quả đạt được...........................................................................................14
PHẦN III: KẾT LUẬN, KIẾN NGHỊ...............................................................16
I. Kết luận..............................................................................................................16
II. Kiến nghị..........................................................................................................16
1. Kiến nghị với nhà trường..................................................................................16
2. Hướng tiếp tục nghiên cứu................................................................................16