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

SKKN: ĐỔI MỚI PHƯƠNG PHÁP DẠY HỌC MÔN TIN HỌC LỚP 11 NỘI DUNG CHƯƠNG TRÌNH CON NHẰM GÂY HỨNG THÚ VÀ NÂNG CAO KẾT QUẢ HỌC TẬP MÔN TIN HỌC

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 (646.83 KB, 28 trang )

.

SKKN: ĐỔI MỚI PHƯƠNG PHÁP DẠY HỌC MÔN TIN HỌC LỚP 11
NỘI DUNG CHƯƠNG TRÌNH CON NHẰM GÂY HỨNG THÚ VÀ NÂNG
CAO KẾT QUẢ HỌC TẬP MÔN TIN HỌC
PHẦN I . MỞ ĐẦU
I. Lý do
Trong nghiệp vụ của người thầy giáo có hai vấn đề quan trọng: thứ nhất là
thực tiễn về tiềm năng - những kiến thức lý thuyết mà họ được học rất cơ bản.
Thứ hai là thực tiễn về nghiệp vụ - thầy giáo phải biết cách truyền thụ kiến thức
phù hợp với trình độ của học sinh. Trong đó, thực tiễn thứ hai là điều quyết định
trong nghiệp vụ của thầy giáo, nó đánh giá chất lượng giảng dạy của thầy giáo.
Hai thực tiễn trên vừa mâu thuẫn với nhau, lại vừa thống nhất với nhau. Thầy
giáo không thể mang hết các kiến thức lý thuyết cao xa và trừu tượng dạy cho
học sinh, nhưng cũng không thể dạy tốt cho học sinh nếu thầy giáo hiểu biết quá
ít.
Đổi mới phương pháp dạy học theo hướng tích cực hóa hoạt động của học
sinh là một quá trình lâu dài; không thể ngày một ngày hai mà đông đảo giáo viên
từ bỏ được kiểu dạy học truyền thụ kiến thức, tiếp thu thụ động đã quen thuộc từ
lâu. việc phát triển các phương pháp tích cực đòi hỏi một số điều kiện, trong đó
quan trọng nhất là bản thân mỗi giáo viên cần có một sự nỗ lực để tìm tòi, sáng
tạo trong công tác giảng dạy của mình.
Đổi mới phương pháp dạy học là một vấn đề hết sức quan trọng, nhất là với
bộ môn Tin học hiện đang được đưa vào giảng dạy ở các trường phổ thông. Là
một giáo viên giảng dạy bộ môn này, theo em không phải cứ tìm được nhiều bài
toán khó, bài toán hay để giảng dạy cho học sinh. Mà vấn đề đặt ra là chúng ta
cần phải tích cực tìm tòi, sáng tạo trong việc đưa ra những bài toán đó để giúp
cho học sinh có sự hứng thú, tìm tòi sáng tạo trong quá trình giài quyết học tập,
từ đó biết vận dụng linh hoạt trong các tình huống cụ thể ngoài thực tế.
Trong việc giảng dạy cho học sinh, ngoài việc giúp học sinh lĩnh hội những
kiến thức cơ bản. Thầy giáo còn phải biết kích thích tính tích cực, sự sáng tạo say


mê học hỏi của học sinh trong việc học tập của các em. Bởi vì, việc học tập tự
giác, tích cực, chủ động và sáng tạo đòi hỏi học sinh phải có ý thức về những
mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ hoạt động để
đạt các mục tiêu đó.
Turbo Pascal là ngôn ngữ lập trình có cấu trúc, nó được dùng phổ biến ở nước ta
hiện nay trong công tác giảng dạy, lập trình tính toán, đồ họa. Turbo Pascal được
dùng trong chương trình giảng dạy Tin học ở hầu hết các trường đại học, cao
đẳng, trung học phổ thông.
Trong các vấn đề về Tin học được đưa vào giảng dạy ở chương trình bậc học
phổ thông hiện nay. Khi nói đến vấn đề dạy học lập trình cho học sinh, vấn đề
dạy học cho học sinh về chương trình con là một trong những vấn đề chiếm vai
trò quan trọng. Bởi vì, sử dụng chương trình con để hợp lý hóa, tiết kiệm công
sức lập trình. Đồng thời, chương trình con có thể giúp cho người lập trình dễ sửa
chữa, dễ kiểm tra. Vấn đề đặt ra là: gợi động cơ hoạt động cho học sinh khi giảng

5


.

dạy về chương trình con như thế nào? Đó chính là vấn đề mà bản thân em hết sức
quan tâm.
Trên cơ sở những gì mà học sinh được học tập về môn lập trình Pascal, học
sinh có thể sử dụng một cách thành thạo các ngôn ngữ khác để hoàn thành tốt hơn
những ứng dụng trong thực tế. Bởi vì, ngôn ngữ Pascal có tính cấu trúc mạnh, có
cơ sở và nó đòi hỏi chương trình phải chặt chẽ, logic. Đặc biệt, khi học về
chương trình con, học sinh có thể hiểu một cách sâu sắc hơn về ngôn ngữ lập
trình, nhìn nhận vấn đề một cách sáng sủa hơn, chặt chẽ hơn và nhất là chương
trình con có thể giúp cho các em hoàn thành những chương trình lớn hơn vượt ra
những bài toán bình thường mà nội bộ môn học đòi hỏi. Chính vì vậy, việc gợi

động cơ cho học sinh trong việc dạy học chương trình con là một công việc quan
trọng, đòi hỏi mỗi giáo viên cần phải nỗ lực tìm tòi, sáng tạo giúp cho học sinh
nhìn nhận vấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho các em
có thể yêu thích nhiều hơn nữa ngôn ngữ lập trình Pascal.
II. Định hướng
1. Mục đích
Tạo động cơ cho học sinh ý thức về ý nghĩa của các hoạt động khi sử dụng
chương trình con trong công việc lập trình. Từ đó, học sinh có thể liên hệ , vận
dụng sáng tạo vào giải quyết các bài toán lập trình và các tình huống thực tế.
2. Nhiệm vụ
Qua việc nghiên cứu các vấn đề về chương trình con của ngôn ngữ lập trình
Pascal, các tài liệu về phương pháp giảng dạy. Từ đó, đưa ra các biện pháp có thể
gợi động cơ hoạt động cho học sinh thông qua các ví dụ cụ thể về chương trình
con.
III. Phương pháp
Trong nghiên cứu lý luận người ta dựa vào những tài liệu sẵn có, những lý
thuyết đã được khẳng định, những thành tựu của nhân loại trên những lĩnh vực
khác nhau như Tâm lý học, Giáo dục học, Tin học, ... để xem xét vấn đề, tìm ra
giải pháp hợp lý có sức thuyết phục vận dụng vào PPDH Tin học.
Người ta cũng nghiên cứu cả những kết quả của bản thân chuyên ngành PPDH
Tin học để kế thừa những cái hay, phê phán và gạt bỏ những cái dở, bổ xung và
hoàn chỉnh những nhận thức đã đạt được.
Những hình thức thường dùng trong nghiên cứu lý luận là:
- Phân tích tài liệu lý luận : Giúp chúng ta chọn đề tài, đề ra mục đích nghiên
cứu, hình thành giả thuyết khoa học, xác định tư tưởng chủ đạo và đánh giá sự
kiện. Khi nghiên cứu lý luận, ta cần phân tích, tổng hợp, so sánh, khái quát để tìm
ra ý mới. Cái mới ở đây có thể là một lý thuyết hoàn toàn mới, nhưng cũng có thể
là một cái mới đan kết với những cái cũ, có thể là một sự tổng hợp những nét
riêng lẻ đã chứa trong cái cũ, nêu bật cái bản chất từ những cái cũ, bổ xung, cụ
thể hóa lý thuyết cũ.

