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

SKKN: KINH NGHIỆM PHÁT HUY TÍNH TÍCH CỰC CỦA HỌC SINH TRONG LẬP TRÌNH PASCAL

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 (221.12 KB, 18 trang )

1. ĐẶT VẤN ĐỀ
1.1 Lý do chọn đề tài:
- Bước sang thế kỷ XXI - Thế kỷ của sự phát triển mạnh mẽ khoa học, kỹ thuật và
công nghệ, trước yêu cầu mới của của sự nghiệp công nghiệp hoá - hiện đại hoá đất
nước đòi hỏi các nhà trường phải đào tạo nên những con người lao động thông minh,
sáng tạo, độc lập, tự chủ, vì lợi ích của cộng đồng, của nhân loại. Để đạt được mục
tiêu này ngành giáo dục đã đưa bộ môn Tin vào nhà trường giúp cho thầy và trò tiếp
cận với công nghệ mới - công nghệ hiện đại của nền văn minh thông tin, thích ứng
với sự phát triển của xã hội.
- Khi tin học được đưa vào nhà trường nghiên cứu như các bộ môn khoa học khác,
các kiến thức tin học được đúc kết từ trong thực tiễn và phát triển dựa trên nhu cầu
khai thác của người dùng, do đó có nhiều điều kiện thuận lợi để sử dụng các phương
tiện dạy học - phát huy tính tích cực trong học tập của học sinh. Tuy nhiên, kỹ năng
vận dụng những tri thức đã học vào việc giải quyết những bài toán trong thực tiễn của
học sinh còn nhiều hạn chế.
- Mặt khác, vào giữa những năm 60 của thập kỷ này, khi mà việc lập trình cho máy
tính mang nặng tính kinh nghiệm, tính “nghệ thuật”; Với những chương trình nhìn
chung là khó đọc, khó kiểm soát lỗi ngay cả chính tác giả đã tạo ra nó, và đặc biệt là
không có cách nào khẳng định được tính đúng đắn của một chương trình, ngoài việc
kiểm tra chương trình ấy thông qua một số lần chạy thử với những dữ liệu vào khác
nhau, nếu thấy kết quả những lần chạy thử đó là đúng thì khẳng định là chương trình
đúng. Từ đó nảy sinh vấn đề làm thế nào giải quyết được những tồn tại nêu trên. Vấn
đề này đã lôi kéo nhiều nhà Tin học lý thuyết nổi tiếng quan tâm và tham gia. Phương
pháp lập trình có cấu trúc được đề xuất trong bối cảnh ấy.
- Lập trình có cấu trúc cho phép tạo ra những chương trình sáng sủa, dễ đọc, dễ
hiểu, dễ kiểm tra và điều quan trọng là có thể chứng minh được tính đúng đắn của
một chương trình.
- Tư tưởng chính của lập trình có cấu trúc là modul hoá chương trình, nghĩa là từ
một chương trình lớn, có thể phân ra thành những chương trình nhỏ, hay những
chương trình con, tương đối độc lập nhau và có thể giải quyết mộ cách độc lập từng
chương trình một. Trên cơ sở đó, có thể kiểm chứng tính đúng đắn của mỗi chương


trình con, rồi ghép nối lại thành chương trình hoàn chỉnh.
- Trong khi viết chương trình, ta thường gặp những đoạn chương trình được lặp đi,
lặp lại nhiều lần ở những chỗ khác nhau làm cho chương trình trở nên dài dòng.
Trong Pascal cho phép viết đoạn chương trình đó thành một chương trình con, mỗi
3


