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

Skkn một số phương pháp rèn luyện kỹ năng lập trình

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 (255.81 KB, 25 trang )

Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”

Đề tài: “MỘT SỐ PHƯƠNG PHÁP RÈN LUYỆN KỸ NĂNG LẬP TRÌNH”.

NỘI DUNG

Trang

I. PHẦN MỞ ĐẦU..................................................................................................................................2
1.1. Lý do chọn đề tài :..........................................................................................................................2
1.2. Điểm mới của đề tài:......................................................................................................................2
1.3. Phạm vi áp dụng:...........................................................................................................................3
1.3.1. Phạm vị nghiên cứu.....................................................................................................................3
1.3.2. Khách thể nghiên cứu..................................................................................................................3
1.3.3. Đối tượng nghiên cứu..................................................................................................................3
II. PHẦN NỘI DUNG..............................................................................................................................3
2.1. Thực trạng vấn đề cần nghiên cứu:................................................................................................3
2.1.2. Về mặt khó khăn:........................................................................................................................3
2.1.3. Kết quả khảo sát khi chưa áp dụng đề tài:...................................................................................4
2.1.4. Khả năng áp dụng......................................................................................................................7
2.2. Các giải pháp:................................................................................................................................7
2.2.1. Xác định bài tốn:.......................................................................................................................8
2.2.2. Tìm thuật tốn:..........................................................................................................................10
2.2.3. Viết chương trình:.....................................................................................................................12
2.2.4. Chạy Thử, thay đổi, kiểm tra chương trình:..............................................................................16
2.2.4.1. Chạy thử:................................................................................................................................16
2.2.4.2. Phân loại lỗi và cách sửa lỗi:.................................................................................................19
2.2.4.3. Kiểm tra:................................................................................................................................21
2.2.4.4. Thay đổi chương trình:...........................................................................................................22
2.3. Kết quả đạt được:.........................................................................................................................24
III: PHẦN KẾT LUẬN...........................................................................................................................25


3.1. Ý nghĩa của đề tài:.......................................................................................................................25
3.2. Kiến nghị và đề xuất:...................................................................................................................25
3.2.1. Đối với nhà trường:..................................................................................................................25
3.2.1. Đối với Phòng Giáo Dục:.........................................................................................................25

skkn

Trang 1


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”

I. PHẦN MỞ ĐẦU
1.1. Lý do chọn đề tài :
Hiện nay, thế giới đang bước vào thời đại công nghiệp 4.0. Sự phát triển
mạnh mẽ của tin học, đặc biệt là cơng nghệ số với phần cứng máy tính, phần
mềm, các hệ thống mạng và Internet những năm gần đây đã làm biến đổi sâu
sắc đời sống xã hội cũng như nền kinh tế toàn cầu. Vậy, chúng ta phải làm gì
trong thời đại mới này hay chỉ sử dụng máy tính để chơi game, nghe nhạc, hay
chỉ soạn thảo văn bản đơn giản mà thôi?
Là một giáo viên tin học, một trong các mục tiêu khi dạy môn tin học
trong nhà trường là nhằm giúp học sinh không chỉ biết soạn thảo mà cịn phải
có khả năng phân tích, tổng hợp, trừu tượng hố, khái qt hố vấn đề và đặc
biệt là phát triển tư duy, sáng tạo trong học tập cũng như trong công tác bồi
dưỡng học sinh giỏi. Sự thành công của việc dạy học phụ thuộc rất nhiều vào
phương pháp dạy học được giáo viên lựa chọn. Vì vậy, tơi mạnh dạn lựa chọn
đề tài cải tiến kỹ thuật: “Một số phương pháp rèn luyện kỹ năng lập trình”. Để
làm sao đó giúp cho các em có sự đam mê học tập bộ mơn tin học, nhất là tiết
thực hành và rèn luyện cho học sinh tính tư duy, tính sáng tạo trong q trình
lập trình.