- So sánh quốc tế : Giúp chúng ta lựa chọn, xây dựng phương án tác động giáo
dục trên cơ sở đánh giá, so sánh tài liệu, cách làm của những nước khác nhau.
- Phân tích tiên nhiệm : Thường dựa vào những yếu tố lịch sử, những cách tiếp
cận khác nhau của một lý thuyết, những cách định nghĩa khác nhau của một khái

6


.

niệm, ... để dự kiến những quan niệm có thể có của học sinh về một kiến thức Tin
học. Nó cũng được dùng để kiểm nghiệm một hiện tượng, một quá trình có thỏa
mãn những tiêu chuẩn, yêu cầu, điều kiện đặt ra hay không.
Quan sát điều tra được sử dụng rộng rãi trong nghiên cứu giáo dục. Đó là
phương pháp tri giác có mục đích một hiện tượng giáo dục nào đó để thu lượm
những số liệu, tài liệu, sự kiện cụ thể đặc trưng cho quá trình diễn biến của hiện
tượng mà ta dự định khảo sát. Chúng ta quan tâm đến chất lượng của các mối
quan hệ, của các hoạt động, của tình huống. Điều tra giống quan sát ở chỗ cùng
dựa vào và khai thác những hiện tượng có sẵn, không chủ động gây nên những
tác động sư phạm, nhưng quan sát thiên về xuất phát từ những dấu hiệu bên
ngoài, còn điều tra có thể khai thác những thông tin sâu kín từ bên trong, chẳng
hạn cho làm những bài kiểm tra rồi đánh giá.
Quan sát - điều tra giúp chúng ta theo dõi hiện tượng giáo dục theo trình tự
thời gian, phát hiện những biến đổi số lượng, chất lượng gây ra do tác động giáo
dục. Nó giúp ta thấy được những vấn đề thời sự cấp bách đòi hỏi phải nghiên cứu
hoặc góp phần giải quyết nhiệm vụ nghiên cứu. Môi trường tự nhiên là nguồn
cung cấp dữ liệu trực tiếp cho ta. Người nghiên cứu đến trực tiếp một nơi nào đó
mà họ quan tâm để quan sát và thu thập dữ liệu, bởi vì các hoạt động chỉ có thể
hiểu tốt nhất là trong môi trường tự nhiên, trong ngữ cảnh mà chúng xuất hiện.
Quan sát - điều tra thực tiễn sư phạm, chẳng hạn thăm lớp dự giờ sẽ giúp

chúng ta nhận thức được thực trạng dạy học Tin, phát hiện được những vấn đề
thời sự cấp bách cần nghiên cứu, giúp ta thu được những tài liệu sinh động và bổ
ích cho nhiệm vụ nghiên cứu.
Trong khi quan sát - điều tra diễn biến thực của những hiện tượng sư
phạm, có khi người ta tình cờ phát hiện ra những sự kiện, hiện tượng sư phạm
mới ngoài dự kiến ban đầu.
Tổng kết kinh nghiệm thực chất là đánh giá và khái quát hóa những kinh
nghiệm đã thu thập được trong hoạt động thực tiễn, từ đó phát hiện ra những vấn
đề cần khẳng định để đưa ra áp dụng rộng rãi hoặc cần tiếp tục nghiên cứu hay
loại bỏ. Nó có nguồn gốc từ kinh nghiệm, mang tính khoa học, được lĩnh hội,
kiểm chứng từ quá trình hoạt động thực tiễn sinh động. Bài học kinh nghiệm là sự
cụ thể hóa một cách sáng tạo tư tưởng, luận điểm, lý luận giáo dục đã đi vào cuộc
sống. Trong quá trình nghiên cứu tổng kết kinh nghiệm, có khi người ta khám phá
ra những mối liên hệ có tính quy luật của những hiện tượng giáo dục.
Bài học kinh nghiệm cần trình bày theo trình tự sau:
- Tên bài học kinh nghiệm
- Nêu bối cảnh xuất hiện vấn đề mà khi giải quyết dẫn đến bài học kinh
nghiệm.
- Những kết quả đạt được gắn với nhiệm vụ nghiên cứu.
- Hệ thống biện pháp đã vận dụng đạt kết quả cao.
- Đánh giá tác dụng, hiệu quả của bài học kinh nghiệm, đưa ra nhận định có
tính khái quát về bài học mang tính lý luận.
Tổng kết kinh nghiệm không chỉ đơn giản là trình bày lại những công việc đã
làm và những kết quả đã đạt được. Là một phương thức nghiên cứu khoa học, nó
phải được tiến hành theo một quy trình nghiêm túc,
Những bước của quá trình phát hiện có thể là:

7



.

- Nêu mục đích yêu cầu phát hiện.
- Triển khai những hình thức phát hiện.
- Thẩm định, bổ sung thông tin.
- Tiến hành xử lý thông tin.
Khi tiến hành xử lý thông tin phải căn cứ vào cái có thực thu được qua quá
trình khảo sát, phát hiện thu thập được. Dùng lý luận để phân tích các tư liệu, số
liệu rút ra được từ thực tiễn. Rút ra bài học kinh nghiệm dưới dạng khái quát
mang tính lý luận hay khẳng định về mặt lý luận và thực tiễn. Trong quá trình xử
lý, cần áp dụng những thao tác tư duy khoa học, trừu tượng hóa các yếu tố ngẫu
nhiên, tìm ra tính đặc thù, tất yếu

8


.

PHẦN II. NỘI DUNG
Làm cho học sinh có ý thức về ý nghĩa của những hoạt động và của đối
tượng hoạt động. Gợi động cơ nhằm làm cho những mục tiêu sư phạm biến thành
những mục tiêu của cá nhân học sinh, chứ không phải chỉ là sự vào bài, đặt vấn
đề một cách hình thức.
Ở những lớp dưới, thầy giáo thường dùng những cách như cho điểm, khen chê,
thông báo kết quả học tập cho gia đình, ... để gợi động cơ. Càng lên lớp cao, cùng
với sự trưởng thành của học sinh, với trình độ nhận thức và giác ngộ chính trị
ngày càng cao những cách gợi động cơ xuất phát từ nội dung hướng và những
nhu cầu nhận thức, nhu cầu đời sống, trách nhiệm đối với xã hội ngày càng trở
nên quan trọng.
CHƯƠNG I: ĐỘNG CƠ MỞ ĐẦU

