SKKN Một số giải pháp khi dạy lập trình Pascal cho học sinh lớp 11

SKKN Một số giải pháp khi dạy lập trình Pascal cho học sinh lớp 11

- 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 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ố giải pháp khi dạy lập trình Pascal cho học sinh lớp 11”.

 

doc 16 trang thuychi01 6640
Bạn đang xem tài liệu "SKKN Một số giải pháp 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 bạn click vào nút DOWNLOAD ở trên
I. MỞ ĐẦU
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 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ố giải pháp khi dạy lập trình Pascal cho học sinh lớp 11”.
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.
Đối tượng nghiên cứu
Đối tượng nghiên cứu: học sinh các lớp 11A1, 11A2 trường THPT Quan Hóa
Phương pháp nghiên cứu.
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.
II. NỘI DUNG
Cơ sở lí luận:
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ể.
Thực trạng vấn đề trước khi vận dụng sáng kiến kinh nghiệm.
Qua thực tế giảng dạy ở trường THPT Quan Hóa 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 và giáo viên đều nhận xét bộ môn này rất khó so với chất lượng đầu vào của các em.
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 rất 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.
3. Giải pháp thực hiện.
 Một số lỗi sai thường gặp của học sinh trong lập trình Pascal.
Sử dụng dấu’ ;’ sai vị trí [1].
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ả.
Không phân biệt được hằng xâu và biến[1] : 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.
Tràn số[3].
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
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 10 và nhỏ hơn 100. 
Học sinh khai báo mảng như sau:
Var a: array[3..100] of integer;
Chưa hiểu thứ tự ưu tiên phép toán.[3]
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
>=,>,
Giá trị biến điều khiển vượt quá miền chỉ số của mảng[2].
Ví dụ : Nhập vào một dãy số gồm 10 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..10] of integer; 
 i,d:integer;
 kt:boolean;
Begin
Write(‘nhap day so:’);
For i:=1 to 10 do
Begin
Write(‘a[’ ,i, ‘]’);
Readln(a[i]);
End;
d:=a[2]-a[1];kt:=true;i:=1;
while (kt) and (i<=10) 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.
Sử dụng tên hàm làm biến cục bộ[4].
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.
Không hiểu nguyên tắc làm tròn số đối với số thực [5].
Trong toán học: 
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 
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ố ( như đã trình bày ở trên.)
 Một số kinh nghiệm dạy lập trình Pascal:
Đưa ra 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 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 [3]
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 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
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:
Var i:integer;
Begin
I:=9;
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 [4].
Ví dụ : Để 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:
Var a,b,c:integer;
Begin
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:
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ụ : 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,
Viết chương trình theo thuật toán đã cho.
Để 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ụ : 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: [2]
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:
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ụ : Viết chương trình đếm và in ra các số trong 1 xâu đã cho [3].
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.
Ví dụ: Nhập vào 1 mảng gồm n số nguyên (2<n<20). In ra các số nguyên tố có trong mảng [3].
 Giáo viên có thể phân tích đề bài chia bài toán ban đầu thành 2 bài toán con có độ phức tạp bé hơn, thực hiện cài đặt thuật toán như sau:
var a: array [ 1..20] of byte; 
 i,n,d,j,k: integer; 
Procedure nhap; 
 Begin 
 for i:=1 to n do 
 Begin 
 write(' a[',i,']='); readln(a[i]); 
 End; 
 End; 
Procedure nguyento; 
 Begin 
 write(' Day so cac so nguyen to: '); 
 k:=0; 
 for i:=1 to n do 
 Begin 
 d:=0; 
 for j:=1 to a[i]-1 do 
 if a[i] mod j=0 then d:=d+1; 
 if d=1 then 
 Begin 
 write(' ',a[i]); 
 k:=k+1; 
 End; 
 End; 
 if k=0 then write(' khong co so nao')
 else 
 begin 
 writeln; 
 writeln(' Trong day co ',k,' so nguyen to'); 
 End; 
 End; 
Begin 
 repeat write(' Nhap n='); readln(n); 
 until (2<n)And(n<20); 
 nhap; 
 nguyento; 
readln; 
End. 
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
Ví dụ : Chương trình sau là chương trình đọc dữ liệu từ tệp văn bản Songuyen.inp. Tính tổng các phần tử trong tệp và đưa dữ liệu ra tệp Songuyen.out.
 Tệp văn bản Songuyen.inp có cấu trúc:
Dòng đầu ghi số nguyên N là số phần tử của tệp
Dòng thứ hai gồm đúng N số nguyên. Mỗi số cách nhau một dấu cách trống.
 Tệp văn bản Songuyen.out có cấu trúc:
Một số duy nhất ghi tổng N phần tử
Songuyen.inp
Songuyen.out
5
1 2 6 8 3
20
Chương trình có thể được viết như sau:
Var i, N, x, S: integer;
 f1, f2: text;
Begin
 	assign(f1,'Songuyen.inp');
 	reset(f1);
 	assign(f2,'Songuyen.out');
rewrite(f2);
 	readln(f1,N);
S:=0;
for i:=1 to N do
 begin
read(f1,x);
 	S:=S+x;
end;
 	Write(f2,S:4);
 	close(f1);
 End.
Giáo viên yêu cầu học sinh chạy chương trình và phát hiện lỗi và lưu ý học sinh : Mỗi khi thao tác với tệp, khi làm việc với tệp ngoài gán tên tệp và mở tệp (để đọc hoặc để ghi) thì sau khi làm việc xong phải đóng tệp
4. Hiệu quả của sáng kiến kinh nghiêm.
Tôi đã tiến hành nghiên cứu, xây dựng từng bước nội dung kế hoạch trong năm học qua 2016 -2017 và nhận thấy tình hình học sinh chuyển biến theo xu hướng tích cực kết quả được phản ảnh qua bảng số liệu sau đối với 2 lớp 11A1 và 11A2.
Năm Học
Thực hiện SKKN
Chất lượng giáo dục (Số lượng/ %)
Giỏi
Khá
Trung Binh
Yếu/ Kém
2015- 2016
Chưa
1- 1.4%
20-28.2%
41-57.7%
9-12.7%
2016-2017
Đã áp dụng
3-4.1%
30-41.1%
35-47.9%
5-6.9%
III. KẾT LUẬN, KIẾN NGHỊ.
Kết luận.
Qua nghiên cứu, áp dụng các biện pháp trong sáng kiến kinh nghiệm trên nhận thấy nếu áp dụng các biện pháp trên, vận dụng linh hoạt vào các lớp học, trường học, tuỳ theo đặc điểm, đặc thù của mỗi trường, lớp thì chắc chắn sẽ có những chuyển biến tích cực về chất lượng giáo dục bộ môn cũng như chất lượng giáo dục toàn trường. Sáng kiến này tôi sẽ tiếp tục nghiên cứu bổ sung và cố gắng áp dụng linh hoạt hơn ở các lớp để có thể đạt được kết quả tốt nhất.
Kiến nghị.
Không.
XÁC NHẬN CỦA HIỆU TRƯỞNG 
Quan Hóa, ngày 20 tháng 5 năm 2017
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.
 Võ Văn Thuận
DANH MỤC TÀI LIỆU THAM KHẢO
Sách giáo khoa, sách giáo viên tin học lớp 11 

Tài liệu đính kèm:

  • docskkn_mot_so_giai_phap_khi_day_lap_trinh_pascal_cho_hoc_sinh.doc