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

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 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”.

doc 26 trang Chăm Nguyễn 27/03/2025 180
Bạn đang xem 20 trang mẫu của tài liệu "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", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

Tóm tắt nội dung tài liệu: 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

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
scal 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 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.
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ụ: 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:
Nếu chỉ có 1 hộp thì đó chính là hộp nặng nhất và kết thúc.
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.
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
Trở lại bước 3
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ụ: 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ó 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
Else 
	If a<c then a:=c;
Write(‘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
a<b
a<c
3
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
a<b
a<c
5
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 vd3_1;
Uses crt;
Var a,b,c:integer;
Begin
Clrscr;
Write(‘nhap vao 3 so:’);
Readln(a,b,c);
If a<b then
 Begin
	If b<c then a:=c else a:=b;
 End
Else 
	If a<c then a:=c;
Write(‘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,
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 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í 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<=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ì xoá 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 toán trên ngoà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: Xoá 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: 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.
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<=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.
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, 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.
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
 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ự đ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
 b:=true; j:=1;
 while (j<trunc(sqrt(i))) and b do
 begin
 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.
CHƯƠNG III
PHƯƠNG PHÁP VÀ KẾT QUẢ NGHIÊN CỨU
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.
Kết quả nghiên cứu:
Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2017-2018 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
11A6
49
88%
12%
2
11A7
48
62.5%
37.5%
3
11A9
50
56%
44%
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.
Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2018-2019 sau khi thực hiện đề tài:
Lớp
Số học sinh khảo sát 
Kết quả từ TB trở lên 
Đầu năm 
Học kì I 
Cuối năm 
11A1
42
36
38
42
11A2
41
30
37
41
11A3
53
30
33
46

C. PHẦN III: PHẦN KẾT THÚC
Trong nội dung của đề tài này, với mong muốn giúp cho việc dạy và học ngôn ngữ lập trình nói chung và Pascal nói riêng của giáo viên và học sinh được tốt hơn.
Trên đây là toàn bộ kinh nghiệm của tôi qua nhiều năm liền dạy ở khối lớp 11 cũng như tham khảo qua nhiều nguồn thông tin, tư liệu khác nhau, rất mong được sự đóng góp của các đồng nghiệp nhằm giúp đề tài của tôi được hoàn thiện thêm.
DANH MỤC TÀI LIỆU THAM KHẢO
Dự án Việt-Bỉ - Tài liệu nghiên cứu khoa học sư phạm ứng dụng
Hội Tin học Việt Nam - Tạp chí “Tin học và nhà trường”
Hồ Sĩ Đàm (chủ biên)- Sách giáo khoa, sách giáo viên tin học lớp 11
GS-TS Hoàng Kiếm -“Giải một bài toán trên máy tính như thế nào”
Quách Tuấn Ngọc - Ngôn ngữ lập trình Pascal
Các bài tập tham khảo ở đĩa CD “100 bài toán-tin”

File đính kèm:

  • docsang_kien_kinh_nghiem_mot_so_luu_y_khi_day_lap_trinh_pascal.doc