1.2. Điểm mới của đề tài:
Qua đề tài này:
- Cung cấp cho học sinh các bước để giải bài toán bằng ngơn ngữ lập
trình Pascal, Free Pascal.
- Định hình cho học sinh các nội dung cần giải quyết của bài toán.
- Cung cấp cho học sinh các phương pháp xử lý, giải quyết các vấn đề
quan trọng của bài toán.
- Cách xử lý các lỗi thường gặp trong khi lập trình và xử lý kết quả.
- Cung cấp cho giáo viên phương pháp để giảng dạy Tin học 8 và bồi
dưỡng học sinh giỏi Tin học Pascal, Free Pascal.

skkn

Trang 2


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
1.3. Phạm vi áp dụng:
1.3.1. Phạm vị nghiên cứu.
Học sinh lớp 8 và học sinh giỏi Tin học 8 trường THCS, năm học 20182019 và 2019-2020.
1.3.2. Khách thể nghiên cứu.
Một số lỗi thường gặp của học sinh lớp 8 khi giải bài tốn bằng ngơn
ngữ lập trình Pascal.
1.3.3. Đối tượng nghiên cứu.
Phương pháp xử lý các lỗi thường gặp của học sinh lớp 8 khi giải bài
tốn bằng ngơn ngữ lập trình Pascal.

II. PHẦN NỘI DUNG
2.1. Thực trạng vấn đề cần nghiên cứu:
2.1. 1. Về mặt thuận lợi:

Được sự quan tâm, giúp đỡ tận tình của Ban Giám Hiệu và tổ chức đoàn
thể trong nhà trường. Sự ủng hộ nhiệt tình của các đồng nghiệp đã giúp cho
quá trình giảng dạy Tin học của tôi đạt hiệu quả cao hơn.
Nhà trường cũng có 20 máy vi tính và đã được kết nối Internet.
Mỗi lớp đều có số học sinh ham học, tích cực phát biểu xây dựng bài
trong giờ học, là nguồn động viên lớn trong quá trình giảng dạy của tơi.
Nhìn chung, học tập theo phương pháp mới thì học sinh có hứng thú học
tập hơn so với phương pháp dạy học truyền thống. Vì thế, có điều kiện phát
triển tư duy và khả năng diễn đạt và lập trình của các em.
2.1.2. Về mặt khó khăn:
Cơ sở vật chất chưa trang bị đầy đủ: số lượng máy tính cịn rất hạn chế
(1-2 HS/1 máy). Do vậy, giáo viên cần chủ động tìm các giải pháp khắc phục
trong quá trình giảng dạy.

skkn

Trang 3


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
Giáo viên Tin học tuổi nghề cịn trẻ nên chưa có nhiều kinh nghiệm dạy
học cũng như cơng tác bồi dưỡng HSG.
Tin học 8 là mơn học khó địi hỏi tính tư duy, sáng tạo cao nên hầu hết
học sinh cảm thấy sợ và lung túng trong quá trình học. Vì khi giải một bài tốn
ở ngồi thì đơn giản và chỉ trong vịng vài giây có thể nhẩm ra kết quả. Cịn ở
trong lập trình cũng bài tốn đó mà phải làm đến hàng chục phút mà lại có thể
cho kết quả sai.
Trong cơng tác BDHSG thì học sinh chỉ thích chọn các mơn học khác nên
việc lựa chọn đội tuyển gặp nhiều khó khăn. Phần đa là chỉ chọn được học sinh
có học lực khá để bồi dưỡng.

