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

skkn hướng tiếp cận mới trong dạy bài chương trình con và phân loại môn tin học 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 (190.52 KB, 30 trang )

MỤC LỤC
LỜI CẢM ƠN...........................................................................................................2
A. ĐẶT VẤN ĐỀ.....................................................................................................3
1. Lý do chọn đề tài:.................................................................................................3
2. Mục đích nghiên cứu............................................................................................4
3. Nhiệm vụ nghiên cứu...........................................................................................5
4. Phạm vi đề tài:......................................................................................................5
5. Phương pháp nghiên cứu:.....................................................................................5
3.1. Một số khái niệm...............................................................................................8
3.1.1. Chương trình con............................................................................................8
3.1.2. Các loại biến...................................................................................................9
3.1.3. Lời gọi chương trình con................................................................................9
a. Thủ tục (Procedure)..........................................................................................9
b. Hàm (Function)..............................................................................................12
3.1.4.Truyền tham số cho chương trình con...........................................................14
3.2. Hiệu quả của chương trình con........................................................................16
3.2.1. Lợi ích của chương trình con mang lại.........................................................16
3.2.2. Một số bài tập ứng dụng...............................................................................17
c. KẾT LUẬN VÀ KIẾN NGHỊ............................................................................27
TÀI LIỆU THAM KHẢO......................................................................................28
PHỤ LỤC...............................................................................................................29


Sáng kiến kinh nghiệm – Bộ môn Tin học

LỜI CẢM ƠN

Lời đầu tiên tôi xin gửi lời cảm ơn đến Ban Giám hiệu nhà trường cũng như
quý thầy cô giáo trong trường đã tạo điều kiện, hỗ trợ, giúp đỡ tôi trong quá trình
thực hiện và nghiên cứu đề tài này.
Tôi xin chân thành cảm ơn công lao to lớn của quý thầy cô trong tổ Tin học


– Giáo vụ, quý thầy cô là người luôn đồng hành cùng tôi và giúp tôi đạt được
những kết quả tốt. Quý thầy cô đã hỗ trợ tôi cả khi thành công và thất bại. Thầy cô
luôn gần gũi, đông viên tôi tập trung cao độ làm việc nghiêm túc và không được
nản chí trước mọi hoàn cảnh. Nếu không có sự giúp đỡ ấy của quý thầy cô thì tôi
nghĩ sáng kiến kinh nghiệm này không thể hoàn thành.
Cảm ơn các em học sinh đã luôn đồng hành cùng tôi trong quá trình thực
hiện đề tài, quá trình viết đề tài sáng kiến kinh nghiệm rất vất vả, mất nhiều thời
gian và đòi hỏi phải có sự cộng tác đắc lực của các em. Tuy nhiên bên cạnh tôi
luôn có các em và quý thầy cô là các đồng nghiệp, tôi luôn nhận được sự cộng tác
của các em, sự giúp đỡ và khuyến khích từ đồng nghiệp. Với tất cả sự động viên và
giúp đỡ đó tôi xin trân trọng cảm ơn.
Với tâm tình tri ân và biết ơn sâu sắc đến Ban Giám hiệu nhà trường, quý
thầy cô trong Hội đồng nhà trường và các em học sinh. Tôi xin gửi lời chúc sức
khỏe, hạnh phúc và thành công trong cuộc sống.
Gia nghĩa, ngày 10 tháng 03 năm 2017
Người thực hiện đề tài

Nguyễn Đình Khương

Giáo viên: Nguyễn Đình Khương

Trang 2


Sáng kiến kinh nghiệm – Bộ môn Tin học

A. ĐẶT VẤN ĐỀ
1. Lý do chọn đề tài:
Trong thực tế hiện nay, để tổ chức lớp nhà trường thường phân bố học sinh
trong lớp dựa trên lượng kiến thức thực tế các môn nằm trong chương trình thi Tốt

nghiệp THPT Quốc gia và Đại học, mặt khác môn Tin học lại đòi hỏi học sinh cần
phải có điều kiện thực hành nhiều nên ngoài kiến thức lĩnh hội được trên lớp còn
phụ thuộc vào điều kiện kinh tế của từng phụ huynh học sinh tự học ở nhà. Vì vậy
trong khi dạy môn Tin học cho học sinh trong một lớp có sự phân hóa giữa hai đối
tượng rất rõ: “đối tượng thứ nhất các em có điều kiện thực hành ở nhà tốt thì khi
học Ngôn ngữ lập trình các em tiếp thu tốt, nhưng khả năng tư duy toán học thì hạn
chế, đối tượng khác thì khả năng tư duy Toán học tốt nhưng khả năng vận dụng
Ngôn ngữ lập trình chưa được tốt”. Ví thế làm cho giáo viên Tin học khi đứng lớp
để dạy môn Tin học 11 về lập trình thường gặp rất khó để đưa phương pháp phù
hợp cho các đối tượng này trong một tiết dạy.
Mặt khác vấn đề dạy học có vận dụng phương pháp tích hợp đang được Bộ
Giáo dục và Đào tạo, các Sở Giáo dục và Đào tạo đang được triển khai và mở rông
trên mọi phương diện, được vận dụng cho các bộ môn trong thực tiễn không chỉ
dành riêng cho bộ môn Tin học.
Vậy vấn đề đặt ra là làm sao chúng ta vận dụng được kiến thức Toán học mà
các em đã được học để vận dụng ngôn ngữ lập trình giải nhằm cúng cố kiến thức
toán học hoặc mở rộng kiến thức toán học trong thực tiến, qua đó có thể nhằm giúp
cho việc đáp ứng được vấn đề thiết yếu ở chỗ, các em tư duy toán tốt có thể phát
huy được thế mạnh về giải thuật, còn các em có khả năng về Ngôn ngữ lập trình có
thể phát huy được sở trường của mình nhằm giúp cho Giáo viên có một hướng tiếp
cận mới để truyền đạt kiến thức cho hai đối tượng trên thật hiệu quả trong việc
giảng dạy môn Tin học THPT cụ thể Tin học 11, phần “Chương trình con và phân
loại”, thay vì dạy đi dạy lại những bài toán quen thuộc đã được tiếp cận ở các tiết
học hoặc lớp học trước đó thuận lợi cho những học sinh có khả năng về ngôn ngữ
lập trình mà làm chênh lệch kiến thức giữa hai đối tượng trên.
Giáo viên: Nguyễn Đình Khương

