Tải bản đầy đủ (.doc) (11 trang)

skkn một số lưu ý khi dạy lập trình pascal cho học sinh lớp 11

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 (90.23 KB, 11 trang )

MỤC LỤC
A. PHẦN I: MỞ ĐẦU
1.
2.
3.
4.

Lý do chọn đề tài .............................................................................................2
Mục đích nghiên cứu ...................................................................................... 2
Đối tượng nghiên cứu.......................................................................................3
Phương pháp nghiên cứu............................... ..................................................3

B. PHẦN II: NỘI DUNG SÁNG KIẾN KINH NGHỆM
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm..................................................3
2.2. Thưc trạng vấn đề trước khí áp dụng sáng kiến kinh nghiệm...................3
2.3. Sáng kiến kinh nghiệm và các giải pháp đã sử dụng để giải quyết vấn đề.
I. Một số lỗi sai thường gặp của học sinh trong lập trình Pascal
1) Sử dụng dấu ; sai vị
trí..................................................................................3
2) Không phân biệt được hằng xâu và biến......................................................4
3) Khai báo sai miền chỉ số cho dữ liệu kiểu mảng..........................................4
4) Khai báo biến thuộc kiểu dữ liệu này nhưng trong phần thân chương trình
lại dùng biến với kiểu dữ liệu khác..............................................................4
5) Tràn số do kết quả tính toán vượt quá giới hạn .......................................... 4
6) Không hiểu nguyên tắc làm tròn đối với số thực.........................................4
7) Chưa nắm chắc nguyên lí hoạt động của vòng lặp For................................4
8) Giá trị biến điều khiển vượt quá miền chỉ số của mảng...............................5
9) Chưa hiểu thứ tự ưu tiên phép toán..............................................................5
II. Giải pháp sử dụng để giải quyết vấn đề
1) Bài tập về đọc hiểu chương trình.................................................................6
2) Bài tập về sửa lỗi chương trình....................................................................6


3) Bài tập về khai báo biến...............................................................................7
4) Bài tập về viết thuật toán..............................................................................8
5) Chia bài toán thành nhiều bài toán nhỏ........................................................8

2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản
thân, đồng nghiệp và nhà trường......................................................................9

C. PHẦN III: KẾT LUẬN VÀ KIẾN NGHỊ
DANH MỤC TÀI LIỆU THAM KHẢO .......................................................... 10

1


PHẦN I: MỞ ĐẦU
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.
• 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ú.
• 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, 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”.
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 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 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 Turbo 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.
2


3) Đối tượng nghiên cứu:
• Đối tượng nghiên cứu: học sinh các lớp 11A1, 11A2 , 11A3 trường THPT
Nông Cống I.
4) Phương pháp nghiên cứu:
• Trực tiếp qua các bài dạy.


PHẦN II: NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm
• Đả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. Thành quả to lớn của ngành công nghệ
này ngày ngay không chỉ vận dụng riêng trong giáo dục và rộng rãi khắp các
lĩnh vực trong xã hội.
• Riêng trong trường phổ thông Tin học cũng được vận dụng triệt để, đặc biệt
là với cơ sở vật chất đầy đủ như trường THPT Nông Cống I, tất cả các môn
học đều khả năng áp dụng công nghệ thông tin vào giảng dạy. Chính vì vậy
đây cũng là một lợi thế to lớn cho riêng môn Tin học, đặc biệt là trong
chương trình Tin học 11 các em bước đầu làm quen với việc lập trình. Kỹ
năng của môn học này 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. Mục tiêu của giáo viên là làm thế nào
sau khi kết thúc chương trình lớp 11 các em hiểu và nắm được như thế nào
là ngôn ngữ lập trình, cụ thể là ngôn ngữ lập trình Pascal. 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 áp dụng sáng kiến kinh nghiệm
• Qua thực tế giảng dạy ở trường THPT Nông Cống 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ó. 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 yêu thích tin học
và thích tìm hiểu một số bài toán, dạng toán ngoài phạm vi sách giáo khoa.
2.3. Sáng kiến kinh nghiệm và các giải pháp sử dụng để giải quyết vấn đề.
I. Một số lỗi sai thường gặp của học sinh trong lập trình Pascal:
1) 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
2) ) 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.
Writeln(' Nhap phan tu thu ',i,' cua mang');
3