Học sinh thích học trên máy nhưng cịn tư tưởng “chơi” hơn là “học”.
Phương pháp dạy học mới hiện nay tơi thấy u cầu cao (Giáo viên - Học
sinh). Địi hỏi giáo viên thật sự tâm huyết với nghề, có tinh thần trách nhiệm
cao, đầu tư cho tiết dạy rất nhiều. Học sinh phải có ý thức học tập tốt, chăm chỉ
u thích mơn học thì mới đáp ứng được mục tiêu tiết học. Học sinh phải tự
khám phá những hiểu biết đối với bản thân và ghi nhớ vận dụng vào cuộc sống
của mình. Cịn học sinh yếu kém chưa cố gắng thì sẽ khơng theo kịp.
Nhiều gia đình, học sinh cịn xem đây là một mơn phụ, tự chọn nên chưa
có sự quan tâm đầu tư đúng mức.
2.1.3. Kết quả khảo sát khi chưa áp dụng đề tài:
Qua bốn năm giảng dạy chương trình tin học lớp 8, tơi nhận thấy rằng kĩ
năng lập trình giải bài tốn trên máy tính của các em cịn yếu. Đặc biệt là
thường mắc một số lỗi trong khi lập trình như:
- Sử dụng sai vị trí hoặc thiếu dấu “;”. 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. Học sinh cần phải chú ý hằng
xâu đặt trong cặp nháy đơn để nội dung được in ra màn hình cịn biến thì
khơng cần đặt trong cặp nháy đơn.
- Đặt tên biến sai quy tắc:
+ Tên biến bị trùng với từ khóa;
+ Tên biến bị trùng nhau trong cùng một chương trình;

skkn

Trang 4


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
+ Tên biến chứa dấu cách như viết văn bản hay có khoảng cách phía

trước,…
- 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 3 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[3..100] of integer;
- 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:
1. Thực hiện biểu thức trong ngoặc.
2. *, /, div, mod.
3. +, -, or, and.
4. Các phép so sánh: >=,>,<=,<,=,<>.

- 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 (integer) nên miền giá trị tối đa
là 32767  Phải sửa lại kiểu Longint.
- Khai báo sai (khơng tương thích) kiểu dữ liệu:
Ví dụ: Chương trình tính chu vi và diện tích hình chữ nhật:
uses crt;
var a,b:real; s,cv:integer;
Begin

skkn


Trang 5


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
clrscr;
writeln ('chieu dai a='); readln(a);
writeln ('chieu rong b='); readln(b);
cv:= (a+b)*2; s:=a*b;
write('chu vi la ',cv);
writeln('dien tich la ',s);
readln
End.
Khi chạy chương trình trên chương trình sẽ báo lỗi type mismatch chỗ
dịng cơng thức tính diện tích của biến a, b. Cách khắc phục ta sửa biến a,b,cv,s
về cùng kiểu là được.
- Dùng cùng tên biến điều khiển cho các vòng lặp for lồng nhau (dành cho
học sinh giỏi):
Ví dụ: Tính tổng S=1k+2k+….+nk
Học sinh lập trình giải bài tố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.
- Sử dụng tên hàm làm biến cục bộ (dành cho học sinh giỏi):
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ẽ

skkn

Trang 6


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
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.
Như vậy, khi giải bài toán trên máy học sinh chỉ quan tâm đến cơng thức
để tính tốn ra kết quả bài tốn mà quên các bước xác định thông tin vào,
thông tin ra và xây dựng thuật tốn. Khi chạy chương trình thì học sinh chưa
nhận biết được kết quả chương trình đúng hay sai.
- Trước khi thực hiện đề tài, tôi đã khảo sát học sinh khối 8 thông qua giờ
dạy lý thuyết, dạy thực hành, kiểm tra bài cũ. Tổng hợp kết quả thu được:

Giỏi
Lớp

Khá

Sĩ số
SL


TL %

SL

TB

Yếu

Trên TB

TL %

S
L

TL
%

SL

TL
%

SL

TL %

8A

28


3

10.7

5

17.9

12

42.8

8

28.6

20

71.4

8B

26

2

7.7

5


19.2

11

42.3

8

30.8

18

69.2