Việc xuất phát từ thực tế không những có tác dụng gợi động cơ mà còn góp
phần hình thành thế giới quan duy vật biện chứng. Nhờ đó, học sinh nhận rõ việc
nhận thức và cải tạo thế giới đã đòi hỏi phải suy nghĩ và giải quyết những vấn đề
Tin học như thế nào, tức là nhận rõ Tin học bắt nguồn từ những nhu cầu của đời
sống thực tế. Vì vậy, chúng ta cần khai thác triệt để mọi khả năng để gợi động cơ
xuất phát từ thực tế. Tuy nhiên, để gợi động cơ xuất phát từ thực tế cần chú ý các
điều kiện sau:
- Vấn đề đặt ra phải đảm bảo tính chân thực, đương nhiên có thể đơn giản hóa
vì lý do sư phạm trong trường hợp cần thiết.
- Việc nêu vấn đề không đòi hỏi quá nhiều tri thức bổ xung.
- Con đường từ lúc nêu vấn đề cho tới khi giải quyết vấn đề càng ngắn càng
tốt.
Mặc dù Tin học phản ánh thực tế một cách toàn bộ và nhiều tầng. Tuy nhiên
không phải bất cứ nội dung nào, hoạt động nào cũng có thể gợi động cơ xuất phát
từ thực tế. Vì vậy, ta còn tận dụng cả những khả năng gợi động cơ xuất phát từ
nội bộ Tin học.
Gợi động cơ từ nội bộ Tin học là nêu vấn đề Tin học xuất phát từ nhu cầu Tin
học, từ việc xây dựng khoa học Tin hoc, từ những phương thức tư duy và hoạt
động Tin học. Gợi động cơ theo cách này là cần thiết vì:
- Việc gợi động cơ xuất phát từ thực tế không phải bao giờ cũng thực hiện
được.
- Việc gợi động cơ từ nội bộ Tin học sẽ giúp học sinh hình dung được đúng sự
hình thành và phát triển của Tin học cùng với những đặc điểm của nó và có thể
dần dần tiến tới hoạt động Tin học một cách độc lập.
Thông thường khi bắt đầu một nội dung lớn, chẳng hạn một phân môn hay một
chương ta nên cố gắng xuất phát từ thực tế. Còn đối với từng bài hay từng phần
của bài thì cần tính tới những khả năng gợi động cơ từ nội bộ Tin học. Đó là
những cách sau đây:
Xét bài toán : “Viết chương trình cho máy tính chu vi, diện tích và đường chéo
của ba hình chữ nhật theo hai kích thước của mỗi hình. Trong đó:

- Hình thứ nhất có hai kích thước là a1, a2

9


.

- Hình thứ hai có hai kích thước là b1, b2
- Hình thứ ba có hai kích thước là a1+b1 và a2*b2”.
Var a1, b1, a2, b2, c1, c2, c3, d1, d2, d3, m1, m2, m3 : Real;
Begin
Writeln('Nhap hai canh cua hinh chu nhat thu nhat:');
Write('a1 = '); Readln(a1);
Write('b1 = '); Readln(b1);
Writeln('Nhap hai canh cua hinh chu nhat thu hai:');
Write('a2 = '); Readln(a2);
Write('b2 = '); Readln(b2);
c1 := 2 * (a1 + b1);
c2 := 2 * (a2 + b2);
c3 := 2 * ((a1 + b1) + (a2 * b2));
d1 := a1 * b1;
d2 := a2 * b2;
d3 := (a1 + b1) * (a2 * b2);
m1 := sqrt(a1 * a1 + b1 * b1);
m2 := sqrt(a2 * a2 + b2 * b2);
m3 := sqrt(sqr(a1 + b1) + sqr(a2 * b2));
Writeln('Hinh chu nhat thu nhat:');
Writeln('Chu vi bang : ',c1:0:2);
Writeln('Dien tich bang : ',d1:0:2);
Writeln('Duong cheo bang: ',m1:0:2);

Writeln('Hinh chu nhat thu hai:');
Writeln('Chu vi bang : ',c2:0:2);
Writeln('Dien tich bang : ',d2:0:2);
Writeln('Duong cheo bang: ',m2:0:2);
Writeln('Hinh chu nhat thu ba:');
Writeln('Chu vi bang : ',c3:0:2);
Writeln('Dien tich bang : ',d3:0:2);
Writeln('Duong cheo bang: ',m3:0:2);
Readln
End.
Chương trình trên để thực hiện được yêu cầu của đề bài, chúng ta phải viết đi
viết lại ba dòng liên tiếp tính chu vi, diện tích và đường chéo của từng hình chữ
nhật. Giả sử nếu phải tính đến n hình chữ nhật thì vấn đề quả thực là hết sức phức
tạp. Trong bài toán trên ta còn chưa có phần kiểm tra điều kiện nhập vào của mỗi
hình. Nếu có thêm điều kiện này, chắc chắn chương trình còn dài nữa. Vấn đề đặt
ra là: làm thế nào có thể xóa bỏ được sự hạn chế này? Ở đây, chúng ta có thể
hướng dẫn cho học sinh sử dụng chương trình con để khắc phục sự hạn chế đó.
Thay vì phải viết nhiều lần lệnh nhập, tính đi tính lại cho từng hình ta có thể viết
2 thủ tục:
1. Thủ tục nhập hai cạnh của hình chữ nhật.
2. Thủ tục Tính ba giá trị cho mỗi hình.

10


.

Var a1, b1, a2, b2: Real;
Procedure Nhap(Var x, y: Real; i: Byte);
Begin

Writeln('Nhap hai kich thuoc cua hinh chu nhat thu ',i,':');
Repeat
Write('Canh thu nhat: '); Readln(x);
Write('Canh thu hai : '); Readln(y);
If (x <= 0) Or (y <= 0) Then Writeln('Nhap lai!');
Until (x > 0) And (y > 0);
End;
Procedure Tinh(a, b: Real; k: Byte);
Begin
Writeln('Hinh chu nhat thu ',k,':');
Writeln('Chu vi bang : ',2 * (a + b):0:2);
Writeln('Dien tich bang : ',a * b:0:2);
Writeln('Duong cheo bang: ',sqrt(a * a + b * b):0:2);
End;
Begin
Nhap(a1, b1, 1); Nhap(a2, b2, 2);
Tinh(a1, b1, 1); Tinh(a2, b2, 2); Tinh(a1 + b1, a2 * b2, 3);
Readln
End.
Xét bài toán sau: “Nhập vào 1 dãy n số nguyên lớn hơn 1. Viết ra màn hình tất
cả các số của dãy thỏa mãn điều kiện là số nguyên tố”.
Var A: Array[1..100] Of Integer;
k,n: Integer;
Function NgTo(a: Integer):Boolean;
Var u: Integer;
Begin
NgTo:=False;
For u := 2 To Trunc(sqrt(a)) Do
If a mod u = 0 Then Exit;
NgTo := a > 1;

End;
Begin
Write('Nhap so phan tu: '); Readln(n);
Writeln('Nhap cac phan tu cua day. Chu y: A[k] >= 2');
For k := 1 to n do Begin
Repeat
Write('A[',k,'] = ');Readln(A[k]);
If A[k] < 2 Then Writeln('Ban can nhap A[k] > 2. Vui long nhap lai!');
Until A[k] >= 2;
End;

11


.

