Tải bản đầy đủ (.docx) (41 trang)

Mot so bien phap tao hung thu hoc tap cho hoc sinh khi hoc noi dung chuong trinh con mon tin hoc 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 (168.13 KB, 41 trang )

THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

MỤC LỤC
MỤC LỤC............................................................................................................1

I. ĐẶT VẤN ĐỀ......................................................................................... 2
1. Lý do chọn đề tài ........................................................................................2
2. Mục đích nghiên cứu ..................................................................................3
3. Đối tượng nghiên cứu..................................................................................4
4. Phạm vi nghiên cứu ....................................................................................4
5. Phương pháp nghiên cứu ............................................................................4

II. PHẦN NỘI DUNG................................................................................ 5
1. Cơ sở lý luận ..............................................................................................5
2. Cơ sở thực tiễn ...........................................................................................5
3. Một số biện pháp ........................................................................................6

3.1) Tạo động cơ mở đầu.............................................................................6
3.2) Tạo động cơ trung gian......................................................................21
3.2.1)Hướng đích.......................................................................................21
3.2.2)Quy lạ về quen.................................................................................25
3.3) Động cơ kết thúc................................................................................29
3.4) Phối hợp nhiều cách để tạo động cơ học tập cho học sinh................33

III. PHẦN KẾT LUẬN............................................................................ 38
1. Kết quả thu được.......................................................................................38
2. Kết luận.....................................................................................................40

TÀI LIỆU THAM KHẢO..............................................................................41



I. ĐẶT VẤN ĐỀ
1


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

1.Lý do chọn đề tài :
Đổ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, là một
giáo viên giảng dạy bộ môn Tin học, theo tôi 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 bài toán,
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 nội dung 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
2


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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 dạy về chương trình con như thế nào? Đó chính là vấn đề mà bản thân tôi
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.
Xuất phát từ cơ sở trên, tôi đã chọn đề tài:

“Một số biện pháp tạo hứng thú học tập cho học sinh khi học nội dung
chương trình con môn Tin học 11”.
2. Mục đích nghiên cứu:
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ể vận
dụng sáng tạo để giải quyết các bài toán lập trình và xử lí các tình huống thực tế.
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.

3


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

3.Đối tượng nghiên cứu:
- Học sinh lớp 11 trường THPT Cao Bá Quát năm học 2019 - 2020.
- Sử dụng một số ví dụ và các bài học.
4. Phạm vi nghiên cứu:
Ngôn ngữ lập trình Turbo Pascal nói riêng là rất nhiều, rất phong phú. Tuy
nhiên trong phạm vi sáng kiến kinh nghiệm này tôi chỉ trình bày một số biện
pháp tạo hứng thú để nâng cao kết quả học tập cho học sinh khi học nội dung
chương trình con, kinh nghiệm của cá nhân tôi qua các nội dung cụ thể sau:
- Tạo động cơ mở đầu
- Tạo động cơ trung gian
- Tạo động cơ kết thúc
- Phối hợp nhiều cách để tạo động cơ học tập cho học sinh.

5. Phương pháp nghiên cứu:
- Kết hợp thực tiễn giáo dục ở trường THPT Cao Bá Quát.
- Đọc kỹ sách giáo khoa, sách giáo viên Tin học 11, tài liệu về sáng kiến
kinh nghiệm và một số tài liệu tham khảo khác.
- Tích lũy các kiến thức từ nhiều năm giảng dạy .
- Điều tra thực tế, đánh giá kết quả của học sinh trước và sau khi thực hiện
đề tài, phân tích tìm nguyên nhân rồi từ đó đưa ra giải pháp.

4


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

II. PHẦN NỘI DUNG
1.Cơ sở lí luận:
Pascal là một ngôn ngữ lập trình cấp cao do Niklaus Wirth, giáo sư điện
toán trường đại học Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1971
và đặt tên là Pascal để tưởng niệm nhà Toán học và Triết học nổi tiếng Blaise
Pascal. Đây là một ngôn ngữ lập trình có cấu trúc đơn giản, rõ ràng, cấu trúc
chặt chẽ, dễ viết, dễ hiểu cũng như dễ sửa chữa, cải tiến. Do đó Pascal được
nhiều quốc gia trong đó có Việt Nam đưa vào chương trình giảng dạy tin học ở
các trường phổ thông và đại học như một môn học cơ sở, đại cương.
Ở trường phổ thông chúng ta không chú trọng học chuyên sâu về ngôn
ngữ lập trình để tạo ra các phần mềm máy tính mà tập trung rèn luyện kĩ năng tư
duy logic, tư duy hệ thống và sáng tạo không chỉ để giải quyết những vấn đề
trong tin học mà đây còn là những kĩ năng vô cùng quan trọng để giải quyết
nhiều vấn đề trong cuộc sống.
Học Pascal giúp cho ta hiểu được cách làm việc của máy tính, cách giao