2.1.4. Khả năng áp dụng
- Đề tài này có thể vận dụng cho tất cả học sinh mới bắt đầu làm quen
ngôn ngữ lập trình Pascal, Free Pascal.
2.2. Các giải phá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 yêu cầu đề bài và phân loại bài tập cần phải đưa ra nhiều dạng
bài tập khác nhau, 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 chương trình, …
Phương pháp cơ bản giải các bài tốn trong tin học khơng chỉ dùng để
giải một bài tốn cụ thể mà cịn giải 1 lớp các bài toán cụ thể thuộc cùng một

skkn


Trang 7


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
loại. Bài tốn được cấu tạo từ hai yếu tố cơ bản: Thông tin vào (Input) và
thông tin ra (Output). Phương pháp tổng quát để giải một bài toán bằng máy vi
tính dựa trên ngơn ngữ pascal thì cần các bước:
- Bước 1: Xác định bài toán là xác định (thông tin vào kết quả cần xác định (thông tin ra - OUTPUT).

INPUT) và

- Bước 2: Thiết lập phương án giải quyết (xây dựng thuật tốn) là tìm,
lựa chọn thuật tốn và mơ tả nó bằng ngơn ngữ thơng thường.
- Bước 3: Viết chương trình (lập trình) là diễn đạt thuật tốn bằng một
ngơn ngữ lập trình sao cho máy tính có thể hiểu và thực hiện.
- Bước 4: Chạy thử, sửa đổi chương trình.
2.2.1. Xác định bài tốn:
* Khái niệm bài tốn:
Trong q trình học người học sinh hay bất kỳ một cá nhân nào luôn phải
liên tục giải quyết các bài toán. Trong cuộc sống là 1 chuỗi các bài toán mà ta
phải đối đầu giải quyết không một chút đơn giản mà nhiều lúc phải bực mình.
Song đối với học sinh lớp 8 do chương trình học tốn của các em chỉ mới đến
giải phương trình bậc nhất là cao nhất. Nên việc đưa các lớp bài tốn vào giải
cho các em đang cịn một phần nào bị hạn chế. Như ng bất kỳ một bài tốn nào
thì chúng ta cũng đọc đề rồi xác định nó : A  B.
Trong đó:
- A là giả thiết : điều kiện ban đầu hoặc cái đã cho khi bắt đầu giải bài
toán.
- B là kết luận: mục tiêu cần đạt được hay cái phải tìm khi kết thúc bài
toán.

 Là suy luận: giải pháp cần xác định hay chuỗi các thao tác thực hiện
từ A đến B.
* Bài tốn trên máy vi tính:
Bài tốn trên máy cũng mang đầy đủ các tính chất của bài tốn tổng qt
trên, nhưng nó lại được diễn đạt theo một cách khác.
- A: là đưa thông tin vào (Input )
- B: là đưa thông tin ra (Output)

skkn

Trang 8


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
 : là chương trình tạo từ các lệnh cơ bản của máy tính cho phép biến đổi
từ A đến B.
* Một số ví dụ:
Ví dụ 1: Tính chu vi và diện tích hình chữ nhật.
Ta cần xác định cho bài tốn:
+ Thơng tin vào: Chiều dài là cạnh a, chiều rộng là cạnh b
+ Thông tin ra: Kết quả chu vi và diện tích khi đưa a,b vào
+ Các thông tin cần chế biến thông tin như:
- Lần lượt đưa a,b vào ( cho a=3,b=4)
- Áp dụng công thức tính chu vi hình chữ nhật: (a+b)*2
- Áp dụng cơng thức tính diện tích hình chữ nhật: a*b
- Kết quả in ra là: Chu vi = 14; Diện tích =12.
Ví dụ 2: 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 tố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 tốn như sau:
+ Thơng tin vào: n hộp có khối lượng khác nhau và một cái cân dĩa.
+ Thơng tin ra: Kết quả tìm hộp nặng nhất.
+ Các thông tin cần chế biến thông tin như:
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