Writeln('Cac so nguyen to cua day so tren la:');
For k := 1 to n do
If NgTo(A[k]) Then Write(A[k]:6);
Readln
End.
Từ chương trình trên chúng ta có thể giúp cho học sinh thấy được việc sử dụng
chương trình con có thể hợp lý hóa, tiết kiệm công sức lập trình. Đồng thời,
chương trình con giúp cho người lập trình dễ sửa chữa, dễ kiểm tra. Cụ thể là với
bài toán trên chúng ta có thể sửa chữa thành bài toán: “Viết ra màn hình tất cả
các số của dãy thỏa mãn điều kiện là hợp số” chỉ bằng hai câu lệnh:
- Dòng lệnh Writeln(‘Cac so nguyen to cua day so tren la:’); Sửa thành:
Writeln(‘Cac so la hop so cua day so tren la:’);.
- Dòng lệnh : If NgTo(A[k]) Then Write(A[k]:6) ta thay bằng dòng lệnh If Not
NgTo(A[k]) Then Write(A[k]:6).

Có những khái niệm mà học sinh đã biết ở từng bài riêng lẻ chưa thể đưa ra
ngay những nhận xét, những kết luận chính xác liên quan tới khái niệm đó; tới
một thời điểm nào đó có đủ điều kiện thì chúng ta có thể gợi lại vấn đề và giúp
học sinh chính xác hóa khái niệm đó. Chẳng hạn, ta cần chính xác hóa khái niệm
sử dụng tham biến của chương trình con. Sau khi học cách sử dụng tham trị,
chúng ta có thể yêu cầu học sinh làm bài tập sau:
“Viết một thủ tục nhập vào số đo bán kính của 3 đường tròn. Sau đó tính chu
vi và diện tích của mỗi đường tròn đó”.
Var r1, r2, r3: Real;
Procedure Nhap( r: Real; k:Byte);
Begin
Repeat
Write('Nhap ban kinh cua duong tron thu ',k,': ');
Readln(r);
If r <= 0 Then Writeln('Nhap lai!');
Until r > 0;
End;
Begin
Nhap(r1, 1);
Nhap(r2, 2);
Nhap(r3, 3);
Writeln('Duong tron 1 Chu vi bang:',2 * pi * r1:6:1,' Dien tich bang: ',pi *
sqr(r1):6:1);
Writeln('Duong tron 2 Chu vi bang:',2 * pi * r2:6:1,' Dien tich bang:',pi *
sqr(r2):6:1);
Writeln('Duong tron 3 Chu vi bang:',2 * pi * r3:6:1,' Dien tich bang:',pi *
sqr(r3):6:1);
Readln
End.


12


.

Chúng ta có thể yêu cầu học sinh thực thi chương trình trên và chạy thử. Học
sinh sẽ phát hiện ra là kết quả chu vi và diện tích của cả ba đường tròn đều bằng
0. Vấn đề đặt ra là: Chương trình sai ở chỗ nào? Lúc này giáo viên có thể khẳng
định sự phân biệt giữa tham biến và tham trị, các giá trị của tham biến được lưu
giữ khi ra ngoài chương trình con, còn giá trị của tham trị chỉ lưu giữ khi thực
hiện chương trình con, nếu ra khỏi chương trình con nó sẽ không còn lưu giữ giá
trị đó. Điều này sẽ giúp cho chúng ta chính xác hóa khái niệm tham biến và tham
trị cho học sinh.
Chương trình trên cần sửa lại như sau:
Var r1, r2, r3: Real;
Procedure Nhap(Var r: Real; k:Byte);
Begin
Repeat
Write('Nhap ban kinh cua duong tron thu ',k,': ');
Readln(r);
If r <= 0 Then Writeln('Nhap lai!');
Until r > 0;
End;
Begin
Nhap(r1, 1);
Nhap(r2, 2);
Nhap(r3, 3);
Writeln('Duong tron 1 Chu vi bang:',2 * pi * r1:6:1,' Dien tich bang: ',pi *
sqr(r1):6:1);
Writeln('Duong tron 2 Chu vi bang:',2 * pi * r2:6:1,' Dien tich bang:',pi *

sqr(r2):6:1);
Writeln('Duong tron 3 Chu vi bang:',2 * pi * r3:6:1,' Dien tich bang:',pi *
sqr(r3):6:1);
Readln
End.
Để có thể giúp học sinh nắm bắt được các kiến thức về chương trình con một
cách có hệ thống . Sau khi học xong về chương trình con, chúng ta có thể đưa ra
sơ đồ sau:
Thủ tục
Chương trình con

Không Có tham chiếu
Tham trị

Cóđề
tham
chiếu
Tiếp theo, để giúp cho học Hàm
sinh nhìn thấy vấn
có hệ
thống một các rõ ràng
hơn, đặc biệt là giúp cho học sinh hiểu rõ các vấn đề về chương trìnhTham
con. Chẳng
biến
hạn đâu là biến toàn cục, đâu là biến địa phương, khi nào dùng tham biến, khi nào

13


.


dùng tham trị, các chương trình con gọi lẫn nhau như thế nào?, ... Chúng ta có thể
đưa ra ví dụ sau:
“Viết chương trình nhập vào số cạnh của n tam giác, sau đó tính diện tích của
mỗi tam giác vừa nhập và tổng diện tích của tất cả các tam giác đó”.
Var a:array[1..3,1..100] Of Real; {Bien toan cuc}
Function Ktra(x, y, z: Real): Boolean; {Ham co tham tri}
Begin
Ktra := (x < y + z) And (y < x + z) And (z < x + y);
End;
Procedure Nhap(Var a, b, c: Real; i:Byte); {Thu tuc co tham bien}
Begin
Writeln('Nhap vao ba canh cua tam giac thu ',i,': ');
Repeat
Write('Nhap do dai canh thu nhat: '); Readln(a);
Write('Nhap do dai canh thu hai : '); Readln(b);
Write('Nhap do dai canh thu ba : '); Readln(c);
If Not Ktra(a, b, c) Then
Writeln('Ba do dai vua nhap khong phai la 3 canh tam giac! Nhap lai:');
Until Ktra(a, b, c);
End;
Function DT(m, n, p:Real): Real; {Ham co tham tri}
Var d: Real; {Bien cuc bo}
Begin
d := (m + n + p) / 2;
DT := sqrt(d * (d - m) * (d - n) * (d - p));
End;
Procedure Tinh; {Thu tuc khong co tham chieu}
Var k, n, j: Integer; tong: Real; {Bien cuc bo}
Begin

Write('Nhap so tam giac: ');Readln(n);
tong:=0;
For k:=1 to n do
Nhap(a[1,k], a[2,k], a[3,k], k);
For k:=1 to n do Begin
Tong := tong + DT(a[1, k], a[2,k], a[3,k]);
Writeln('Dien tich cua tam giac thu ',k,': ',DT(a[1, k], a[2, k], a[3, k]):6:1);
End;
Writeln('Tong dien tich cua ',n,' tam giac la: ',tong:6:1);
End;
Begin
Tinh;
Readln
End.
Xuất phát, chúng ta cho học sinh thực hiện bài toán sau: “Viết chương trình đổi
một xâu ký tự thành chữ HOA”.

14


.

Var x:String;
Procedure Doi(x: String);
Var d, i:Integer;
Begin
d := 0;
Write('Doi sang chu hoa: ');
For I := 1 to Length(x) Do
Write(Upcase(x[i]));