Trang 3



Sáng kiến kinh nghiệm – Bộ môn Tin học

Trong thiết kế thuật giải thì chương trình con là một cách cài đặt khả quen
thuộc dược sử dụng để giải khá nhiều bài toán. Với mục đích tổ chức chương trình
dưới dạng chương trình con tránh được những đoạn chương trình hay phép tính lặp
lại nhiều lần. Tư tưởng tổ chức chương trình dưới dạng chương trình con đã được
viết ở nhiều tài kiệu khác nhau, trong đề tài này tôi tập trung đưa ra một số dạng
bài tập từ phổ biến từ dễ đến khó có thể áp dụng phương pháp này và phân tích
tính hiệu quả của nó đối với từng bài toán, từng đối tượng.
Vì thế tôi chọn đề tài: “Hướng tiếp cận mới trong dạy bài Chương trình
con và phân loại môn Tin học 11 trường THPT chuyên Nguyễn Chí Thanh”.
2. Mục đích nghiên cứu
Trong phạm vi đề tài của mình tôi muốn chia sẻ một số phương pháp tuy
không phải mới về mặt lý thuyết nhưng là các phương pháp khá hiệu quả trong
việc giải các bài toán tin học giúp hình thành kỹ năng giải bài toán tin học và rèn
luyện tư duy thuật toán từ đó rèn luyện tư duy lập trình mà đối tượng là các lớp
chọn hoặc các lớp phân ban Khoa học tự nhiên. Đây là cơ hội tốt làm quen với
phương pháp lập trình tuy chỉ trong phạm vi hẹp nhưng tôi hy vọng cùng với nổ
lực của bản thân và sự giúp đỡ của đồng nghiệp sẽ có những đề tài sáng kiến kinh
nghiệm tốt, lý thú và hiệu quả cho công tác giảng dạy các lớp chọn hoặc các lớp
thuộc Ban Khoa học tự nhiên.
Một module chỉ cần viết một lần và sau đó có thể truy xuất nó nhiều lần, bất
kỳ nơi nào trong chương trình chính. Khi cần thiết, ta chỉ việc gọi tên chương trình
con đó ra để thi hành lệnh. Học sinh hiểu được việc sử dụng chương trình con,
chương trình có thể tiết kiệm được ô nhớ. Đồng thời, có thể kiểm tra tính logic
trong tiến trình lập trình cho máy tính điện tử, có thể nhanh chóng loại bỏ những
sai sót khi cần hiệu chỉnh hay cải tiến chương trình. Đây là khái niệm cơ bản trong
ý tưởng lập trình có cấu trúc. Một quá trình tính cũng có thể có nhiều chương trình
con lồng ghép vào nhau.


Giáo viên: Nguyễn Đình Khương

Trang 4


Sáng kiến kinh nghiệm – Bộ môn Tin học

3. Nhiệm vụ nghiên cứu
Giáo viên chuẩn bị nội dung đề tài và định hướng cho học sinh thực hiện đề
tài trong quá trình giảng dạy học sinh.
Báo cáo thành chuyên đề trong các lần họp tổ chuyên môn để cùng đồng
nghiệp bổ sung những thiếu sót của đề tài.
Học sinh dưới sự hướng dẫn của Giáo viên nghiêm túc thực hiện và có định
hướng phát triển khả năng lập trình của bản thân.
Nội dung nghiên cứu này có nhiều phần, trong phạm vi nghiên cứu của
chương này ta cần làm rõ các vấn đề sau:
- Các kiến thức cơ bản về chương trình con.
- Một số bài tập vận dụng kiến thức đã được trình bày.
Về kỹ năng:
- Vận dụng để viết được một số chương trình con đơn giản để minh họa.
- Cách gọi hàm trong các phép toán và biểu thức.
- Mở rộng khả năng tư duy toán học trong lập trình.
4. Phạm vi đề tài:
Đề tài này được áp dụng đối với học sinh thuộc lớp chọn hoặc các lớp thuộc
Ban khoa học tự nhiên với nhiệm vụ chủ yếu là tổng hợp kiến thức môn học và vận
dụng vào bài tập trong trong toán học vào thực tiến phù hợp với các đối tượng
trong việc giảng dạy nhằm giúp cho học sinh ngày càng yêu thích bộ môn Tin học.
- Đối tượng: Học sinh lớp 11 chuyên Vật lý và 11 chuyên Sinh học.
- Kế hoạch nghiên cứu: Trực tiếp trong các bài dạy
- Phạm vi nghiên cứu: Trong toàn bộ chương 5

5. Phương pháp nghiên cứu:
Để hoàn thành đề tài này, tôi đã tiến hành áp dụng một số phương pháp
nghiên cứu sau:
1. Phương pháp đặt vấn đề - giải quyết vấn đề
2. Phương pháp phân tích tổng hợp.
3. Phương pháp tích hợp, liên môn.
Giáo viên: Nguyễn Đình Khương

Trang 5


Sáng kiến kinh nghiệm – Bộ môn Tin học

4. Phương pháp so sánh đối chiếu.
5. Phương pháp thực nghiệm

Giáo viên: Nguyễn Đình Khương

Trang 6


Sáng kiến kinh nghiệm – Bộ môn Tin học

B. GIẢI QUYẾT VẤN ĐỀ
1. Cơ sở lý luận của vấn đề.
Trong xã hội ngày nay, sự bùng nổ của Internet còn sản sinh ra một lượng
thông tin khổng lồ, sự thâm nhập của công nghệ thông tin đã dần dần trở nên rõ nét
hơn trong các hoạt động của con người, các chương trình được lập ra ngày càng
nhiều để máy tính xứ lý đã giúp con người giải phóng sức lao động trí óc, nâng cao
hiệu quả làm việc, học tập, giảng dạy, giải trí… vì vậy, đòi hỏi con người phải có