skkn

Trang 9


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
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.
Ví dụ 3: Bài tốn giải phương trình bậc nhất dạng tổng quát bx + c = 0
- INPUT: Các số b và c
- OUTPUT: Nghiệm của phương trình bậc nhất
- Bước 1: Nếu b=0 chuyển tới bước 3.
-

Bước 2: Tính nghiệm của phương trình x=- c/b và chuyển tới bước 4.

- Bước 3: Nếu C khác 0 phương trình đã cho vơ nghiệm. Ngược lại nếu

c=0 thơng báo phương trình có vơ số nghiệm.
- Bước 4: Kết thúc.
2.2.2. Tìm thuật tốn:
Thuật tốn là một q trình gồm một dãy hữu hạn các thao tác đơn giản
được sắp xếp theo một trình tự xác định sao cho theo đó từ Input của bài tốn
sẽ tìm ra được Output bài tốn.
- 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 8 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ế. Tuy nhiên, giáo viên 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.
- Một bài tốn ta có 4 cách thể hiện thuật toán: Các bước xác định bằng
lời, lập sơ đồ khối, ngơn ngữ phỏng trình, dùng một ngơn ngữ lập trình
(Pascal).
Ví dụ: Tìm ước số chung lớn nhất của 2 số nguyên dương a,b. Ta có thể giải
bằng các cách sau:
Cách 1: Các bước xác định bài toán bằng lời:
- Bước 1: Nhập 2 số nguyên dương là a,b.
- Bước 2: So sánh giá trị a và b. Nếu a bằng b thì sang bước 3, ngược lại a
khác b thì sang bước 4.

skkn

Trang 10


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
- Bước 3: Tìm được ước số chung là a và kết thúc chương trình.

- Bước 4: Nếu a lớn hơn b thì ước số chung lớn nhất là a:=a-b và quay trở
lại bước 2. Ngược lại ước số chung là b:=b-a và quay trở lại bước 2.
Cách 2: Giải bài tốn bằng sơ đồ
- Có hình thoi  thể hiện các thao tác so sánh.
- Hình chữ nhật thể hiện các phép tính tốn, các câu lệnh.
- Hình ôvan thể hiện bắt đầu và kết thúc.
- Các mũi tên quy định trình tự các thao tác.

Begin
a, b

a=b

đúng

UCLN là a

sai
đúng

a>b

END

sai

b:= b - a

a:= b - a


Cách 3: Dùng ngôn ngữ phỏng trình
Bắt đầu
Nhập a, b
While a khác b
IF a>b then thay a :=a -b
Else thay b:=b-a;
Kết thúc in ra USCLN (a,b).
Cách 4: Viết chương trình hồn chỉnh (dùng ngơn ngữ pascal)
Program UCLN;

skkn