End;
Begin
Write('Nhap xau: '); Readln(x);
Doi(x);
Readln
End.
Ngược lại, chúng ta đặt câu hỏi: Nếu ta cần đổi một xâu ký tự thành xâu chữ
thường thì làm thế nào?
Học sinh đã biết trong bảng mã ASCII mỗi ký tự viết hoa A, B, C, ... , Z được
mã hóa bằng các con số từ 65 đến 90. Còn các ký tự thường a, b, c, ... z được mã
hóa bằng các con số từ 97 đến 122. Ta thấy rõ mỗi ký tự viết hoa và viết thường
của một chữ cách nhau 32 đơn vị. Chính vì vậy, ta có thể sử dụng quy luật này để
đổi một xâu ký tự viết HOA thành xâu ký tự viết thường bằng cách dùng một
vòng For chạy từ đầu xâu đến cuối xâu và đổi từng ký tự thành mã ASCII, nếu
gặp ký tự viết hoa, ta cộng mã ASCII của nó thêm 32 đơn vị. Chương trình như
sau:
Var x: String;
Procedure Doi(x: String);
Var d, i:Integer;
Begin
d := 0;
Write('Doi sang chu thuong: ');
For i := 1 to Length(x) Do Begin
d := ord(x[i]);
If (d >= 65) And (d <= 90) Then d := d + 32;
Write(chr(d));
End;
End;
Begin
Write('Nhap xau: '); Readln(x);

Doi(x);
Readln
End.
Xuất phát từ bài toán: “Viết chương trình tìm độ dài 3 đường cao của một tam
giác khi biết độ dài 3 cạnh của tam giác đó”.

15


.

Var a, b, c, S: Real;
Function Ktra(x, y, z: Real): Boolean;
Begin
Ktra := (x < y + z) And (y < x + z) And (z < x + y);
End;
Procedure Nhap(Var m, n, p: Real);
Begin
Repeat
Write('Nhap do dai canh thu nhat: '); Readln(m);
Write('Nhap do dai canh thu hai : '); Readln(n);
Write('Nhap do dai canh thu ba : '); Readln(p);
If Not Ktra(m, n, p) Then
Writeln('Ba do dai vua nhap khong phai la 3 canh tam giac! Nhap lai:');
Until Ktra(a, b, c);
End;
Function DT :Real;
Var d: Real;
Begin
d := (a + b + c) / 2;

DT := sqrt(d * (d - a) * (d - b) * (d - c));
End;
Procedure Dcao(m: Real);
Begin
Writeln('Duong cao qua canh ', m:0:2,' la: ',2 * S / m:0:2);
End;
Begin
Nhap(a, b, c);
S:=DT;
DCao(a); DCao(b); DCao(c);
Readln
End.
Tương tự, chúng ta yêu cầu học sinh giải bài toán sau:
“Viết chương trình tìm độ dài 3 đường trung tuyến của một tam giác khi biết
ba cạnh của tam giác”.
Var a, b, c, S: Real;
Function Ktra(x, y, z: Real): Boolean;
Begin
Ktra := (x < y + z) And (y < x + z) And (z < x + y);
End;
Procedure Nhap(Var a, b, c: Real);
Begin
Repeat

16


.

Write('Nhap do dai canh thu nhat: '); Readln(a);

Write('Nhap do dai canh thu hai : '); Readln(b);
Write('Nhap do dai canh thu ba : '); Readln(c);
If Not Ktra(a, b, c) Then
Writeln('Ba do dai vua nhap khong phai la 3 canh tam giac! Nhap lai:');
Until Ktra(a, b, c);
End;
Procedure Trung_Tuyen;
Begin
Writeln('Trung tuyen qua canh ',a:0:2,' la: ',0.5 * sqrt(2 * (b * b + c * c) - a *
a):0:2);
Writeln('Trung tuyen qua canh ',b:0:2,' la: ',0.5 * sqrt(2 * (a * a + c * c) - b *
b):0:2);
Writeln('Trung tuyen qua canh ',c:0:2,' la: ',0.5 * sqrt(2 * (b * b + a * a) - c *
c):0:2);
End;
Begin
Nhap(a, b, c);
Trung_Tuyen;
Readln
End.
Xuất phát từ bài toán: “Tìm ước chung lớn nhất của 2 số ”.
Var a, b: Integer;
Begin
Repeat
Writeln('Nhap vao 2 so:'); Readln(a,b);
If (a<=0) Or (b<=0) then Writeln(‚Nhap lai!’);
Until (a>0) And (b>0);
Write('UCLN(',a,',',b,') = ');
While a <> b do Begin
If a > b Then a := a - b

Else b := b - a;
End;
Write(a);
Readln
End.
Tiếp theo, ta yêu cầu học sinh: “Sử dụng chương trình con để tìm ước chung
lớn nhất của ba số ”. Đến đây, để viết hàm tính ước chung lớn nhất của hai số,
chúng ta nên hướng dẫn học sinh sử dụng thuật toán Ơclit để viết chương trình
nhằm tăng tốc độ tính toán.
Var a, b, c, tam: Integer;
Function UCLN(Var x, y: Integer): Integer;

17


.

Var tam: Integer;
Begin
While y<>0 do Begin
tam := x mod y;
x := y;
y := tam;
End;
UCLN := x;
End;
Begin
Writeln('Nhap ba so: '); Readln(a, b, c);
Write('UCLN(',a,',',b,',',c,') = ');
tam := UCLN(a, b);

Write(UCLN(tam, c));
Readln
End.
Sau khi thực hiện việc sử dụng chương trình con để tìm ước chung lớn nhất
của ba số thành công. Khái quát: chúng ta yêu cầu học sinh giải bài toán:
“Viết chương trình tìm ước chung lớn nhất của n số ”.
Để thực hiện, ta có thể hướng dẫn học sinh dùng thủ tục tìm ước chung lớn
nhất của hai số. Sau đó, dùng một biến tạm là u để lưu giữ giá trị đầu tiên của dãy
số, tiếp theo ta lần lượt xác định ước chung lớn nhất của u với từng giá trị của dãy
từ vị trí thứ hai. Cuối cùng, ước chung lớn nhất của dãy chính là giá trị u.
Var A: Array[1..100] Of Integer;
a1, u, i, n: Integer;
Procedure UCLN(Var x, y: Integer);
Var tam, tg: Integer;
Begin
While y<>0 do Begin
tam := x mod y;
x := y;
y := tam;
End;
End;
Begin
Write('Ban can tinh UCLN cua bao nhieu so? Nhap: '); Readln(n);
For i := 1 to n do Begin
Write('So thu ',i,': '); Readln(A[i]);
End;
Write('UCLN(');
For i := 1 to n-1 do Write(a[i],',');
Write(a[n],') = ');
u := a[1];

For i:= 2 to n do
UCLN(u, a[i]);

18


.