những phương pháp, kỹ thuật ngày càng hiệu quả hơn nữa để lập trình cho máy
tính xứ lý, lưu trữ, khai thác lượng thông tin hữu ích ấy. Vậy bên trong những
chương trình ấy là gì? Đó là chính những thuật toán tìm kiếm, sắp xếp, tối ưu
hóa… cùng với những kỹ thuật giải quyết vấn đề mang đặc trưng của Tin học.
Đối với hoạt động giảng dạy bộ môn Tin học cho học sinh, việc đưa ra một
chiến lược thiết kế giải thuật tổng quát giúp giải quyết được hầu hết các bài toán
tối ưu là điều kiện không thể vì mỗi bài toán có những đặc trưng phải được giải
quyết bằng một phương pháp riêng.
Chương trình con là một cách tổ chức chương trình có khoa học giúp cho
người lập trình tránh được sự lặp đi lặp lại của một số câu lệnh, là cách tổ chức phố
biến được sử dụng để giải quyết các bài toán phức tạp trở nên đơn giản hơn. Ưu
điểm của nó là lời giải thường ngắn gon, dễ cài đặt, cái khó của nó là sự đòi hỏi
người học phải biết phân hoạch bài toán lớn thành các bài toán con và tổ chức
chương trình con cho các bài toán con, kết hợp các bài toán con tìm nghiệm cho
bài toán lớn.
2. Thực trạng của vấn đề
Khi dạy môn Tin học cho học sinh trong một lớp có sự phân hóa giữa hai đối
tượng: “đối tượng thứ nhất các em có điều kiện thực hành ở nhà tốt thì khi học
Ngôn ngữ lập trình các em tiếp thu tốt, nhưng khả năng tư duy toán học thì hạn
chế, đối tượng khác thì khả năng tư duy Toán học tốt nhưng khả năng vận dụng
Ngôn ngữ lập trình chưa được tốt”. Ví thế làm cho giáo viên Tin học khi đứng lớp
Giáo viên: Nguyễn Đình Khương

Trang 7


Sáng kiến kinh nghiệm – Bộ môn Tin học

để dạy môn Tin học 11 về lập trình thường gặp rất khó để đưa phương pháp phù
hợp cho các đối tượng này trong một tiết dạy. Vậy ứng dụng kiến thức Toán học

mà các em đã được học để vận dụng ngôn ngữ lập trình giải nhằm cúng cố kiến
thức toán học hoặc mở rộng kiến thức toán học trong thực tiến, qua đó có thể nhằm
giúp cho việc đáp ứng được vấn đề thiết yếu ở chỗ, các em tư duy toán tốt có thể
phát huy được thế mạnh về giải thuật, còn các em có khả năng về Ngôn ngữ lập
trình có thể phát huy được sở trường của mình nhằm giúp cho Giáo viên có một
hướng tiếp cận mới để truyền đạt kiến thức cho hai đối tượng trên thật hiệu quả
trong việc giảng dạy môn Tin học THPT cụ thể Tin học 11
Để tiếp thu tốt các kiến thức của chương trình, người dạy phải biết cách
hướng dẫn học sinh vận dụng thật tốt các kiến thức ấy vào giải quyết những vấn đề
cụ thể, gần gũi trong cuộc sống thường ngày để bài giảng trở nên sinh động, thiết
thực, tránh đi sự khô khan, nhàm chán cho học sinh.
Qua nhiều năm giảng dạy, bồi dưỡng đội tuyển Tin học của nhà trường tôi
đã rút ra được một kinh nghiệm nhằm giúp cho các học sinh hiểu và vận dụng
được phương pháp này để tăng sự hứng thú học tập môn Tin học của học sinh.
3. Các biện pháp đã tiến hành để giải quyết vấn đề.
3.1. Một số khái niệm
3.1.1. Chương trình con
Trong khi lập trình chúng ta thường gặp những đoạn chương trình lặp đi lặp
lại nhiều lần ở những chỗ khác nhau. Để tránh rườm rà những đoạn chương trình
này được thay thế bằng các chương trình con tương ứng. Khi cần, ta chỉ cần gọi tên
chương trình con đó ra.
Lý do thứ hai để xây dựng chương trình con: Một vấn đề lớn và phức tạp sẽ
tương ứng với một chương trình có thể rất lớn và dài. Do đó việc sửa chữa chương
trình sẽ rất khó khăn. Ta có thể phân tích nó thành các vấn đề nhỏ hơn, để dễ kiểm
tra, sau đó ghép lại thành một chương trình lớn.

Giáo viên: Nguyễn Đình Khương

Trang 8



Sáng kiến kinh nghiệm – Bộ môn Tin học

3.1.2. Các loại biến
Biến toàn cục: là biến chung, khai báo ở đầu chương trình, phạm vi sử dụng
trong toàn bộ chương trình. Biến toàn cục sẽ tồn tại trong suốt quá trình thực hiện
chương trình.
Biến cục bộ: là biến riêng, khai báo ở đầu chương trình con, phạm vi sử
dụng bên trong thân chương trình con đó. Biến cục bộ chỉ tồn tại và được cấp phát
bộ nhớ khi chương trình con đang hoạt động, sẽ được giải phóng ngay sau khi
chương trình con kết thúc.
Tham số thực: là một tham số mà nó có thể là một biến toàn cục, một biểu
thức hoặc một giá trị số mà ta dùng chúng khi truyền giá trị cho các tham số hình
thức tương ứng của chương trình con.
Tham số hình thức: là các biến được khai báo ngay sau Tên chương trình
con, nó dùng để nhận giá trị của các tham số thực truyền đến. Tham số hình thức
cũng là một biến cục bộ, ta có thể xem nó như là các đối số của hàm toán học.
3.1.3. Lời gọi chương trình con
Để chương trình con được thi hành, ta phải có lời gọi đến chương trình con,
lời gọi chương trình con thông qua tên chương trình con và danh sách các tham số
tương ứng (nếu có). Các qui tắc của lời gọi chương trình con:
Trong thân chương trình chính hoặc thân chương trình con, ta chỉ có thể gọi
tới các chương trình con trực thuộc nó.
Trong chương trình con, ta có thể gọi các chương trình con ngang cấp đã
được thiết lập trước đó.
a. Thủ tục (Procedure)
Thủ tục là chương trình con, thủ tục được đặt tên để gọi và có thể chứa danh
sách tham số hình thức. Các tham số này phải được đặt trong dấu ngoặc đơn ( ).
Chương trình sẽ tự động truy xuất thủ tục đúng tên đã gọi và thực hiện các lệnh
chứa trong thủ tục đó. Sau khi thực hiện thủ tục xong, chương trình sẽ trở lại ngay