khi cần, ta viết thủ tục gọi chương trình con đó ra cùng với những tham số tương ứng.
Cách đó làm cho chương trình trở nên ngắn gọn, sáng sủa và tiết kiệm được công sức
lập trình.
- Với những bài toán lớn, phức tạp sẽ tương ứng với một chương trình rất lớn, rất
dài; việc nhìn khái quát tổng thể cả chương trình, cũng như việc gỡ rối, sửa lỗi là rất
khó khăn. Việc xây dựng một chương trình con cho phép tách chương trình lớn thành
những chương trình nhỏ hơn, đơn giản hơn làm cho việc kiểm tra, sửa chữa chương
trình được dễ dàng, thuận tiện hơn. Sau khi tạo xong các chương trình con này ta chỉ
việc ghép chúng lại thành một chương trình hoàn chỉnh. Chính lý do này làm cho giá
thành xây dựng toàn bộ chương trình giảm xuống và bớt đi được công sức thủ công
của người lập trình. Chính vì vậy, tôi muốn vận dụng cách viết và sử dụng chương
trình con trong lập trình có cấu trúc để giúp cho học sinh có kỹ năng giải quyết một
số bài toán được nhanh hơn, chính xác hơn và việc kiểm soát toàn bộ chương trình
cũng thuận tiện hơn.
1.2. Mục đích của việc nghiên cứu
- Mục đích của việc nghiên cứu sử dụng chương trình con trong lập trình có cấu
trúc nhất là lập trình Pascal nhằm giúp học sinh phát huy tính tích cực, tự giác, chủ
động, sáng tạo, rèn luyện thói quen làm việc độc lập và kỹ năng lập trình, giảm bớt
thời gian, công sức khi lập trình; giúp cho việc kiểm tra, sửa chữa chương trình trở
nên đơn giản hơn, dễ dàng hơn và thuận tiện hơn. Bên cạnh đó, học sinh còn biết vận
dụng để giải quyết các bài toán thường gặp trong thực tế; gây hứng thú trong học tập,
làm cho “Học” là quá trình kiến tạo; là niềm say mê để từ đó học sinh biết khai thác
và xử lý thông tin, tự hình thành hiểu biết, năng lực và phẩm chất.

1.3. Đối tượng, phạm vi và kế hoạch nghiên cứu
- Đối tượng nghiên cứu là học sinh trung học cơ sở.
- Phạm vi và kế hoạch nghiên cứu:
Khối 8, 9 (Lớp 8A1, 9A1) - Trường THCS Thạnh Phú 1
1.4. Kết quả cần đạt được
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; tạo thói quen
làm việc độc lập; bồi dưỡng cho học sinh phương pháp tự học, khả năng hợp tác; rèn
luyện kĩ năng lập trình và kỹ năng vận dụng kiến thức vào việc giải quyết các bài
toán thường gặp trong thực tiễn; tác động đến tình cảm, đem lại niềm vui, hứng thú
và trách nhiệm học tập cho học sinh.

4


2. NỘI DUNG, BIỆN PHÁP THỰC HIỆN
2.1. Cơ sở lý luận
2.1.1 Một số khái niệm
- Lập trình: Là sử dụng cấu trúc dữ liệu và các câu lệnh của ngôn ngữ lập trình cụ
thể để mô tả dữ liệu và diễn đạt các thao tác của thuật toán.
- Ngôn ngữ lập trình: Là ngôn ngữ để viết chương trình.
- Chương trình: Là cách mô tả thuật toán bằng một ngôn ngữ mà máy tính có thể
hiểu và thực hiện được.
- Thuật toán: Là 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 đó từ Input ta thu được Output của bài toán.
- Chương trình con: Là một dãy lệnh mô tả một số thao tác nhất định và có thể
được thực hiện (được gọi) từ nhiều vị trí khác nhau trong chương trình.
2.1.2 Lợi ích của việc sử dụng chương trình con
- Tránh việc phải viết lặp đi, lặp lại cùng một dãy lệnh nào đó trong một chương
trình.
- Hỗ trợ việc thực hiện viết các chương trình lớn.

- Phục vụ cho quá trình trừu tượng hoá.
- Mở rộng khả năng ngôn ngữ.
- Thuận tiện cho việc phát triển và khả năng nâng cấp chương trình.
2.1.3 Phân loại chương trình con
- Chương trình con có 2 loại cơ bản: Chương trình con hàm
Chương trình con thủ tục
+ Hàm (Function): Là một chương trình con thực hiện một số thao tác nào đó và
trả về giá trị qua tên hàm.
+ Thủ tục (Procedure): Là một chương trình con thực hiện các thao tác nhất định
nhưng không trả về giá trị nào qua tên của nó.
2.1.4 Cấu trúc chương trình con
- Cấu trúc chung:
<Phần đầu>
[<Phần khai báo>]
Begin
[<Các lệnh>]; {Phần thân chương trình con}
End;
- Cấu trúc của Hàm:
Function Tên_hàm ([khai báo các tham số, nếu cần]): kiểu DL;
[<Phần khai báo của hàm>] { Label, Const, Type, Var, ... }
5