Trang 11


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
Uses crt;
Var a,b, :integer;
Begin
clrscr;
write('nhap 2 gia tri a,b='); readln(a,b);
while a<>b do
if a>b then a:=a –b
else b:=b-a;
writeln('uoc so chung lon nhat cua 2 so’,a:5);
Readln

End.

2.2.3. Viết chương trình:

Lập trình là dùng ngơn ngữ máy vi tính cụ thể nào (ngơn ngữ Pascal) để
diễn tả thuật toán, cấu trúc dữ liệu thành câu lệnh để máy tính có thể thực hiện
được và giải quyết đúng bài tốn mà người lập trình mong muốn.
* Kỹ năng lập trình:
- Rèn luyện được cho học sinh kỹ năng cài đặt thành cơng các thuật tốn
bằng một ngơn ngữ lập trình.
- Đã gọi là kỹ năng thì chỉ có thể có được thơng qua rèn luyện tích cực.
- Kinh nghiệm cho thấy một thuật tốn do sắp đặt vụng về, lộn xộn thì
khi chạy trên máy tính có thể cho kết qủa tồi tệ.
* Phát triển chương trình bằng cách tinh chế từng bước
Một bài tốn ta có thể đưa ra nhiều cách giải khác nhau, song là một
giáo viên thì chúng ta cần giúp học sinh viết chương trình làm sao người xem
nhìn vào có thể dễ hiểu được bài tốn đó là gì ? Do đó việc tinh chỉnh các b ước
cho bài tốn trong máy tính là phương pháp khoa học, có hệ thống giúp ta
phân tích các thuật tốn và cấu trúc dữ liệu từ đó thành một ch ương trình.
Muốn lập trình giỏi khơng phải chỉ cần nắm ngơn ngữ lập trình là đủ. Mà vấn
đề cốt yếu là biết phương pháp phát triển dần dần để chuyển các ý tưởng ra
thành chương trình hồn chỉnh.
* Phương pháp tinh chế từng bước

skkn

Trang 12


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
Một chương trình bắt đầu được viết bằng lời tự nhiên (tiếng Việt) thể
hiện sự phân tích tổng thể của người lập trình được thể hiện
Ở từng bước sau các câu lệnh được phân tích chi tiết hơn, bằng những
lời khác nhau tương ứng với sự phân tích cơng việc thành các việc nhỏ chi tiết

hơn dễ hiểu và chính xác hơn. Song ngơn ngữ lập trình pascal ng ười lập trình
có thể đưa ra phương pháp tinh chỉnh từng bước là thể hiện tư duy giải quyết
vấn đề bài tốn từ trên xuống trong đó các bước là hướng về ngơn ngữ lập trình
làm sao cho bài tốn đưa ra được phương pháp lập trình tối ưu, sáng sủa.
* Ví dụ: Tìm tất cả các số ngun tố trong các số nguyên N đư ợc nhập
vào từ bàn phím.
a. Tinh chế lần 1:
- Lấy 2 tập
NT= [ ] (để chứa các số nguyên tố tìm được)
S = [2,..N] (tập các số cần xét )
- Tìm số đầu tiên trong S đưa vào NT
- Loại bỏ khỏi S các bội số của số nguyên tố vừa tìm được
- Số đầu tiên còn lại của S là số nguyên tố. Tiếp tục quá trình cho đến
khi S=[]
- Xuất NT
b. Tinh chế lần 2:
Bắt đầu
NT: = [ ]
S = [2,..N]
Repeat
Tìm số đầu tiên trong S
NT:= NT+ [S0]
Loại khỏi S các bội số của S0
Until S=[ ];
Xuất NT;

skkn

Trang 13



Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
Kết thúc;c. Tinh chế lần 3 ( chương trình hoàn chỉnh):
Program nguyen_to;
Const
Type

N=100;
nguyen=1..N;

var NT, S:set of nguyen;

S0, I:integer;

begin
NT:=[]; S:=[2..N]; S0:=2;
repeat
while not (S0 in S) do
S0:=S0+1; NT:=NT+[S0]; I:=S0;
While I<=N do
Begin
s:=S-[i];I:=I+S0;
End;
until S=[];
for I:= 1 to n do
If I in Nt then Write(I:4);
readln
end.
d. Tinh chế lần 4: Rõ ràng cấu trúc dữ liệu tập hợp “Set of nguyen” tuy dễ hiểu
nhưng rất cồng kềnh và làm máy chạy chậm chạp, ta có thể dùng mảng

Boolean linh hoạt hơn như sau:
Program nguyen_to;
Const

N=100;

var a:array[1..N] of boolean;

i, j:integer;

begin
a[1]:=false;
for i:=2 to N do a[i]:=true;

skkn

Trang 14


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
for i:= 2 to N div 2 do
for j:= 2 to N div i do

a[i*j]:=false;

for i:= 1 to N do
if a[i] then
write(i:3);
readln


end.

e. Tinh chế lần 5:
Trong ngôn ngữ pascal nếu dùng mảng boolean thì ta bị giới hạn
N<10000. Để có thể chạy với số lớn hơn ta khơng dùng mảng, tập hợp mà
dùng như sau:
Program nguyen_to;
uses crt;
var

i,j,k,n:integer;

begin
repeat
write('nhap n=');readln(n);
until n>= 2;
for i:= 2 to n do
begin
k:=0;
for j:= 2 to trunc(sqrt(i)) do
if i mod j=0 then k:= 1;
if k=0 then write(i:3);
end;
readln

end.

Như vậy, rèn luyện kỹ năng lập trình giúp người lập trình có thể tinh
chỉnh chương trình từng bước làm sao đưa ra một phương án tối ưu cho người
xem dễ tiếp thu và đạt được tốc độ tính tốn cao nhất cũng như chiếm bộ nhớ

của máy tính càng ít càng tốt.

skkn

Trang 15


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
2.2.4. Chạy Thử, thay đổi, kiểm tra chương trình:
2.2.4.1. Chạy thử:
Một chương trình đã viết xong chưa chắc đã chạy được trên máy vi tính
để cho kết quả mong muốn.
Ví du 1: Tìm số lớn nhất trong 3 số a,b,c nguyên dương được nhập vào từ bàn
phím.
Lần 1:

Uses crt; Var a,b,c:integer;
Begin
Clrscr;
Write(‘nhap vao 3 so:’); Readln(a,b,c);
If aElse

If a
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ộ test sau đây:

a=3,b=4,c=5
a

b

c

a
3

4

5

T (3<4)

a
4
Vậy số lớn nhất là 4 Kết quả sai
a=5,b=4,c=7
a

b

c

a

a
5

4

7

F (5<4)

T (5<7)

7

skkn

Trang 16


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”

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. Do đó người lập trình cần phải biết
cách tìm lỗi. Sữa lỗi, điều chỉnh viết lại chương trình cũng là kỹ năng quan
trọng của người lập trình. Vậy với ví dụ trên để kết quả ln đúng thì ta có thể
viết lại chương trình
Lần 2:
Uses crt;
Var a,b,c:integer;

Begin
Clrscr;
Write(‘nhap vao 3 so:’);
Readln(a,b,c);
If aBegin
If bEnd

Else
If a
Write(‘So lon nhat la:’,a);
Readln;
End.
Nếu nhập:
Lần nhập

A

B

C

Kết quả

1

5


4

7

7

2

5

7

9

9

3

9

3

5

9

skkn

Trang 17



Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
Ví dụ 2: Viết chương trình in ra màn hình hình chữ nhật tồn dấu * với chiều
dài và chiều rộng nhập từ bàn phím.
Lần 1: Program hcn;
Uses crt;
Var i, cd, cr : integer;
Begin
Clrscr;
Write(‘ Nhap chieu dai hinh chu nhat’);
readln(cd);
Write(‘ Nhap chieu rong hinh chu nhat’);
readln(cr);
For i = 1 to cd*cr do writeln(‘*’);
Readln
End.
Với chương trình này cũng chạy được song kết quả sai (in ra màn hình
một cột tồn dấu * với chiều dài là diện tích hinh chữ nhật).
Với ví dụ trên để kết quả ln đúng thì ta có thể viết lại chương trình.
Lần 2: Program hcn;
Uses crt;
Var i,j, cd,cr:integer;
Begin
Clrscr;
Write(‘ Nhap chieu dai hinh chu nhat’);
readln(cd);
Write(‘ Nhap chieu rong hinh chu nhat’);
readln(cr);
For i = 1 to cr do
Begin


skkn

Trang 18


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
for j = 1 to cd do write(‘*’);
Writeln;
End;
Readln
End.
2.2.4.2. Phân loại lỗi và cách sửa lỗi:
- Lỗi sau câu lệnh ta không sử dụng dấu chấm phẩy, hay kết thúc
chương trình khơng có dấu chấm, hay từ khố BEGIN nếu ta viết BE GIN thì
sẽ khơng có nghĩa.
- Lỗi về thuật tốn: Điều chỉnh lại thuật tốn, thêm vị trí có thể, loại bỏ
thuật tốn sai, tìm thuật tốn khác nghĩa là làm lại từ đầu.
1

Ví dụ 1: Viết chương trình tính tổng S=
phím)