tiếp để ra lệnh cho máy tính làm việc theo sự điều khiển của con người thông
qua ngôn ngữ lập trình. Các em có thể tạo ra các chương trình thú vị bằng cách
sử dụng các câu lệnh Pascal. Cũng giống như những môn học khác như toán
học, vật lý, hóa học … khi các em đã thực sự hiểu và yêu thích bộ môn tin học
các em sẽ tìm thấy nhiều niềm vui, sự đam mê khi tìm hiểu và khám phá những
điều mới mẻ nhưng đầy hấp dẫn trong bộ môn tưởng chừng như khô khan này.
2.Cơ sở thực tiễn:
Qua một thời gian giảng dạy ở trường, tôi nhận thấy khi học Pascal học
sinh thường không thích thú với môn học này vì nhiều lý do như khó hiểu, tiếp
thu chậm, đòi hỏi tư duy nhiều, … nên việc viết được một chương trình chạy
được trên máy tính đối với các em rất khó khăn. Do đó để học tốt đòi hỏi học
sinh phải có hứng thú. Cốt lõi của việc đổi mới phương pháp dạy học là giúp
học sinh yêu thích, hứng thú với môn học, hướng tới việc học tập chủ động,
5


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

chống lại thói quen học tập thụ động. Để tạo cho các em một niềm hứng khởi
với môn học tôi đưa ra một số biện pháp tạo hứng thú học tập cho học sinh khi
học nội dung chương trình con môn Tin học 11.
3. Một số biện pháp.
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 ngày càng cao,
những cách gợi động cơ xuất phát từ nội dung hướng vào 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 của học sinh ngày càng trở
nên quan trọng.
3.1) Tạo động cơ mở đầu.
Việc xuất phát từ thực tế có tác dụng gợi động cơ cho học sinh nhận thức
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ổ sung.
+ 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.
6


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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 học, 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
- 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;
7


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11


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

8


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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:
+ Thủ tục nhập hai cạnh của hình chữ nhật.
+ Thủ tục Tính ba giá trị cho mỗi hình.
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.

9


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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ó 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:',2 * pi * r1:6:1,' Dien tich : ',pi * sqr(r1):6:1);
Writeln('Duong tron 2 Chu vi:',2 * pi * r2:6:1,' Dien tich:',pi * sqr(r2):6:1);
Writeln('Duong tron 3 Chu vi :',2 * pi * r3:6:1,' Dien tich :',pi * sqr(r3):6:1);
10


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

Readln;
End.
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 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:',2 * pi * r1:6:1,' Dien tich: ',pi * sqr(r1):6:1);
Writeln('Duong tron 2 Chu vi:',2 * pi * r2:6:1,' Dien tich :',pi * sqr(r2):6:1);
Writeln('Duong tron 3 Chu vi:',2 * pi * r3:6:1,' Dien tich:',pi * sqr(r3):6:1);
11


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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:
Không Có tham chiếu

Thủ tục
Chương trình
con

Tham trị
Hàm

Có tham chiếu
Tham biến

Tiếp theo, để giúp cho học sinh nhìn thấy vấn đề có hệ thống một cách 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ình
con. Chẳng 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 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ụ như sau:
Ví dụ: “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,': ');
12


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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;
13


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

Begin
Tinh;
Readln
End.
+ Xuất phát, chúng ta cho học sinh thực hiện bài toán sau:
Bài toán 1: “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 đó”.
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));
14


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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:
Bài toán 2: “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
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:');
15


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

Until Ktra(a, b, c);
End;
Procedure Trung_Tuyen;
Begin
Writeln('Tt qua canh ',a:0:2,' la: ',0.5 * sqrt(2 * (b * b + c * c) - a * a):0:2);
Writeln('Tt qua canh ',b:0:2,' la: ',0.5 * sqrt(2 * (a * a + c * c) - b * b):0:2);
Writeln('Tt 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 sau:
Bài toán 3: “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);
16


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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;
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:
17


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

“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, UCLN của dãy 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


THPT Cao Bá Quát


Sáng kiến kinh nghiệm môn Tin học 11

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:
Bài toán 4: “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;

19


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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
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;
20


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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.
3.2) Động cơ trung gian
3.2.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('Pt co nghiem kep: x1 = x2 = ',-b / (2 * a):0:1)
Else
21


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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;
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('Pt co nghiem kep: x1 = x2 = ',-y / (2 * x):0:1)
22


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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
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!')
23


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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:');
24


THPT Cao Bá Quát

Sáng kiến kinh nghiệm môn Tin học 11

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.
3.2.2) Quy lạ về quen
k
n

Xét bài toán : Tính C . Học sinh đã biết công thức :

C nk =

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
k
ý với học sinh rằng: Để tính C n ta cần xây dựng chương trình con tính n! sau
k
đó, ta tìm C n 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
25


×