Nhap phan tu thu, cua mang: là hằng xâu.
i: là biến.
3) Khai báo sai miền chỉ số cho dữ liệu kiểu mảng.
Ví dụ : 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 100.
In mảng vừa nhập.
Học sinh khai báo mảng như sau:
Var a: array[5..100] of integer;
4) Khai báo biến thuộc kiểu dữ liệu này nhưng trong phần thân chương trình
lại dùng biến đó với kiểu dữ liệu khác.
Ví dụ: Khai báo biến a thuộc kiểu nguyên, nhưng trong phần thân chương trình
lại có câu lệnh a:=a/2; biểu thức a/2 thuộc kiểu số thực, biến a thuộc kiểu
nguyên không thể lưu trữ giá trị số thực.
5) ) Tràn số do kết quả tính toán vượt quá giới hạn.
Tính tổng các số nguyên từ 50 đên 500
Var SUM,i:integer;
Begin
SUM:=0;
For i:=50 to 500 do SUM:=SUM+i;
Writeln('Tong:=',SUM);
End.
Song trong thực tế, tổng SUM sẽ lớn hơn 32767 tức là tràn ô nhớ. Vì vậy, cần
khai báo tổng SUM à Real thì chương trình mới chạy được.
6) ) Không hiểu nguyên tắc làm tròn số đối với số thực.

Trong toán học:

10
5

=

3
5

+

5
5

+

2
5

Tuy nhiên trong Pascal biểu thức sau sẽ cho kết quả sai:
If 10/sqrt(5)=3/sqrt(5)+5/sqrt(5)+2/sqrt(5) 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.
7) Chưa nắm chắc nguyên lí hoạt động của vòng lặp For nên dễ sai trong quá
trình dùng biến trong vòng lặp For lồng nhau
Ví dụ: Trong bài toán sắp xếp dãy không giảm có đoạn chương trình
For j:=N downto 2 do
For i:=1 to j-1 do

If a[i]>a[j] then
begin
t:=a[i];
4


a[i]:=a[i+1];
a[i+1]:=t;
end;
Nhiều học sinh tự sửa lại câu lệnh For j:=N downto 2 do bằng câu lệnh
For j:=2 to n do, vì nghĩ hai câu lệnh này như nhau.
8) 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;
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.
9) 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
- * / div mod
- + - or
- >=,>,<=,<,=,<>

5


II. Giải pháp sử dụng để giải quyết vấn đề:
Đa dạng các loại 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,…
1. 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 vd;
Uses crt;
Var i,n,t :integer;

var a:array[1..100] of integer;
Begin
Clrscr;
write('N:='); readln(N);
for i:=1 to N do readln(a[i]);
for i:=1 to N div 2 do
begin
t:=a[i]; a[i]:=a[n-i+1]; a[n-i+1]:=t;
end;
for i:=1 to n do write(a[i]:5);
Readln;
End.
2. Bài tập về sửa lỗi chương trình:
• Trong 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à
vô cùng cần thiết. Để 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. Nếu có điều kiện sử dụng máy chiếu trong
các tiết học này sẽ đem lại hiệu quả trực quan cao. Cả lớp có thể nhìn thấy
toàn chương trình và quy trình dịch cũng như sửa lỗi của giáo viên.
• Lỗi về cú pháp thì được chương trình dịch phát hiện và báo, nhưng lỗi ngữ
nghĩa thì không.
Function UCLN(var a,b:vord):word;
Begin
While a<>b do
6


If a>b then a:=a-b
else b:=b-a;
UCLN:=a;
end;

BEGIN
Write('nhap tu so:'); readln(tu);
Write('nhap mau so:'); readln(mau);
d:=UCLN(tu,mau); write('d:=',d);
If d>1 then
begin
tu:=tu div d;
mau:=mau div d;
end;
Writeln('phan so toi gian la:',tu,'/',mau);
readln;
END.
Chương trình trên sử dụng hàm UCLN(a,b) để tối giản phân số có tử số và mẫu
số nhập từ bàn phím.
Nhìn vào chương trình ta thấy không phải bàn đến tính đúng đắn của công thức,
tuy nhiên khi chạy chương trình ta luôn nhận được kết quả là 1/1 cho mọi phân
số. Vậy lỗi do đâu?
Lỗi do chương trình trên hàm UCLN được tổ chức truyền theo tham biến, nên
sau lời goi d:=UCLN(tu,mau), ta được đông thời các giá trị d, tu, mau bằng nhau
và bằng d. Để sửa lại chương trình cho đúng ta phải sửa lại khai bao tham số
trong hàm UCLN là truyền theo tham trị ( tức là bỏ từ khoá Var trước a,b).
3. Bài tập về khai báo biến:
• Ví dụ: Hãy chỉ ra các lỗi sai trong khai báo sau:
Var K,M,I,L: Integer;
C,C1: Char;
i,il,j: integer;
PI=3.14;
Biến i khai báo 2 lần ( trong Pascal không phân biệt chữ hoa và chữ thường). PI
là hằng thực nên khai báo đúng phải là: Const PI=3.14;
• Khai báo kiểu dữ liệu không chuẩn ( khai báo đúng nhưng tốn nhiều bộ

nhớ và không sát với yêu cầu của bài toán)
Ví dụ: Cho dãy A gồm n số nguyên dương a1, a2,a3...an. Tìm giá trị nhỏ nhất của
dãy và đưa ra vị trí của số đó.
Học sinh viết khai báo như sau:
7