Write(u); Writeln;
Readln
End.
Thật vậy, việc xét tương tự, việc xét khái quát hóa, việc xét sự liên hệ và phụ
thuộc chỉ có tác dụng gợi động cơ người học sinh đã quen thuộc với những cách
xem xét này, đã trải nghiệm thành công nhiều lần là việc theo cách đó. Để thực
hiện được điều này khi dạy học cho học sinh về chương trình con. Chúng ta có
thể yêu cầu học sinh giải bài toán sau:
“Có một cái túi chứa tối đa D (kg) với n đồ vật, Cần chọn các đồ vật sao cho
giá trị của túi là lớn nhất. Biết rằng mỗi đồ vật i có khối lượng là W[i] và giá trị
là C[i] đồng (i = 1, 2, ..., n ”.
Var C, W:Array[1..100] Of Integer;
CW: Array[1..100] Of Real;
n, i, j, d, d1, gt, t: Integer;
Procedure Nhap;
Begin
Write('Nhap so luong cac do vat: '); Readln(n);
Write('Nhap khoi luong cua tui: '); Readln(D); D1:=D;
Writeln('Nhap cac gia tri cua C va W: ');
For i:=1 to n do Begin
Write('C[',i,'] = '); Readln(C[i]);
Write('W[',i,'] = '); Readln(W[i]);

CW[i] := C[i] / W[i];
End;
End;
Procedure Sapxep;
Var t1, t2: Integer; t3: Real;
Begin
Nhap;
For i := 1 to n - 1 do
For j := n downto i + 1 do Begin
If CW[j] > CW[j-1] Then Begin
t1 := C[j]; C[j] := C[j-1]; C[j-1] := t1;
t2 := W[j]; W[j] := W[j-1]; W[j-1] := t2;
t3 := CW[j]; CW[j] := CW[j-1]; CW[j-1] := t3;
End;
End;
End;
Procedure Luachon;
Var temp: Integer;
Begin
Sapxep;
i := 1; gt := 0; t := 0;
While (i <= n) And (d > 0) And (W[i] > 0) Do Begin

19


.

Temp := d Div W[i]; {So do vat duoc chon cua W[i]}
If temp > 0 Then Begin

Writeln('Do vat C[',i,'] = ',C[i],' va W[',i,'] = ',W[i],' duoc chon co so luong
',temp);
d := d - temp * W[i];
t := t + W[i] * temp;
gt := gt + temp * C[i];
End;
i := i + 1;
End;
Writeln('Gia tri toi uu co the dat duoc la:');
Writeln('Khoi luong do vat dung ',t,'.tui dung duoc ',d1,'. Con thua ',d1 - t);
End;
Begin
Luachon;
Readln
End.
CHƯƠNG II: ĐỘNG CƠ TRUNG GIAN
1) Hướng đích
Xuất phát từ bài toán giải phương trình bậc hai:
Var a, b, c, d: Real;
Begin
Writeln('Nhap 3 he so cua phuong trinh:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
If a = 0 Then
If b = 0 Then
If c = 0 Then Writeln('Phuong trinh co vo so nghiem!')
Else Writeln('Phuong trinh vo nghiem!')
Else Writeln('Phuong trinh co mot nghiem: x = ',-c/b:0:1)
Else Begin

d := b * b - 4 * a * c;
If d < 0 Then Writeln('Phuong trinh vo nghiem!')
Else
If d = 0 Then Writeln('Phuong trinh co nghiem kep: x1 = x2 = ',-b / (2 *
a):0:1)
Else Begin
Writeln('Phuong trinh co hai nghiem phan biet:');
Writeln('x1 = ',(-b + sqrt(d)) / (2 * a):0:1);
Writeln('x2 = ',(-b - sqrt(d)) / (2 * a):0:1);
End;

20


.

End;
Readln
End.
Mục tiêu là chia bài toán ban đầu thành những bài toán nhỏ độc lập. Chẳng
hạn:Ta sử dụng chương trình con thành hai bài toán :
T1: Giải phương trình bậc nhất
T2: Giải phương trình bậc hai
Var a, b, c: Real;
Procedure ptb1(m,n:Real);
Begin
If m = 0 Then
If n = 0 Then Writeln('Phuong trinh co vo so nghiem!')
Else Writeln('Phuong trinh vo nghiem!')
Else Writeln('Phuong trinh co mot nghiem: x = ',-n/m:0:1)

End;
Procedure ptb2(x, y, z: Real);
Var d: Real;
Begin
D := y * y - 4 * x * z;
If d < 0 Then Writeln('Phuong trinh vo nghiem!')
Else
If d = 0 Then Writeln('Phuong trinh co nghiem kep: x1 = x2 = ',-y / (2 *
x):0:1)
Else Begin
Writeln('Phuong trinh co hai nghiem phan biet:');
Writeln('x1 = ',(-y + sqrt(d)) / (2 * x):0:1);
Writeln('x2 = ',(-y - sqrt(d)) / (2 * x):0:1);
End;
End;
Begin
Writeln('Nhap 3 he so cua phuong trinh:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
If a=0 Then ptb1(b, c)
Else ptb2(a, b, c);
Readln
End.
Ta lại thấy trong bài toán trên việc giải phương trình bậc hai có ba trường hợp
xảy ra. Ta nên chia tiếp thành 5 bài toán nhỏ như sau:
T1: Giải phương trình bậc nhất
T2:  > 0

21



.

T3:  = 0
T4:  < 0
T5: Giải phương trình bậc hai
Var a, b, c, d: Real;
Procedure ptb1(m, n : Real);
Begin
If m = 0 Then
If n = 0 Then Writeln('Phuong trinh co vo so nghiem!')
Else Writeln('Phuong trinh vo nghiem!')
Else Writeln('Phuong trinh co mot nghiem: x = ',-n / m:0:1)
End;
Procedure denta_am;
Begin
Writeln('Phuong trinh vo nghiem!');
End;
Procedure denta_0(p, q: Real);
Begin
Writeln('Phuong trinh co nghiem kep: x1 = x2 = ',-q / (2 * p):0:1)
End;
Procedure denta_duong(i, j: Real);
Begin
Writeln('Phuong trinh co hai nghiem phan biet:');
Writeln('x1 = ',(-j + sqrt(d)) / (2 * i):0:1);
Writeln('x2 = ',(-j - sqrt(d)) / (2 * i):0:1);
End;
Procedure ptb2(x, y, z: Real);

Begin
d := y * y - 4 * x * z;
If d < 0 Then denta_am
Else
If d = 0 Then denta_0(x, y)
Else denta_duong(x, y);
End;
Begin
Writeln('Nhap 3 he so cua phuong trinh:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
If a = 0 Then ptb1(b, c)
Else ptb2(a, b, c);
Readln
End.
2) Quy lạ về quen

22


.

n!

k
Xét bài toán : Tính C nk . Học sinh đã biết công thức : C n  k!(n  k )! . Bài toán
này ta quy về bài toán quen thuộc là tính n! Ở đây chúng ta cần lưu ý với học sinh
rằng: Để tính C nk ta cần xây dựng chương trình con tính n! sau đó, ta tìm C nk bằng
công thức trên. Tuy nhiên, cũng cần phải xây dựng một chương trình con Nhap

để tránh việc người sử dụng nhập các số âm và nhập k > n.

Var k, n: Integer; C:Real;
Procedure Nhap;
Begin
Repeat
Write('Nhap k = '); Readln(k);
Write('Nhap n = '); Readln(n);
If (k < 0) Or (n < 0) Or (k > n) Then Writeln('Nhap lai!');
Until (k > 0) And (n > 0) And (k < n);
End;
Function GT(a:Integer): Integer;
Var kq, i:Integer;
Begin
kq:=1;
For i:=1 to a do kq:=kq * i;
GT:=kq;
End;
Begin
Nhap;
C := GT(n) / (GT(k) * GT(n - k));
Writeln('C = ', C:0:0);
Readln
End.
Xuất phát từ bài toán: “Tính n! bằng thuật toán đệ quy”.
Var n: Integer;
Function GT(a:Integer): Real;
Begin
If a = 0 Then GT:=1
Else GT:=GT(a - 1) * a;

End;
Begin
Write('Nhap n = '); Readln(n);
Writeln(n,'! = ', GT(n):0:0);
Readln
End.
Tương tự, chúng ta yêu cầu học sinh thực hiện giải bài toán: “Tính an bằng
thuật toán đệ quy”

23


.

Var a, n: Integer;
Function Mu(x:Integer; y:Integer):Real;
Var T: Real;
Begin
If y = 0 Then Mu:=1
Else Begin
Mu:=Mu(x, y - 1) * x;
End;
End;
Begin
Write('Nhap a = '); Readln(a);
Write('Nhap n = '); Readln(n);
Writeln(a,' mu ',n,' = ',Mu(a , n):0:0);
Readln
End.
Xuất phát từ bài toán: “Sắp xếp ba số a, b, c theo thứ tự tăng dần”.

Var a,b,c: Real;
Procedure Sapxep(Var x, y, z: Real);
Var tg: Real;
Begin
If x > y Then Begin
tg := x; x := y; y := tg;
End;
If y > z Then Begin
tg := y; y := z; z := tg;
End;
If x > y Then Begin
tg := x; x := y; y := tg;
End;
End;
Begin
Writeln('Nhap vao ba so: ');
Write('So thu nhat: '); Readln(a);
Write('So thu hai : '); Readln(b);
Write('So thu ba : '); Readln(c);
Sapxep(a, b, c);
Writeln('Ba so sau khi sap xep la:');
Write(a:6:0, b:6:0, c:6:0);
Readln
End.
Ở đây chúng ta cần lưu ý với học sinh rằng : lệnh gán nhận giá trị mới thì mất
giá trị cũ. Vì vậy mà trước khi thực hiện lệnh gán x := y để máy nhận giá trị của b
ta phải gửi giá trị cũ của x vào biến tg. Tại sao lệnh thứ ba lại giống lệnh thứ

24



.

nhất? đó là vì x, y, z, tg là các địa chỉ lưu trữ những giá trị. Những giá trị này bị
thay đổi qua những lệnh gán. Địa chỉ của biến thì không đổi, nhưng nội dung của
biến thì đã thay đổi khi thực hiện lệnh gán.
Tiếp theo, chúng ta có thể nêu câu hỏi: Khái quát, nếu phải sắp xếp n số theo
thứ tự tăng dần ta phải làm thế nào? Ta có chương trình như sau:
Var a: Array[1..100] Of Real;
i,j,n: Integer;
Procedure Doicho(Var x,y:Real);
Var tg:Real;
Begin
Tg := x; x := y; y := tg;
End;
Procedure Sapxep;
Begin
For i := 1 to n - 1 do
For j := i + 1 to n do
If a[i] > a[j] Then Doicho(a[i], a[j]);
End;
Begin
Write('Nhap so phan tu cua day so: '); Readln(n);
For i := 1 to n do Begin
Write('So thu ',i,': '); Readln(a[i]);
End;
Sapxep;
Writeln('Day so sau khi sap xep la:');
For i := 1 to n do Write(a[i]:6:0);
Readln

End.
Xét bài toán sau : “Viết chương trình cho máy nhập vào 3 cạnh của một tam
giác. Xét xem ba số đó có phải là ba cạnh của tam giác hay không? nếu có thì
tam giác đó là tam giác có ba góc nhọn hay tam giác vuông hay tam giác tù? ”
Trước hết, học sinh phải kiểm tra ba số thực phải thỏa mãn điều kiện là ba số
đo của tam giác. Tức là một số phải nhỏ hơn tổng của hai số còn lại (điều này xảy
ra với cả ba số). Sau đó, nếu chúng là ba số đo của ba cạnh một tam giác thì dạng
của tam giác phụ thuộc vào bình phương của cạnh lớn nhất nhỏ hơn hay bằng hay
lớn hơn tổng hai bình phương của hai cạnh còn lại mà nó là tam giác có ba góc
nhọn hay tam giác vuông hay tam giác tù.
Var p,q,r: Real;
Function Ktra(x, y, z: Real): Boolean;
Begin
Ktra := (x < y + z) And (y < x + z) And (z < x + y);
End;
Procedure Nhap(Var a, b, c: Real);
Begin

25


.

Writeln('Nhap vao ba canh cua tam giac: ');
Repeat
Write('Nhap do dai canh thu nhat: '); Readln(a);
Write('Nhap do dai canh thu hai : '); Readln(b);
Write('Nhap do dai canh thu ba : '); Readln(c);
If Not Ktra(a, b, c) Then
Writeln('Ba do dai vua nhap khong phai la 3 canh tam giac! Nhap lai:');

Until Ktra(a, b, c);
End;
Procedure DangTG(m, n, p: Real);
Var tg: Real;
Begin
If m < n Then Begin
tg := n; n := m; m := tg;
End;
If m < p Then Begin
tg := p; p := m; m := tg;
End;
m := sqr(m); n := sqr(n); p := sqr(p);
If m < n + p Then Writeln('la tam giac co ba goc nhon!')
Else
If m = n + p Then Writeln('La tam giac vuong!')
Else Writeln('La tam giac co mot goc tu!');
End;
Begin
Nhap(p, q, r);
DangTG(p, q, r);
Readln
End.
CHƯƠNG III: ĐỘNG CƠ KẾT THÚC
động cơ kết thúc cũng có tác dụng nâng cao tính tự giác trong hoạt động học
tập của học sinh như các cách gợi động cơ khác. Mặc dù nó không có tác dụng
kích thích đối với nội dung đã qua hoặc hoạt động đã thực hiện, nhưng nó góp
phần gợi động cơ thúc đẩy hoạt động nói chung và nhiều khi việc gợi động cơ kết
thúc ở trường hợp này lại là sự chuẩn bị gợi động cơ cho những trường hợp tương
tự sau này.
Xét bài toán sau: “Lập chương trình cho máy tính tìm các đường trung tuyến

của một tam giác khi biết số đo ba cạnh là a, b, c được nhận vào từ bàn phím”.
Trong bài toán này chúng ta yêu cầu học sinh chia ra thành nhiều bài toán nhỏ
độc lập. Cụ thể là:
Var a, b, c, S: Real;
Function Ktra: Boolean;

26


.

Begin
Ktra := (a < b + c) And (b < a + c) And (c < a + b);
End;
Procedure Nhap;
Begin
Repeat
Write('Nhap do dai canh thu nhat: '); Readln(a);
Write('Nhap do dai canh thu hai : '); Readln(b);
Write('Nhap do dai canh thu ba : '); Readln(c);
If Not Ktra Then
Writeln('Ba do dai vua nhap khong phai la 3 canh tam giac! Nhap lai:');
Until Ktra;
End;
Procedure Trung_Tuyen(m, n, p: Real);
Begin
Writeln('Trung tuyen qua canh ',m:0:2,' la: ',0.5 * sqrt(2* (n * n + p * p) - m *
m):0:2);
End;
Procedure BaTT;

Begin
Trung_tuyen(a, b, c);
Trung_tuyen(b, a, c);
Trung_tuyen(c, b, a);
End;
Begin
Nhap;
BaTT;
Readln
End.
Sau khi chương trình đã chạy thông suốt, ta gọi lại chương trình và cho học
sinh thấy được trong bài toán này là tính các đường trung tuyến của một tam giác
nên các hàm Ktra, thủ tục Nhap, thủ tục BaTT không có tham chiếu. Việc sử
dụng những chương trình con này sẽ được đề cập đến với những tham chiếu
trong bài toán cần tính các đường trung tuyến của nhiều tam giác mà cách xác
định ba cạnh của từng tam giác có thể khác nhau. Để thực hiện được ý định trên,
ta yêu cầu học sinh giải bài toán sau:
“Lập trình cho máy tính in lên màn hình các đường trung tuyến của tam giác
theo độ dài ba cạnh của tam giác đó.
- Tam giác thứ nhất có độ dài ba cạnh là a1, b1, c1.
- Tam giác thứ hai có độ dài ba cạnh là a2, b2, c2.
- Tam giác thứ ba có độ dài ba cạnh là a1 + a2, b1 + b2, c1 + c2”.
Var a1, b1, c1,a2, b2, c2, S: Real;
Function Ktra(x, y, z: Real): Boolean;
Begin

27


.


Ktra := (x < y + z) And (y < x + z) And (z < x + y);
End;
Procedure Nhap(Var a, b, c: Real; k: Byte);
Begin
Writeln('Tam giac thu ',k,':');
Repeat
Write('Nhap do dai canh thu nhat: '); Readln(a);
Write('Nhap do dai canh thu hai : '); Readln(b);
Write('Nhap do dai canh thu ba : '); Readln(c);
If Not Ktra(a, b, c) Then
Writeln('Ba do dai vua nhap khong phai la 3 canh tam giac! Nhap lai:');
Until Ktra(a, b, c);
End;
Procedure Trung_Tuyen(m, n, p: Real);
Begin
Writeln('Trung tuyen qua canh ',m:0:2,' la: ',0.5* sqrt(2* (n * n + p * p) - m *
m):0:2);
End;
Procedure BaTT(a, b, c:Real; i:Byte);
Begin
Writeln('Do dai ba trung tuyen cua tam giac thu ',i,':');
Trung_tuyen(a, b, c);
Trung_tuyen(b, a, c);
Trung_tuyen(c, b, a);
End;
Begin
Nhap(a1, b1, c1, 1);
Nhap(a2 ,b2, c2, 2);
BaTT(a1, b1, c1, 1);

BaTT(a2, b2, c2, 2);
BaTT(a1 + a2, b1 + b2, c1 + c2, 3);
Readln
End.
CHƯƠNG IV :PHỐI HỢP NHIỀU CÁCH TRUNG VÀO NHỮNG TRỌNG
ĐIỂM
Trên đây chúng ta đã xét đến những khả năng gợi động cơ xuất phát từ nội
dung dạy học. Ngoài ra, còn có những khả năng gợi động cơ không gắn với nội
dung như khen, chê, cho điểm, ... Để phát huy tác dụng kích thích, thúc đẩy hoạt
động học tập, cần phải phối hợp những cách gợi động cơ khác nhau có chú ý đến
xu hướng phát triển của cá nhân học sinh, tạo ra một sự hợp đồng tác dụng của
nhiều cách gợi động cơ, cách nọ bổ xung cách kia. Chẳng hạn, có thể gợi động cơ
cho một nội dung dạy học hoặc một hoạt động nào đó bằng cách nhấn mạnh tầm
quan trọng của nội dung hoặc của một hoạt động này đối với một nghề nào đó
trong xã hội. Tuy nhiên cách gợi động cơ hướng nghiệp này lại có nhược điểm là

28


.

nó không hấp dẫn đối với học sinh không có dự định làm nghề đó sau này. Vì vậy
có thể bổ xung bằng cách nhấn mạnh rằng nắm được nội dung đó, thực hiện được
hoạt động đó là một yếu tố văn hóa phổ thông của tất cả mọi người trong xã hội.
Cũng cần lưu ý rằng, muốn gợi động cơ cho mọi nội dung và mọi hoạt động là
không hợp lý và không khả thi. Trong một tiết học, việc gợi động cơ cần tập
trung vào một số nội dung hoặc hoạt động nhất định mà việc quyết định cần căn
cứ vào những yếu tố sau đây:
- Tầm quan trọng của nội dung hoạt động cần được xem xét.
- Khả năng gợi động cơ ở nội dung đó hoặc hoạt động đó.

- Kiến thức có sẵn và thời gian cần thiết.
Thí dụ : Viết chương trình nhập các điểm của một môn trong một học kỳ. Sau đó
tính điểm trung bình môn của môn học đó theo công thức :

hs1  hs 2 * 2  hs3 * 3
.
l1  l 2 * 2  3

Trong đó :
hs1 : tổng các điểm hệ số 1
l1: số lần điểm hệ số 1
hs2 : tổng các điểm hệ số 2
l2 : số lần điểm hệ số 2
hs3 : Điểm thi học kỳ
Yêu cầu chỉ nhập 3 lần là đủ, tức là các điểm nhập vào cần phải xử lý theo xâu
ký tự sau đó đổi sang số để tính toán.
Đây là một chương trình tính điểm mà học sinh có thể ứng dụng ngay trong
thực tế học tập của mình. Để làm được bài toán này, học sinh cần phải ứng dụng
vấn đề thực tế là cần phải biết cách tính điểm TBm sau đó áp dụng các kiến thức
về chương trình con và kiến thức về xử lý xâu ký tự để áp dụng thực hiện chương
trình. Tuy nhiên chúng ta cũng cần lưu ý khi nhập điểm, điểm hệ số 1 và hệ số 2
là các số nguyên với số lần điểm nhập vào không hạn chế, còn điểm hệ số 3 có
thể là số thực chỉ có một điểm duy nhất. Chính vì vậy cần phải có hai thủ tục
nhập điểm. Hơn nữa, việc nhập điểm cần lưu ý nhất hai trường hợp điểm 10 và
điểm 0 nên chúng ta có thể sử dụng một biến Char để xác định rõ điểm 10 vừa
nhập là điểm 10 hay là hai điểm 0 và 1. Trong công việc tính toán, chúng ta cũng
cần phải có hai hàm: hàm tính tổng các điểm và hàm đếm số lần điểm của mỗi
loại điểm, nếu là các điểm từ 0 đến 9 vấn đề rất đơn giản, nhưng khi có điểm 10
việc đếm số lần điểm cũng như là việc tính tổng các điểm cần phải chia ra thành
hai trường hợp:

+ Trường hợp có điểm 10: Ta xử lí hàm đếm bằng cách nếu gặp ký tự 1 và 0 thì
đếm giữ nguyên, đến số 0 thì tính từ đó. Như vậy, gặp điểm 10 sẽ chỉ đếm là 1.
+ Trường hợp điểm từ 0 đến 9: Đếm bình thường và việc tính tổng cũng vậy,
có điều để tính tổng các phần tử chúng ta cần sử dụng một vòng For duyệt toàn
bộ các phần tử của xâu, với mỗi ký tự ta lại dùng hàm Val để đổi ký tự đó sang số
để tính toán.
Cuối cùng, ta sử dụng hàm Tinh để tính điểm trung bình môn theo các hàm
tính tổng và hàm đếm đã thực hiện như trên.
Chương trình như sau:
Var hs1, hs2 , h3: String; hs3: Real; k: Integer;
Procedure Nhap1(Var st1: String; t1: Byte);
Var a1, c1, i, tam: Integer; ch: Char; t: Char;

29


×