lập tức sau vị trí câu lệnh gọi thủ tục đó.
Có 2 loại thủ tục:
+ Thủ tục không tham số.
+ Thủ tục có tham số.
Cấu trúc của thủ tục không tham số
Giáo viên: Nguyễn Đình Khương

Trang 9


Sáng kiến kinh nghiệm – Bộ môn Tin học

PROCEDURE < Tên thủ tục > ;
{ Các khai báo hằng, biến, kiểu cục bộ... }
BEGIN
{ ... các lệnh trong nội bộ thủ tục ... }
END ;
Ví dụ : Tính khoảng cách giữa 2 điểm A và B khi biết tọa độ 2 điểm A(xA,yA) và
B(xB,yB).
- Dữ liệu vào: nhập 4 số thực xA, yA, xB, yB
- Dữ liệu ra: Khoảng cách AB
Ý tưởng: Phương trình tính khoảng cách: AB =

( xB − x A ) 2 + ( y B − y A ) 2

Program line;
Var xA,xB,yA,yB: real ;
Procedure lineAB;
Var AB:Real;
Begin

AB:=sqrt(sqr(xB-xA)+sqr(yB-yA));
write('khoang cach AB=',AB:8:2);
end ;
BEGIN
Write('Nhap toa do diem A='); Readln(xA,yA) ;
Write('Nhap toa do diem B='); Readln(xB,yB) ;
lineAB;
Readln;
END.

Trong chương trình trên, thủ tục lineAB được khai báo trước khi nó được
truy xuất, các biến xA, xB, yA, yB được gọi nhập vào ở chương trình chính và
biến AB được định nghĩa bên trong thủ tục. Điều này cho ta thấy, không phải lúc
nào cũng cần thiết khai báo biến ngay đầu chương trình chính.
PROCEDURE < Tên thủ tục > (<danh sách tham số hình thức : kiểu biến>);
{ Các khai báo hằng, biến, kiểu cục bộ ... }
BEGIN
{ ... các lệnh trong nội bộ thủ tục ... }
END ;
Giáo viên: Nguyễn Đình Khương

Trang 10


Sáng kiến kinh nghiệm – Bộ môn Tin học

Cấu trúc của thủ tục có tham số: Khi viết một thủ tục, nếu có các tham số cần
thiết, ta phải khai báo nó (kiểu, số lượng, tính chất, ...). Các tham số này gọi là
tham số hình thức.
Một thủ tục có thể có 1 hoặc nhiều tham số hình thức.

- Nếu các tham số hình thức có cùng một kiểu thì ta viết chúng cách nhau
bởi dấu phẩy (,).
- Nếu các kiểu của chúng khác nhau hoặc giữa khai báo tham số truyền bằng
tham biến và truyền bằng tham trị (sẽ học ở phần sau ) thì ta phải viết cách nhau
bằng dấu chấm phẩy (;).
Ví dụ : Tính khoảng cách giữa 3 điểm A, B và C khi biết tọa độ 3 điểm A(xA,yA),
B(xB,yB) và C(xC,yC).
- Dữ liệu vào: nhập 4 số thực xA, yA, xB, yB
- Dữ liệu ra: Khoảng cách AB
Ý tưởng: Phương trình tính khoảng cách:
- AB = ( xB − xA ) 2 + ( yB − y A )2
- AC = ( xC − x A )2 + ( yC − y A ) 2
- BC = ( xC − xB )2 + ( yC − yB ) 2
Program lineABC;
Var xA,yA,xB,yB,xC,yC:real ;
Procedure lines(x,y,u,v:real);
Var line:Real;
Begin
line:=sqrt(sqr(u-x)+sqr(v-y));
write(line:8:2);
writeln;
end ;
BEGIN
Write('nhap toa do diem A'); Readln(xA,yA);
Write('Nhap toa do diem B'); Readln(xB,yB);
Write('Nhap toa do diem C'); Readln(xC,yC);
write('khoang cach AB='); Lines(xA,yA,xB,yB);
write('khoang cach BC='); Lines(xC,yC,xB,yB);

Giáo viên: Nguyễn Đình Khương


Trang 11


Sáng kiến kinh nghiệm – Bộ môn Tin học
write('khoang cach AC='); Lines(xA,yA,xC,yC);
Readln;
END.

Trong chương trình trên x, y, u và v là các tham số hình thức của thủ tục
lines. Khi gọi thủ tục lines(xA,yA,xB,yB) thì tham số thực xA,yA,xB và yB được
truyền tương ứng cho tham số hình thức x, y, u và v.
b. Hàm (Function)
- Hàm là một chương trình con cho ta 1 giá trị kiểu vô hướng.
- Hàm tương tự như thủ tục nhưng trả về một giá trị thông qua tên hàm và
lời gọi hàm tham gia trong biểu thức.
- Cấu trúc một hàm gồm:
FUNCTION <Tên hàm> (<Tham số hình thức : kiểu biến>) :<Kiểu dl trả về>;
{ các khai báo hằng, biến, kiểu cụcbbộ... }
BEGIN
{ ... các khai báo trong nội bộ hàm ... }
END ;
Trong đó:
- Tên hàm là tên tự đặt cần tuân thủ theo nguyên tắc đặt tên trong Pascal.
- Kiểu dl trả về là một kiểu vô hướng, biểu diễn kết quả giá trị của hàm.
- Một hàm có thể có 1 hay nhiều tham số hình thức.
+ Nếu có nhiều tham số hình thức cùng một kiểu giá trị thì ta có thể viết
cách nhau bằng dấu phẩy (,).
+ Nếu các tham số hình thức khác kiểu thì ta viết cách nhau bằng dấu chấm
phẩy (;).