1 1
1
  .... 
2 3
n

(n được nhập vào từ bàn


Học sinh viết chương trình khai báo biến S thuộc kiểu dữ liệu nguyên
(Integer) thì chương trình sẽ khơng thực hiện được phép tốn tính tổng. Do vậy
để thực hiện được phép tốn thì khai báo biến S là thuộc kiểu dữ liệu thực
(Real).
- Lỗi về trình tự: Phải xem lại thuật tốn, phân tích lại từ trên xuống
dưới để đặt lại cho đúng với thuật toán.
- Lỗi về cú pháp: viết lại cho đúng cú pháp của ngơn ngữ lập trình mà
mình đang sử dụng.
Ví dụ 2: Viết chương trình giải phương trình ax + b = 0, với a,b hai số nguyên
nhập từ bàn phím. In kết quả tìm được x là nghiệm của phương trình.
- Lỗi khơng nhận ra được kết quả:
Với ví dụ này đa số học sinh không nhận ra được kết quả (dữ liệu ra) của
bài tốn có thể là thơng báo “Phương trình vơ nghiệm”, “Phương trình có vơ số
nghiệm”. Nguyên nhân dẫn đến việc học sinh không phát hiện được các thông
báo này là do trong đề ra bài tốn ở phần ví dụ khơng thể hiện. Để tránh trường
hợp này giáo viên cần hướng dẫn cho học sinh phân tích và tổng qt hóa các
trường hợp cụ thể của a, b.

skkn

Trang 19


Đề tài: “Một số phương pháp rèn luyện kỹ năng lập trình”
Đối với cấu trúc (hình thức) hiển thị kết quả thì học sinh sẽ gặp phải rất
nhiều lỗi, mà không chỉ học sinh ngày cả giáo viên khi giải quyết bài tốn này
cũng khơng tránh khỏi, cụ thể:
Nhập vào


In ra màn hình
(Kết quả học sinh)

Kết quả đúng theo yêu cầu

a = -2, b = 3

x = -3/-2

x = 3/2

a = 3, b = -6

x = 6/3

x=2

a = 2, b = 0

x = 0/2

x=0

a = -2, b = -5

x = 5/-2

x = -5/2

- Lỗi thông báo nghiệm: Lỗi này xuất hiện trong trường hợp a = 0 mà trong

chương trình khơng có kiểm tra điều kiện a = 0. Để xử lý lỗi này trong chương
trình cần có lệnh kiểm tra điều kiện a tương ứng với điều b cho ra hai thông
báo.
- Lỗi hiển thị kết quả:
(1) Không tối giản kết quả (UCLN(a,b)  1)
(2) Số âm ở dưới mẫu (a < 0)
(3) Không hiển thị kết quả dạng số nguyên (b chia hết cho a)
(4) Lỗi hiển thị 0/a
Phương pháp xử lý (1):
- Viết đoạn lệnh tìm UCLN của a,b
- a  a div UCLN (a,b); b  b div UCLN (a,b)
Phương pháp xử lý (2), (3), (4):
- Sau khi thực hiện a  a div UCLN (a,b); b  b div UCLN (a,b)
- Kiểm tra nếu a < 0 thì a  -a và b  -b
- Kiểm tra nếu b chia hết cho a thì in kết quả x = -b ngược lại in x = -b/a.

skkn

Trang 20