Begin
<Các lệnh>; {Phần thân hàm}
End;
- Cấu trúc của thủ tục:
Procedure Tên_thủ tục ([khai báo các tham số, nếu cần]);
[Begin

<Các lệnh>; {Phần thân thủ tục}
End;
2.1.5 Sử dụng chương trình con
- Cách gọi chương trình con:
Tên chương trình con (cùng với tham số, nếu có);
- Các tham số được sử dụng trong chương trình con
+ Tham số hình thức: được viết trong phần khai báo tên chương trình con.
+ Tham số thực sự: được viết trong lời gọi chương trình con.
+ Tham biến: Là tham số hình thức viết sau Var. Khi đó tham số thực sự của nó
phải là biến, không được là giá trị. Tham số thực sự có thể bị thay đổi trong chương
trình con và sau khi ra khỏi chương trình con nó vẫn giữ nguyên giá trị thay đổi đó.
+ Tham trị: Là tham số hình thức không có Var. Khi đó tham số thực sự của nó
có thể là giá trị, biến hoặc biểu thức. Tham số thực sự có thể bị thay đổi trong chương
trình con, nhưng sau khi ra khỏi chương trình con nó lại mang giá trị ban đầu.

2.2. Thực trạng của vấn đề:
Với những chương trình lớn thường rất dài, nhìn chung là khó đọc, khó kiểm
soát lỗi nhất là đối với học sinh và đặc biệt là không có cách nào khẳng định được
tính đúng đắn của một chương trình, ngoài việc kiểm tra chương trình ấy thông qua
một số lần chạy thử với những dữ liệu vào khác nhau, nếu thấy kết quả những lần
chạy thử đó là đúng thì khẳng định là chương trình đúng. Để giúp cho học sinh say
mê với môn học, giảm bớt thời gian và công sức khi lập trình; rèn luyện khả năng
làm việc độc lập, tích cực, chủ động, sáng tạo, có tinh thần hợp tác khi làm việc theo
nhóm, biết vận dụng những kiến thức đã học để giải quyết một số bài toán thường
gặp trong thực tiễn, từ đó nảy sinh vấn đề là phải hướng dẫn cho học sinh cách viết
và sử dụng chương trình con trong lập trình Pascal làm cho chương trình sáng sủa, dễ
đọc, dễ hiểu, dễ kiểm tra và điều quan trọng là có thể chứng minh được tính đúng đắn
của một chương trình.

6



2.3. Một số biện pháp thực hiện:
2.3.1. Rèn luyện các bước giải bài toán:
* Các nguyên lý cơ bản dạy học lập trình:
- Bài toán →

ngôn ngữ lập trình →

Chương trình máy tính.

- Chương trình = dữ liệu + thuật toán (cách giải quyết bài toán)
- Áp dụng mô hình giải bài toán trên máy tính như sau:
Xác định bài toán → phân tích → thiết kế → cài đặt → kiểm thử
2.3.1.1 Xác định bài toán: Làm rỏ yêu cầu của bài toán, xác định đầu vào
(input) và đầu ra (output), cũng như các ràng buộc toàn vẹn (nếu có).
2.3.1.2 Phân tích bài toán: Dựa trên hai thành phần:
- Thành phần dữ liệu: Phân tích các thành phần dữ liệu vào/ra, trung
gian của bài toán – loại dữ liệu tương ứng.
- Thành phần xử lí: Phân tích cách xử lí bài toán bằng công cụ toán học
hoặc bằng cách xử lí thông thường của nghiệp vụ, trình bày dưới dạng ý tưởng giải
quyết.
2.3.1.3 Thiết kế chương trình: Dựa trên hai đơn vị:
- Đơn vị dữ liệu: Thiết kế các thành phần dữ liệu bao gồm tên biến, kiểu
dữ liệu, định nghĩa kiểu dữ liệu (nếu có).
- Đơn vị xử lí: Bao gồm:
+ Sơ đồ thủ tục hoặc hàm.
+ Mô tả thủ tục hoặc hàm.
+ Thuật giải tổng quát hoặc chi tiết.
2.3.1.4 Cài đặt: Sử dụng ngôn ngữ lập trình cụ thể để cài đặt. Nêu những

điểm cần lưu ý, điểm thường dẫn đến sai sót, điểm khó mà người học có thể vướng
mắc.
2.3.1.5 Kiểm thử: Xây dựng bộ dữ liệu kiểm thử, giáo viên đề xuất từ 5 – 10
bộ dữ liệu để kiểm thử chương trình.
2.3.2. Rèn luyện kĩ năng các bước cho học sinh:
2.3.2.1 Rèn luyện kĩ năng xác định bài toán:
Để viết được một chương trình chính xác thì bước phân tích đề là rất quan
trọng, bước này không thể bỏ qua và nếu bước này làm không kĩ thì có thể sai cả bài
toán.
Ví dụ: Viết chương trình tìm các số nguyên tố có trong dãy số nguyên dương
gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím số nguyên dương N (N<=1000) là số lượng các số
tự nhiên sẽ nhập vào, dòng tiếp theo ghi N số nguyên dương.
Kết quả ra: Xuất ra màn hình gồm các số là số nguyên tố trong dãy.
7


Ví dụ: - Nhap vao so luong so nguyen duong: 5
A[1] = 1
A[2] = 2
A[3] = 9
A[4] = 4
- Xuất: Cac so nguyen to la:
2
3

A[5] = 3

 Xác định bài toán: Bài toán đã được làm rõ? Cần phát biểu lại như thế nào?
- Input: N là một số nguyên dương (0

nguyên dương.
- Output: Xuất ra màn hình các số là số nguyên tố có trong N số nguyên dương
vừa nhập.
 Ý tưởng: Một số nguyên dương N là số nguyên tố nếu nó chỉ có đúng hai ước
là 1 và N.
- Nếu N = 1 thì N không là số nguyên tố.
- Nếu 1< N < 4 thì N là số nguyên tố.
- Nếu N>=4 và không có ước số trong phạm vi từ 2 đến phần nguyên căn bậc 2
của N thì N là nguyên tố.
Vì đây là bài toán người dùng sẽ nhập số lượng số nguyên theo ý mình, mà bài
toán đặt ra là phải giải quyết tìm trong các số mà người dùng vừa nhập là số nguyên
tố thì xuất ra, vì thế ta sử dụng ý tưởng này viết một hàm kiểm tra là số nguyên tố
(Function ktnt(k : integer) : integer;) lần lượt từng số trong N số nguyên dương vừa
nhập nếu là số nguyên tố thì xuất ra màn hình.
2.3.2.2 Rèn luyện kĩ năng phân tích bài toán:
Ví dụ: Viết chương trình tìm các số nguyên tố có trong dãy số nguyên dương
gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím số nguyên dương N (N<1000) là số lượng các số
tự nhiên sẽ nhập vào, dòng tiếp theo ghi N số nguyên dương.
Kết quả ra: Xuất ra màn hình gồm các số là số nguyên tố trong dãy.
Ví dụ: - Nhap vao so luong so nguyen duong: 5
A[1] = 1
A[2] = 2
A[3] = 9
A[4] = 4
A[5] = 3
- Xuất: Cac so nguyen to la:
2
3
- Thành phần dữ liệu:

+ N số lượng số nguyên (0 < N < 1000)
+ Dãy (Mảng) số nguyên.
- Thành phần xử lí:
Kiểm tra lần lượt từng số nguyên dương trong dãy (mảng) số nguyên,
nếu là số nguyên tố thì xuất số đó ra màn hình.
2.3.2.3 Rèn luyện kĩ năng thiết kế chương trình:
8


Ví dụ: Viết chương trình tìm các số nguyên tố có trong dãy số nguyên dương
gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím số nguyên dương N (N<=1000) là số lượng các số
tự nhiên sẽ nhập vào, dòng tiếp theo ghi N số nguyên dương.
Kết quả ra: Xuất ra màn hình gồm các số là số nguyên tố trong dãy.
Ví dụ: - Nhap vao so luong so nguyen duong: 5
A[1] = 1
A[2] = 2
A[3] = 9
A[4] = 4
A[5] = 3
- Xuất: Cac so nguyen to la:
2

3

- Đơn vị dữ liệu:
N: integer;
A:array[1..100] of integer;
i: integer;
- Đơn vị xử lí:

+ Sơ đồ thủ tục:
+ Sơ đồ hàm:

NHAPMANG
KTNT

+ Mô tả thủ tục hoặc hàm:

Program KT_SNT;

+ Thuật giải chi tiết:
Bước 1: Nhập số nguyên dương N;
Bước 2: Nếu N = 1 thì thông báo “N không là số nguyên tố”, kết thúc;
Bước 3: Nếu N < 4 thì thông báo “N là số nguyên tố”, kết thúc;
Bước 4: i

← 2;

Bước 5: Nếu i là ước của N thì đến Bước 7
Bước 6: i ← i + 1

rồi quay lại Bước 5;

Bước 7: Nếu i = N thì thông báo “N là số nguyên tố”,
Ngược lại thì thông báo “N không là số nguyên tố”, kết thúc;
+ Sơ đồ khối.

9



2.3.2.4 Rèn luyện kĩ năng cài đặt chương trình:
Nếu việc phân tích và đưa ra thuật toán khó bao nhiêu thì việc viết chương
trình hay cài đặt lại càng phải chính xác và khó khăn hơn. Phải viết đúng câu lệnh, cú
pháp và có khả năng tư duy tốt thì chương trình mới thi hành được. Chính vì vậy, với
tư cách là giáo viên bồi dưỡng học sinh giỏi tôi đã rèn cho học sinh cách viết từng
câu lệnh một, từ cách khai báo đến câu lệnh nhập, câu lệnh khai báo,…
Ví dụ 1: Viết chương trình tìm các số nguyên tố có trong dãy số nguyên dương
gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím số nguyên dương N (N<=1000) là số lượng các số
tự nhiên sẽ nhập vào, dòng tiếp theo ghi N số nguyên dương.
Kết quả ra: Xuất ra màn hình gồm các số là số nguyên tố trong dãy.
Ví dụ: - Nhap vao so luong so nguyen duong: 5
A[1] = 1
A[2] = 2
A[3] = 9
A[4] = 4
A[5] = 3
- Xuất: Cac so nguyen to la:
2
3
Program KT_SNT;
Var

N:integer;
A:array[1..100] of integer;
i:integer;

Procedure NHAPMANG; {Chuong trinh con nhap so}
Begin
Write(‘Nhap vao so luong so nguyen duong: ‘);Readln(N);

10


For i:=1 to N do
Begin
Write(‘Nhap so thu A[‘,i,’]: ‘);readln(A[i]);
End;
end;
Function KTNT(k:integer):integer;
Var j:integer;
Begin
KTNT:=false;
If k<2 then exit;
For j:=2 to k div 2 do
If k mod j = 0 then exit;
KTNT:= true;
End;
Begin {Chuong trinh chinh}
NHAPMANG;
Writeln(’Cac so nguyen to la:’);
For i:=1 to N do
If KTNT(A[i]) then write(A[i],’ ’);
Readln;
End.
Ví dụ 2: SỐ MERSEN
Số N nguyên tố được gọi là số Mersen nếu có dạng 2 p-1 trong đó p cũng là số
nguyên tố
Viết chương trình nhập vào số nguyên dương N (N<10000) in ra tất cả các số
Mersen nhỏ hơn hay bằng N.
VD: Nhập N = 10000

Xuất: 3 7
31 127
8191
* Nhận xét: Bài toán này yêu cầu in ra tất cả các số là số Mersen, theo định nghĩa thì
số N nguyên tố được gọi là số Mersen nếu có dạng 2 p-1 trong đó p cũng là số nguyên
tố.
- Để giải quyết bài toán này theo yêu cầu ta phải kiểm tra xem số p có phải là
số nguyên tố không? Nếu thỏa mãn là số nguyên tố thì ta xét tiếp 2 p-1 có phải là số
11


nguyên tố không? Nếu thỏa mãn thì in ra màn hình rồi xét số kết kiếp. Vậy sử dụng
chương trình con kiểm tra nguyên tố là phù hợp nhất vì ta phải xét là số nguyên tố
nhiều lần.
- Sử dụng chương trình con ở đây tránh việc phải viết lặp đi, lặp lại viết nhiều
câu lệnh kiểm tra là số nguyên tố nhiều lần. Giảm bớt thời gian và công sức khi lập
trình.
- Sử dụng chương trình con trong lập trình Pascal làm cho chương trình sáng
sủa, dễ đọc, dễ hiểu, dễ kiểm tra và điều quan trọng là có thể chứng minh được tính
đúng đắn của một chương trình.
Program So_Mersen;
Var n:integer;
Function ktnt(k:integer):boolean;
Var j:integer;
Begin
Ktnt:=false;
If k<2 then exit;
For j:=2 to k div 2 do
If k mod j = 0 then exit;
Ktnt:=true;

End;
Function luythua(k:integer):integer;
Var lt, j:integer;
Begin
Lt:=1;
For j:=1 to k do
Lt:=lt*2;
Luythua:=lt;
End;
Procedure tim_so_mersen;
Var k,p:integer;
Begin
For p:=2 to n do
Begin
If ktnt(p) then
Begin
K:=luythua(p)-1;
If ktnt(k) then
if kEnd;
End;
End;
12


BEGIN {CHUONG TRINH CHINH}
repeat
Write('Nhap vao so n: ');readln(n);
If (n<=0) or (n>10000) then writeln('Nhap lai !');
Until (n>0) and (n<=10000);

Tim_so_mersen;
READLN;
END.
2.3.2.5 Rèn luyện kĩ năng kiểm thử chương trình:
Xây dựng bộ dữ liệu kiểm thử. Ngoài những ví dụ đề bài cho thì người lập
trình hay cài đặt phải đề xuất từ 5 đến 10 bộ dữ liệu để kiểm thử chương trình xem
coi đúng như yêu cầu bài toán không? Hay các bước cho ra kết quả đúng như yêu cầu
của thuật toán không?
Ví dụ: Viết chương trình tìm các số nguyên tố có trong dãy số nguyên dương
gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím số nguyên dương N (N<=1000) là số lượng các số
tự nhiên sẽ nhập vào, dòng tiếp theo ghi N số nguyên dương.
Kết quả ra: Xuất ra màn hình gồm các số là số nguyên tố trong dãy.
Ví dụ: - Nhap vao so luong so nguyen duong: 5
A[1] = 1
A[2] = 2
A[3] = 9
A[4] = 4
A[5] = 3
- Xuất: Cac so nguyen to la:
2
Lần
1

2
3
4
5

3

Nhập

Kết quả xuất ra màn hình

N = 5, Các số nhập lần lượt là:
1

2

9

4

3

N = 5, Các số nhập lần lượt là:
7

8

5

11

9

2

7


N = 5, Các số nhập lần lượt là:
1
2
3
4
5
N = 5, Các số nhập lần lượt là:
3

5

7

11

13

3

5

2
3

9

3
5

5

7

11

13

N = 5, Các số nhập lần lượt là:
2
4
6
8
10
13


2.3.3. Một số bài toán cụ thể
a

c

m

p

- VD1: Viết chương trình tính: S = b + d + n + q
- VD2: Viết chương trình:
+ Sắp xếp dãy a = {a1, a2, a3, ..., an} tăng dần

+ Sắp xếp dãy a tăng dần sao cho số chẵn đứng trước, số lẻ đứng sau
+ Sắp xếp dãy a tăng dần sao cho chẵn lẻ xen kẽ

2.3.3.1 Chương trình VD1
- Chương trình không sử dụng chương trình con
Program congPS;
var a,b,c,d,m,n,p,q:integer;
tu,mau,t1,m1,uc:integer;
S:real;
Begin
writeln('Nhap phan so a/b');
repeat
write('Nhap tu so a = ');readln(a);
write('Nhap mau so b = ');readln(b);
if b=0 then writeln('Nhap lai phan so');
until (b<>0);
writeln('Nhap phan so c/d');
repeat
write('Nhap tu so c = ');readln(c);
write('Nhap mau so d = ');readln(d);
if d=0 then writeln('Nhap lai phan so');
until (d<>0);
writeln('Nhap phan so m/n');
repeat
write('Nhap tu so m = ');readln(m);
write('Nhap mau so n = ');readln(n);
if n=0 then writeln('Nhap lai phan so');
until (n<>0);
writeln('Nhap phan so p/q');
repeat
write('Nhap tu so p = ');readln(p);
write('Nhap mau so q = ');readln(q);
if q=0 then writeln('Nhap lai phan so');

until (q<>0);
tu:=(a*d*n*q+c*b*n*q+m*b*d*q+p*b*d*n);
14


mau:=(b*d*n*q);
t1:=tu;
m1:=mau;
while t1<>m1 do
if t1>m1 then t1:=t1-m1
else m1:=m1-t1;
uc:=m1;
tu:=tu div uc;
mau:=mau div uc;
writeln('S = ',tu,'/',mau);
readln;
End.
* Nhận xét:
Chương trình thường rất dài, nhìn chung là khó đọc, khó kiểm soát lỗi nhất là
đối với học sinh và đặc biệt là không có cách nào khẳng định được tính đúng đắn của
một chương trình, ngoài việc kiểm tra chương trình ấy thông qua một số lần chạy thử
với những dữ liệu vào khác nhau, nếu thấy kết quả những lần chạy thử đó là đúng thì
khẳng định là chương trình đúng.
- Viết chương trình sử dụng chương trình con
Program congPS;
Var a,b,c,d,m,n,p,q:integer;
tu,mau:integer;
S:real;
Procedure Nhap_PS(var t,m:integer);
Begin

repeat
write('Nhap tu so: ');readln(t);
write('Nhap mau so: ');readln(m);
if m=0 then writeln('Nhap lai phan so');
until (m<>0);
End;
Function UCLN(x,y:integer):integer;
Begin
while x<>y do
if x>y then x:=x-y
else y:=y-x;
UCLN:=y;
end;
Procedure Toi_gian_PS(Var t,m:integer);
Var k: integer;
Begin
15


k:=UCLN(t,m);
t:=t div k;
m:=m div k;
writeln(t,'/',m);
end;
Begin {Chuong trinh chinh}
writeln('Nhap phan so a/b');
Nhap_PS(a,b);
writeln('Nhap phan so c/d');
Nhap_PS(c,d);
writeln('Nhap phan so m/n');

Nhap_PS(m,n);
writeln('Nhap phan so p/q');
Nhap_PS(p,q);
tu:=(a*d*n*q+c*b*n*q+m*b*d*q+p*b*d*n);
mau:=(b*d*n*q);
write('S = ');
Toi_gian_PS(tu,mau);
readln;
End.
* Nhận xét:
- Tránh việc phải viết lặp đi, lặp lại cùng một dãy lệnh nào đó trong một chương
trình đó là lệnh nhập phân số.
- Hỗ trợ việc thực hiện viết các chương trình lớn.
- Phục vụ cho quá trình trừu tượng hoá.
- Mở rộng khả năng ngôn ngữ.
- Giảm bớt thời gian và công sức khi lập trình; rèn luyện khả năng làm việc độc
lập, tích cực, chủ động, sáng tạo, có tinh thần hợp tác khi làm việc theo nhóm.
- Sử dụng chương trình con trong lập trình Pascal làm cho chương trình sáng sủa,
dễ đọc, dễ hiểu, dễ kiểm tra và điều quan trọng là có thể chứng minh được tính đúng
đắn của một chương trình.
- Biết vận dụng những kiến thức đã học để giải quyết một số bài toán thường gặp
trong thực tiễn.
2.3.3.2 Chương trình VD2 (Làm việc theo nhóm)
- Chia nhỏ bài toán rồi giao cho các thành viên trong nhóm
+ Nhóm trưởng: Tổng hợp và viết chương trình chính
+ Thành viên 1: Viết chương trình con sắp xếp dãy a tăng dần
+ Thành viên 2: Tách mảng a thành 2 mảng chẵn và mảng lẻ
+ Thành viên 3: Sắp xếp dãy a chẵn trước, lẻ sau
+ Thành viên 4: Sắp xếp dãy a tăng dần sao cho chẵn, lẻ xen kẽ
16



- Các thành viên làm việc độc lập rồi gửi chương trình cho nhóm trưởng tích hợp
Program BT_Sapxep;
Type mang = array[1..100] of integer;
Var a,b,c:mang;
n,i,j,tg,nb,nc:integer;
Procedure Nhap_mang;
Begin
write('Nhap so phan tu cua mang: ');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
end;
Procedure In_mang(Var m:mang);
begin
for i:=1 to n do
write(m[i],' ');
writeln;
end;
Procedure SX(Var m:mang);
begin
for i:=1 to n-1 do
for j:=n downto i+1 do
if a[j]begin
tg:=a[j];
a[j]:=a[j-1];
a[j-1]:=tg;

end;
end;
Procedure CL(Var m:mang);
Begin
nb:=0;
nc:=0;
for i:=1 to n do
begin
if m[i] mod 2=0 then
begin
inc(nb);
b[nb]:=m[i];
end
else
begin
inc(nc);
17


c[nc]:=m[i];
end;
end;
end;
Procedure SX_CL;
begin
for i:=1 to nb do
write(b[i],' ');
for i:=1 to nc do
write(c[i],' ');
writeln;

end;
Procedure CL_xenke;
begin
if ncbegin
for i:=1 to nc do
write(b[i],' ',c[i],' ');
for i:=nc+1 to nb do
write(b[i],' ');
end
else
begin
for i:=1 to nb do
write(b[i],' ',c[i],' ');
for i:=nb+1 to nc do
write(c[i],' ');
end;
end;
Begin
Nhap_mang;
writeln;
write(' In mang a: ');
In_mang(a); writeln;
write(' Mang a duoc sap xep tang dan: ');
SX(a);
In_mang(a);writeln;
CL(a);
write(' Sap xep mang a chan truoc le sau: ');
SX_CL;
writeln;

write(' Sap xep chan le xen ke: ');
CL_xenke;
readln;
End.
18


2.3.4. Kết quả thực hiện
- Sau thời gian khảo sát ở 2 lớp 8A1 và 9A1 tôi nhận thấy các em sử dụng
được chương trình con với thái độ rất hứng thú viết một lần hoàn chỉnh thì có thể
trong bài cứ sử dụng lặp đi lặp lại nhiều lần vẫn cho kết quả đúng và tiết kiệm thời
gian thực hiện bài toán, dể quản lý và sửa chữa khi cần thiết và kết quả thu được ở
các mức độ như sau:
Lớp

Lớp 8A1

Lớp 9A1

Nhận biết

100%

100%

Thông hiểu

87%

92%


Vận dụng

75%

81%

Kỹ năng lập trình

60%

68%

Mức độ

- Trong công tác bồi dưỡng học sinh giỏi, tôi nhận thấy rằng: Người thầy cần
không ngừng học hỏi và tự học hỏi để nâng cao trình độ chuyên môn, nghiệp vụ và
đúc kết, rút kinh nghiệm, thường xuyên xây dựng, bổ sung chương trình và sáng tạo
trong phương pháp giảng dạy.
Qua những năm đảm nhiệm bồi dưỡng học sinh giỏi ở trường nhờ áp dụng
những kinh nghiệm trên ở năm học 2013 – 2014 đã thu được kết quả rất khả quan.

Số học sinh đạt cấp Huyện

Năm học 2012-2013

Năm học 2013-2014

04


02
Đạt 01 học sinh với 02 giải:

Số học sinh đạt cấp TP

Dự thi 02 học sinh

+ Khuyến khích Tin học trẻ.
+ Giả Nhất Học sinh giỏi Tin
học cấp Thành phố lớp 9.

3. KẾT LUẬN

19


Qua việc hướng dẫn cho học sinh sử dụng chương trình con trong lập trình Turbo
Pascal ở 2 lớp 8A1 và 9A1 tôi thấy các em đã biết cách làm việc theo nhóm có hiệu
quả, rèn luyện cho các em tinh thần tự giác, phát huy tính tích cực, chủ động sáng tạo,
có tinh thần đoàn kết, hợp tác trong công việc. Đặc biệt là rèn luyện kỹ năng lập
trình, các em biết xử lý bài toán, biết viết và sử dụng chương trình con trong chương
trình để tiết kiệm được thời gian, công sức lập trình, chương trình trở nên ngắn gọn,
dễ hiểu, dễ nâng cấp và dễ hiệu chỉnh.
Trên cơ sở nghiên cứu đó tôi nhận thấy: Mục tiêu bồi dưỡng học sinh môn lập
trình không phải là để tạo ra các nhà lập trình chuyên nghiệp, mà mục tiêu chính của
công tác này là: bồi dưỡng khả năng tư duy, sáng tạo và lập luận, phân tích, thiết kế
của học sinh. Giáo viên bồi dưỡng học sinh giỏi nắm khá chắc nội dung chương trình
và kiến thức về ngôn ngữ lập trình, biết vận dụng đổi mới phương pháp dạy học: lấy
học sinh làm trung tâm, biết tôn trọng sự sáng tạo của học sinh. Trong quá trình giảng
dạy biết sử dụng nhiều câu hỏi gợi mở để hướng học sinh phân tích, tìm ra được thuật

toán.
Trên đây là một số kinh nghiệm của tôi, bản thân tôi đã áp dụng và thu được kết
quả rất khả quan. Tuy nhiên, chắc hẳn vẫn chưa phải là tối ưu, xin đưa ra để đồng
nghiệp tham khảo, vận dụng và góp thêm ý kiến để đề tài này được áp dụng rộng rãi
Xin chân thành cảm ơn !

Thạnh phú, ngày 17 tháng 3 năm 2015
DUYỆT CỦA BGH

Người viết

Nguyễn Văn Hai

20



×