- Trong hàm có thể sử dụng các hằng, kiểu, biến đã được khai báo trong
chương trình chính nhưng ta có thể khai báo thêm các hằng, kiểu, biến dùng riêng
trong nội bộ hàm.
Chú ý: là phải có một biến trung gian có cùng kiểu kết quả của hàm để lưu
kết quả của hàm trong quá trình tính toán để cuối cùng ta có 1 lệnh gán giá trị của
biến trung gian cho tên hàm.
Ví dụ : function lines(x,y,u,v:real): real;
Đây là một hàm số có tên là lines với 4 tham số hình thức x, y, u và v.
Kiểu của x, y, u và v là kiểu số thực real. Hàm lines sẽ cho kết quả kiểu số
thực real.
Giáo viên: Nguyễn Đình Khương

Trang 12


Sáng kiến kinh nghiệm – Bộ môn Tin học

Ví dụ: Tìm khoảng cách lớn nhất giữa 3 điểm A, B và C khi biết tọa độ 3 điểm
A(xA,yA), B(xB,yB) và C(xC,yC).
- Dữ liệu vào: nhập 4 số thực xA, yA, xB, yB
- Dữ liệu ra: Khoảng cách AB
Ý tưởng:
- Phương trình tính khoảng cách:
+ AB = ( xB − xA ) 2 + ( yB − y A )2
+ AC = ( xC − x A )2 + ( yC − y A ) 2
+ BC = ( xC − xB )2 + ( yC − yB )2
- Tìm max của 3 số AB, AC và BC.
Program lineABC;
Var t,xA,yA,xB,yB,xC,yC:real ;{ t,xA,yA,xB,yB,xC,yC biên toàn cục}
///////////////////////////////////////////////////

function lines(x,y,u,v:real):real; { x,y,u,v danh sách tham số}
Var line:Real; {line biến cục bộ}
Begin
line:=sqrt(sqr(u-x)+sqr(v-y));
lines:=line;
end ;
/////////////////////////////////////////////////
function maxline(x,y:real):real; {x,y danh sách tham số}
begin
if x>y then maxline:=x else maxline:=y;
end;
/////////////////////////////////////////////////
BEGIN
Write('nhap toa do diem A'); Readln(xA,yA);
Write('Nhap toa do diem B'); Readln(xB,yB);
Write('Nhap toa do diem C'); Readln(xC,yC);
t:=maxline(maxline(Lines(xA,yA,xB,yB),Lines(xC,yC,xB,yB)),Lines(xA,
yA,xC,yC)); {lời gọi hàm line, maxline}

Giáo viên: Nguyễn Đình Khương

Trang 13


Sáng kiến kinh nghiệm – Bộ môn Tin học
write('hai diem co khoang cach lon nhat=',t:8:2);
Readln;
END.

Khi khai báo kiểu dữ kiệu cho các tham số hình thức trong thủ tục và hàm,

ta cần phải chú ý điểm sau:
Nếu kiểu dữ liệu của các tham số hình thức là các kiểu dữ liệu có cấu trúc
(kiểu array, string, ... ) thì việc khai báo kiểu dữ liệu cho các tham số hình thức nên
được khai báo theo cách gián tiếp, tức là phải thông qua từ khóa TYPE.
Ví dụ : Procedure Xuat(hoten: array[1..100] of string[30]);
Chương trình con Xuat bị lỗi ở phần khai báo kiểu dữ liệu cho hai tham số
hình thức là hoten. Để khắc phục lỗi này, ta sẽ khai báo gián tiếp một kiểu dữ liệu
arr thông qua từ khóa TYPE như sau:

TYPE arr=Array[1..100] of string[30];{arr là kiểu dữ kiệu
mảng có 100 phần tử kiểu xâu}

Tiếp đến, dùng kiểu dữ liệu mới định nghĩa arr để định kiểu cho các tham số
hình thức hoten như sau:
Procedure Xuat1(hoten : arr);
3.1.4.Truyền tham số cho chương trình con
Khi truyền tham số trong Pascal, đòi hỏi phải có sự tương ứng về tên của
kiểu dữ liệu của các tham số hình thức và tham số thực. Một số định nghĩa và qui
tắc về truyền tham số trong Pascal: Những tham số hình thức nằm sau từ khóa
VAR gọi là tham số biến. Với tham số biến, các tham số thực bắt buộc phải là biến
chứ không được là giá trị. Khi giá trị của tham số biến thay đổi thì nó sẽ làm thay
đổi giá trị của tham số thực tương ứng và khi ra khỏi chương trình con đó, tham số
thực vẫn giữ giá trị đã được thay đổi đó. Những tham số hình thức không đứng sau
từ khóa VAR gọi là tham số trị, khi đó các tham số thực có thể là một biến, một
biểu thức, một hằng, hoặc một giá trị số. Các tham số trị nhận giá trị từ tham số
thực khi truyền như là giá trị ban đầu, khi giá trị của tham số trị thay đổi thì nó sẽ
không làm thay đổi giá trị của tham số thực, nghĩa là giá trị của tham số thực sau
khi thoát khỏi chương trình con vẫn luôn bằng với giá trị của tham số thực trước
khi truyền đến chương trình con đó. Do vậy một tham trị không bao giờ là kết quả
tính toán của chương trình con.

Giáo viên: Nguyễn Đình Khương

Trang 14


Sáng kiến kinh nghiệm – Bộ môn Tin học

Ví dụ 1: Viết chương trình hoán vị hai giá trị a và b.
program Parameter;
var a,b: real; {a,b là hai biến toàn cục}
///////////////////////////////////////////////////////