Const nmax=50;
Var A: array[1..nmax] ò integer;
n,i,min,csmin:integer;
Bài toán cho ta là dãy số nguyên dương nhưng học sinh khai báo là Integer có
nghĩa là khi nhập giá trị cho phần tử mảng âm vẫn thoả mãn điều này sai với yêu
cầu của bài toán.
4. 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 ta nhận được OUTPUT. 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.
• 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ớ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 luỵê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ụ: Một lớp có 40 học sinh, giờ chào cờ nhà trường yêu cầu xếp thành
1 hàng dọc theo thứ tự từ thấp đến cao. Với bài toán trong thực tế như trên
ta có thể phát biểu lại bài toán trong toán học như sau: Cho dãy 40 số
8


nguyên, hãy sắp xếp dãy đó theo thứ tự tăng dần. Khi đó có thể trình bày
thuật toán như sau:
B1: Nhập N, a1,a2,...a40.
B2: Gán M=40
B3: Nếu M<2 thì đưa ra dãy đã được sắp xếp và kết thúc
B4: Gán M=M-1, i=0
B5: Gán i=i+1
B6: Nếu i>M thì quay lại B3
B7: Nếu ai>ai+1 thì tráo đổi ai cho ai+1
B8: Quay lại B5
5. 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. Cụ thể chính là rèn luyện tư duy và khả
năng sư dụng chương trình con.
2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, bản thân,
đồng nghiệp và học sinh.
• Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2014-2015 khi
chưa thực hiện đề tài:
STT Lớp
Sỉ số Đạt yêu cầu Không đạt yêu cầu
1
11C1 49
70%
30%
2
11C2 48
62.5%
37.5%
3
11C5 50
44%
56%
• 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.
9


• Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2015-2016 sau
khi thực hiện đề tài:
STT
1
2
3

Lớp
11A1
11A2
11A3

Sỉ số
45
43
48

Đạt yêu cầu
92%
85%
66%


Không đạt yêu cầu
8%
15%
34%

III. KẾT LUẬN VÀ KIẾN NGHỊ
• Có thể nói sáng kiến kinh nghiệm trên là một trong những vấn đề tuy đơn
giản nhưng lại là nền tảng vững chắc để bước đầu các em hiểu rõ và yêu
thích môn học. Nó cũng là một tài liệu hữu ích đối với những giáo viên
vừa mới đứng lớp giảng dạy lập trình Pascal.
• Việc ứng dụng của sáng kiến đã được vận dụng ngay tại tại trường THPT
Nông Cống I và đem lại hiệu quả trông thấy thông qua các số liệu khảo
sát. Hy vọng sáng kiến này sẽ được nhiều đồng nghiệp cùng chuyên môn
ở các trường tham khảo và hướng tiếp tục nghiên cứu phát triển mở rộng
hơn nữa để sáng kiến được hoàn thiện hơn.
DANH MỤC TÀI LIỆU THAM KHẢO
1. Hội Tin học Việt Nam - Tạp chí “Tin học và nhà trường”
2. Hồ Sĩ Đàm (chủ biên)- Sách giáo khoa, sách giáo viên tin học lớp 11
3. GS-TS Hoàng Kiếm -“Giải một bài toán trên máy tính như thế nào”
4. Quách Tuấn Ngọc - Ngôn ngữ lập trình Pascal

XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN Thanh Hoá, ngày 1 tháng 5 năm
VỊ
2016

Tôi xin cam đoan đây là SKKN của
mình viết, không sao chép nội dung
của người khác.

10



11



×