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 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.
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 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ứ đ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
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.
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 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.
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 toán vượt quá giới hạn
Function GT(n:integer):integer;
Var i,t:integer;
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
>=,>,
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ụ 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 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:
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, 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
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;
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
a
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 toán, yêu cầu học sinh 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 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 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
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);
Học sinh có thể viết chương trình theo thuật toá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ừ đó hoà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= ‘0’) and (xau[i]= ‘0’) and (xau[i]
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ự đoá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ố nguyên 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 i0 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
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
Giỏi
TL(%
SL
)
0
0
Khá
Trung Bình
SL
TL(%)
SL
TL(%)
21
60.0
14
40.0
Yếu
TL(%
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
11A1(32HS)
Giỏi
TL(%
SL
)
2
6.25
1
2.86
27
77.14
7
20
0
0%
11A3(36HS)
0
0
29
80.55
7
19.45
các thầy, cô, đồng nghiệp để sáng kiến được hoàn thiện hơn, giúp ích cho công
tác giáo dục chung được tốt hơn.
Đ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 toá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,
yê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 toà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Ị
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 toán vượt quá 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 toán, yêu cầu học sinh viết chương trình
theo đúng thuật toán đó.....................................................9
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ừ đó hoà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