procedure hoanvi(var x,y:real); {x,y là hai tham số biến}
var tam:real;
Begin
tam:=x;
x:=y;
y:=tam;
End;
//////////////////////////////////////////////////
Begin
write('nhap 2 so a va b');
readln(a,b);
writeln('hai so truoc khi hoan vi ',a:4:2,' ',b:4:2);
hoanvi(a,b); {hai tham số thực a và b được truyền cho tham

số biến x và y}
writeln('hai so sau khi hoan vi ',a:4:2,' ',b:4:2);
readln;
End.


Chạy chương trình trên: Giả sử dữ liệu vào cho a=5 và b=10
Kết quả kiểm chứng qua các trường hợp như sau:
TH1: Chạy chương trình cho kết quả hoán vị ta được: a=10 và b=5
TH2: Nếu đoạn chương trình con procedure hoanvi(var x,y:real);
trên được khai báo như sau:
procedure hoanvi(x,y:real); {x,y là hai tham số trị}
var tam:real;
Begin
tam:=x;

Giáo viên: Nguyễn Đình Khương

Trang 15


Sáng kiến kinh nghiệm – Bộ môn Tin học
x:=y;
y:=tam;
End;

Sau khi chạy chương trình kết quả cho a=5 và b =10; vậy đại lượng a và b có
giá trị không thay đổi vì x và y được khai báo tham trị (không có từ khóa var) nên
sau khi ra khỏi chương trình con giá trị x và y không thay đổi nên được trả lại cho
a và b là giá trị trước đó.
TH3: Nếu đoạn chương trình con procedure hoanvi(var x,y:real);
trên được khai báo như sau:
procedure hoanvi(x: real,var y:real); {x là tham số trị, y là tham biến}
var tam:real;
Begin

tam:=x;
x:=y;
y:=tam;
End;

Sau khi chạy chương trình kết quả cho a=5 và b =5; vậy đại lượng a có giá
trị không thay đổi vì x được khai báo tham trị (không có từ khóa var) nên sau khi
ra khỏi chương trình con giá trị x không thay đổi nên được trả lại cho a là giá trị
trước đó. Đại lượng b có giá trị thay đổi vì y được khai báo tham biến (có từ khóa
var) nên sau khi ra khỏi chương trình con giá x thay đổi nên được trả lại cho b.
3.2. Hiệu quả của chương trình con
3.2.1. Lợi ích của chương trình con mang lại
- Tránh việc phải viết lặp đi lặp lại cùng một dãy lệnh.
- Hỗ trợ việc thực hiện các chương trình lớn.
- Phục vụ cho quá trình trừu tượng hóa.
- Mở rộng khả năng ứng dụng của ngôn ngữ.
- Thuận tiện cho phát triển, nâng cấp chương trình.

Giáo viên: Nguyễn Đình Khương

Trang 16


Sáng kiến kinh nghiệm – Bộ môn Tin học

3.2.2. Một số bài tập ứng dụng
Bài 1. Cho 3 điểm A, B và C có tọa độ A(xA,yA), B(xB,yB) và C(xC,yC). Hãy kiểm
tra xem 3 điểm đó có tạo thành tam giác? Nếu là tam giác tính diện tích tam giác?
- Dữ liệu vào: nhập 4 số thực xA, yA, xB, yB
- Dữ liệu ra: A, B và C là tam giác? Diện tích ?

Giải thuật:
- Phương trình tính khoảng cách:
+ Đặt t1= AB = ( xB − xA ) 2 + ( yB − y A )2
+ Đặt t2= AC = ( xC − xA )2 + ( yC − y A ) 2
+ Đặt t3= BC = ( xC − xB )2 + ( yC − yB ) 2
- Kiểm tra điều kiện: Nếu (t1điểm đó tạo thành tam giác, tính diện tích. Ngược lại không tạo thành tam giác.
Program
Var

tamgiac;

xA,yA,xB,yB,xC,yC,t1,t2,t3:real;

/////////////////////////////////////////
procedure nhap;
begin
Write('nhap toa do diem A'); Readln(xA,yA);
Write('Nhap toa do diem B'); Readln(xB,yB);
Write('Nhap toa do diem C'); Readln(xC,yC);
end;
/////////////////////////////////////////
function lines(var x,y,u,v:real):real;
Var line:Real;
Begin
lines:=sqrt(sqr(u-x)+sqr(v-y));
end ;
////////////////////////////////////////
procedure xuly;
var p,s: real;

begin

Giáo viên: Nguyễn Đình Khương

Trang 17


Sáng kiến kinh nghiệm – Bộ môn Tin học
if (t1begin
writeln('3 diem A(',XA:2:1,',',YA:2:1,')','
B(',XB:2:1,',',YB:2:1,')',' C(',XC:2:1,',',YC:2:1,') tao thanh tam
giac');
p:=(t1+t2+t3/2);
s:=sqrt(sqr(p-t1)+sqr(p-t2)+sqr(p-t3));
write('dien tich tam giac=',s:8:2);
end
else

write('3

B(',XB:2:1,',',YB:2:1,');','

diem

A(',XA:2:1,',',YA:2:1,');','

C(',XC:2:1,',',YC:2:1,')

khong


tao

thanh tam giac');
end;
/////////////////////////////////////////
begin
nhap;
t1:=Lines(xA,yA,xB,yB);
t2:=Lines(xC,yC,xB,yB);
t3:=Lines(xA,yA,xC,yC);
write(t1:5:1,'

',t2:5:1,'

',t3:5:1);

xuly;
Readln;
end.

Bài 2. Tìm giao điểm (nếu có) của hai đường thẳng trong mặt phẳng tọa độ khi biết
phương trình hai đường thẳng lần lượt là a1x + b1y - c1 =0 và a2x + b2y - c2=0.
Giải thuật:
Bài toán này có thể dễ dàng giải được bằng việc sử dụng phương pháp giải
và biện luận hệ pt bậc nhất 2 ẩn đã được học ở chương trình phổ thông để suy ra
kết luận cần tìm. Bài toán trên tương đương tìm nghiệm của hệ:
Giáo viên: Nguyễn Đình Khương

Trang 18



Sáng kiến kinh nghiệm – Bộ môn Tin học

a1 x + b1 y = c1

a2 x + b2 y = c2
- Nhập a1, b1, c1 và a2, b2, c2
- Tính D := a1*b2 - a2*b1;
Dx := c2*b1 - c1*b2;
Dy := a2*c1 - a1*c2;
- Nếu D<>0 thì hai đường thắng cắt nhau tại tọa độ x=Dx/D, y=Dy/D.
- Ngược lại nếu Dx=0 và Dy=0 thì hai đường thắng trùng nhau.
- Ngược lại hai đường thắng song song.
Chương trình cụ thể:
uses crt;
var

a1,b1,c1,a2,b2,c2,x,y: real;

procedure nhap;
begin
write('Nhap cac he so a1,b1,c1:'); readln(a1,b1,c1);
write('Nhap cac he so a2,b2,c2:'); readln(a2,b2,c2);
end;
function giaodiem(a1,b1,c1,a2,b2,c2:real; var x,y:real):integer;
var D,Dx,Dy:real;
begin
giaodiem:=-1; {quy uoc la 2 duong thang song song}
D := a1*b2 - a2*b1;

Dx := c2*b1 - c1*b2;
Dy := a2*c1 - a1*c2;
If D <> 0 then
begin
x:= Dx/D; y:= Dy/D; {(x,y)la toa do giao diem}

Giáo viên: Nguyễn Đình Khương

Trang 19


Sáng kiến kinh nghiệm – Bộ môn Tin học
giaodiem:=1; {Hai duong thang cat nhau}
end
else If (Dx = 0) and (Dy = 0) then giaodiem:=0 {2 dt trung nhau}
end;
procedure ketluan;
var gd:byte;
begin
gd:=giaodiem(a1,b1,c1,a2,b2,c2,x,y);
if gd=1 then write('Cat nhau tai diem (',x:10:2,',',y:10:2,')')
else if gd=0 then write('hai duong thang trung nhau')
else write('hai duong thang song song voi nhau');
end;
begin
clrscr;
nhap;
ketluan;
readln;
end.


Bài 3. Tìm giao điểm (nếu có) của đường thẳng đi qua 2 điểm A(xa,ya), B(xb,yb)
với đường thẳng đi qua 2 điểm C(xc,yc), D(xd,yd)? (Toạ độ các điểm cho từ bàn
phím)
Hướng dẫn:
Làm tương tự bai1, chỉ cần thay đổi thủ tục nhập như sau:
procedure nhap;
begin
write('Nhap toa do A(xa,ya):'); readln(xa,ya);
write('Nhap toa do B(xb,yb):'); readln(xb,yb);
write('Nhap toa do C(xc,yc):'); readln(xc,yc);

Giáo viên: Nguyễn Đình Khương

Trang 20


Sáng kiến kinh nghiệm – Bộ môn Tin học
write('Nhap toa do D(xd,yd):'); readln(xd,yd);
a1:=yb-ya;
b1:=xa-xb;
c1:=ya*xb-xa*yb;
a2:=yd-yc;
b2:=xc-xd;
c2:=yc*xd-xc*yd;
end;

Bài 4. Cho một số nguyên dương N (0Yêu cầu: Em hãy lập trình chuyển đổi số nguyên dương N (0cơ số 2 (nhị phân). (Bài toán chuyển đổi cơ số Tin học 10 – Bài 2)

Ví dụ: N=25; kết quả là: 11001
var a:array[1..100] of 0..1;
k,n,m:longint;
procedure xuat;
var j:integer;
begin
for j:=k downto 1 do
write(a[j]);
end;
procedure nhiphan;
begin
while m<>0 do
begin
k:=k+1;
a[k]:=m mod 2;
m:=m div 2;
end;
end;

Giáo viên: Nguyễn Đình Khương

Trang 21


Sáng kiến kinh nghiệm – Bộ môn Tin học
begin
write('nhap n=');readln(n);
k:=0; m:=n;
nhiphan;
write('bieu dien so ',n,' sang dang nhi phan ta duoc: ');

xuat;
readln
end.

Lưu ý: Tùy vào đối tượng học sinh chúng ta có thể mở rộng cho các bài toán cụ
thể như sau:
Bài 5. Kiểm tra xem 2 đoạn thẳng AB và CD có cắt nhau hay không.
Cách 1: Trước tiên tìm giao điểm M (nếu có) của 2 đường thẳng AB và CD, sau đó
kiểm tra giao điểm có thuộc đồng thời cả 2 đoạn thẳng AB và CD không.
Cách 2: đoạn thẳng AB cắt đoạn thẳng CD trong các trường hợp sau:
- A hoặc B thuộc đoạn thẳng CD
- C hoặc D thuộc đoạn thẳng AB
- Đoạn thẳng AB cắt đoạn thẳng CD tại một điểm M(XM,YM) khác đầu mút
của hai đoạn thẳng này khi: A và B khác phía nhau so với đường thẳng CD, đồng
thời C và D khác phía nhau so với đường thẳng AB.
Gọi phương trình đường thẳng AB là f(x,y)=0, phương trình đường thẳng
CD là g(x,y)=0 thì: Điều kiện để đoạn thẳng AB và CD cắt nhau là:
f(x3,y3)*f(x4,y4)<0 và g(x1,y1)*g(x2,y2)<0
Nếu f(x3,y3)*f(x4,y4)=0 và g(x1,y1)*g(x2,y2)=0 thì 2 đoạn thẳng có điểm chung.
Bài 6. Kiểm tra điểm M(x0,y0) có nằm trên đoạn thẳng nối 2 điểm A(x1,y1) và
B(x2,y2) hay không?
Điểm M(x0,y0) nằm trên đoạn thẳng AB <=> 2 điều kiện sau đều thoả mãn:
- Điểm M(x0,y0) nằm trên đường thẳng AB <=> F (A, B, M) = 0;
Giáo viên: Nguyễn Đình Khương

Trang 22


Sáng kiến kinh nghiệm – Bộ môn Tin học


- M nằm giữa A và B <=> min(x1,x2)<=x0<=max(x1,x2) và
min(y1,y2)<=y0<=max(y1,y2)
(tương đương với điều kiện: (x0-x1)*(x0-x2)<=0 và (y0-y1)*(y0-y2)<=0.)
Bài 7. Kiểm tra Điểm M(x0,y0) có thuộc tia AB hay không? dữ liệu nhập từ bàn
phím.
Hướng dẫn:
uuuu
r

uuu
r

Điểm M(x0,y0) thuộc tia AB nếu M thuộc đường thẳng AB và AM = k AB
với k>=0. Do đó toạ độ của M phải thoả mãn các điều kiện:
F(x0,y0)=0
(x0-x1)*(x2-x1)>=0;
(y0-y1)*(y2-y1)>=0;

4. Kết quả đạt được
Năm học 2016 – 2017, tôi được phân công giảng dạy lớp 11 chuyên Vật lý
và lớp 11 chuyên Sinh học tại trường THPT chuyên Nguyễn Chí Thanh, tôi đã tiến
hành áp dụng phương pháp dạy học ứng dụng kiến thức toán học mà học sinh đã
được lĩnh hôi vào giảng dạy lập trình cho lớp 11 chuyên Vật lý, kết quả thu được
qua 2 lần kiểm tra trước thực nghiệm và sau thực nghiệm được đánh giá về phần
bài tập ứng dụng lý thuyết chương trình con như sau:
- Chọn lớp 11 chuyên Sinh học là lớp đối chứng, chọn lớp 11 chuyên Vật lí
làm lớp thực nghiệm.
Bảng kết quả trước thực nghiệm
Bảng 1. Bảng kết quả kiểm tra đánh giá lần 1
Tỷ lệ


Kém

Yếu

TB

Khá

Giỏi

11 chuyên Sinh

0%

0%

16%

58%

26%

11 chuyên Lý

0%

0%

15%


57%

28%

Lớp

Kiểm tra lần 1
(trước thực nghiệm)

Giáo viên: Nguyễn Đình Khương

Trang 23


Sáng kiến kinh nghiệm – Bộ môn Tin học

Dựa vào bảng 1 kết quả kiểm tra ta thấy sự chênh lệch kiến thức giữa hai lớp thực
nghiệm và lớp đối chứng là tương đương, không lệch nhau quá nhiều về kiến thức.
Bảng kết quả sau thực nghiệm
Bảng 2. Bảng kết quả kiểm tra đánh giá lần 2
Tỷ lệ

Kém

Yếu

TB

Khá


Giỏi

11 chuyên Sinh

0%

0%

15%

60%

25%

11 chuyên Lý

0%

0%

5%

70%

25%

Lớp

Kiểm tra lần 2

(sau thực nghiệm)

Từ bảng 2 (bảng kết quả kiểm tra đánh giá lần 2) số liệu so sánh tỷ lệ phần trăm
cho thấy tỷ lệ phân trăm sau thực nghiệm kết quả giỏi và trung bình giảm và tỷ lệ
học sinh khá tăng đáng kể so với trước thực nghiệm. Mặt khác so với lớp đối
chứng thì phần điểm số được cải thiện khá nhiều. Điều đó chứng tỏ rằng khi thay
đổi phương pháp và hướng tiếp cận thì sẽ giảm khoảng cách giữa hai đối tượng
trên là có tác dụng.
Năm học 2015 – 2016 tôi cũng đã linh động áp dụng phương pháp này trong
trong một số tiết dạy qua các nội dung kiến thức về bài chương trình con và phân
loại đối với học sinh khối lớp 11 và kết quả năm nay các em tốt hơn hẳn so với các
khóa trước. Đặc biệt, tôi cũng đã áp dụng trong công tác phát hiện và bổ sung
nguồn học sinh giỏi cho đội tuyển và bước đầu thấy có hiệu quả tốt sau hai năm
thực hiện phương pháp đổi mới dạy học trong nhà trường, cụ thể.
- Năm học 2015-2016: Giải Olympic

STT

Kỳ thi

Huy chương
Vàng

Bạc

Đồng

Tổng số

1


Olympic Tỉnh

2

2

2

6

2

Olympic Khu vực

0

2

0

2

Giải học sinh giỏi:
Giáo viên: Nguyễn Đình Khương

Trang 24


Sáng kiến kinh nghiệm – Bộ môn Tin học


STT

Giải thưởng

Kỳ thi

Nhất

Nhì

Ba

KK

Tổng số

1

Học sinh giỏi Tỉnh

1

1

2

1

5


2

Tin học trẻ không chuyên Tỉnh

1

1

0

1

3

0

0

0

2

2

3

Tin học trẻ không chuyên toàn
quốc


- Năm học 2016-2017: Giải Olympic

STT

Kỳ thi

Huy chương
Vàng

Bạc

Đồng

Tổng số

1

Olympic Tỉnh

0

4

4

8

2

Olympic Khu vực


2

0

2

4

Giải học sinh giỏi:

STT

Kỳ thi

Giải thưởng
Nhất

Nhì

Ba

KK

Tổng số

1

Học sinh giỏi Tỉnh


0

0

2

6

8

2

Tin học trẻ không chuyên Tỉnh

1

1

2

3

7

Dựa vào bảng thống kê qua hai năm học chúng ta thấy kết quả học sinh giỏi
qua các kỳ thi được thay đổi không chỉ về mặt số lượng mà cả về chất lương. Qua đó
cho thấy sự thay đổi phương pháp sẽ làm thay đổi kết quả học tập của học sinh.
Do hạn chế về mặt thời gian thực nghiệm chưa nhiều, việc đưa ra các dẫn
chứng còn hạn chế, sáng kiến chỉ mới tập trung vào phần bài tập sử dụng chương
trình con, thời gian tới tôi sẽ tiếp tục nghiên cứu, mở rộng và hoàn thiện hơn nữa.

Tuy nhiên, bước đầu thực nghiệm cho thấy:
- Việc áp dụng phương pháp dạy học theo hướng tiếp cận này vào giảng dạy
là khả thi vì nó gây sự hứng thú cho học sinh rất lớn. Mở ra khả năng ôn lại kiến
thức toán và mở rộng bài tập cho học sinh ứng dụng trong tin học là rất lớn.
Giáo viên: Nguyễn Đình Khương

Trang 25


×