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

SKKN một số kinh nghiệm gợi động cơ hoạt động trong việc giảng dạy chương trình con

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 (406.53 KB, 22 trang )

MỤC LỤC
I. Mở đầu .......................................................................................................2
1.1.Lý do chọn đề tài ............................................................................... 2
1.2. Mục đích nghiên cứu........................................................................... 3
1.3. Đối tượng nghiên cứu.......................................................................... 3
1.4. Phương pháp nghiên cứu..................................................................... 4
II. Nội dung sáng kiến kinh nghiệm ........................................................... 4
2.1. Cơ sở lý luận của vấn đề .................................................................... 4
2.2. Thực trạng của vấn đề trước khi áp dụng sáng kiến kinh nghiệm...... 4
2.3. Giải pháp và tổ chức thực hiện .......................................................... 5
2.3.1 Gợi động cơ mở đầu ................................................................... 5
2.3.2 Gợi động cơ trung gian ............................................................... 13
2.3.3 Gợi động cơ kết thúc ................................................................... 17
2.4. Hiệu quả của đề tài nghiên cứu ......................................................... 19
III . Kết luận và đề xuất……….….……………………………….……… 20
3.1. Kết luận………………….…………..........………………………… 20
3.2. Đề Xuất …………....................……................................................... 20
Tài liệu tham khảo


I. MỞ ĐẦU
1.1. Lý do chọn đề tài.
Trong bối cảnh Công nghệ thông tin ngày càng phát triển, việc sử dụng rộng
rãi máy tính không còn chỉ bó hẹp trong viện nghiên cứu, các trường đại học, các
trung tâm máy tính mà còn mở rộng ra mọi cơ quan, xí nghiệp và nhà máy. Song
song với quá trình trên, việc giảng dạy Tin học trong các trường đại học, trung học
và phổ thông cũng được đẩy mạnh đi đôi với việc tăng cường trang bị máy vi tính.
Chính vì vậy, đối với mỗi giáo viên giảng dạy môn Tin học ở các trường phổ thông,
việc tìm hiểu, nghiên cứu các vấn đề về Tin học, cùng với việc đổi mới các phương
pháp dạy Tin học trong nhà trường phổ thông là một công việc cần phải làm thường
xuyên, liên tục nhằm đáp ứng với sự đòi hỏi ngày càng cao của xã hội.


Trong nghiệp vụ của người giáo viên 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ụ - giáo viên 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 giáo viên, nó đánh giá chất lượng giảng dạy của giáo viên. 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. Giáo viên 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.
Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mới phương
pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinh trong hoạt
động học tập. Điều 24.2 của Luật giáo dục đã nêu rõ : “Phương pháp giáo dục phổ
thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp
với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện
kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui,
hứng thú học tập cho học sinh”. Như vậy, chúng ta có thể thấy định hướng đổi mới
phương pháp dạy học đã được khẳng định, không còn là vấn đề tranh luận. Cốt lõi
của việc đổi mới phương pháp dạy học ở trường phổ thông là giúp học sinh hướng
tới việc học tập chủ động, chống lại thói quen học tập thụ động.
Đổ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.
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 giáo viên 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
2



đó. Điều này được thực hiện trong dạy học không chỉ đơn giản bằng việc nêu rõ mục
tiêu mà quan trọng hơn còn do gợi động cơ.
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. 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 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.
Để thực hiện được điều đó, theo tôi chúng ta cần phải tìm tòi, nghiên cứu tìm
ra những bài toán phù hợp, kích thích được sự độc lập, tích cực của học sinh trong
học tập. Trên cơ sở đó, học sinh có thể tự mình tìm ra được những ý tưởng sáng tạo
vận dụng thiết thực vào cuộc sống thực tế khi nhu cầu nảy sinh, khi đó các em có thể
tự mình hoàn thành được ý tưởng đó.
Với những lý do trên tôi xin trình bày sang kiến “ Một số kinh nghiệm gợi
động cơ hoạt động trong việc giảng dạy chương trình con” nhằm giúp học sinh lớp
11 khắc phục được những hạn chế nêu trên đồng thời yêu thích môn học lập trình
Pascal hơn.
1.2. Mục đích nghiên cứu.
- Nâng cao chất lượng dạy và học môn Tin học trong trường phổ thông, đặc
biệt là dạy học lập trình ở Tin học lớp 11.
- Góp phần đổi mới phương pháp dạy học trong trường phổ thông nói chung
và môn Tin học nói riêng.
- Góp phần khơi dậy lòng đam mê, yêu thích và hứng thú khi học môn Tin học
của học sinh. Đặc biệt là giúp các em nhìn thấy những ứng dụng đơn giản, cụ thể,

gần gũi, thiết thực của lập trình trong môi trường học tập của bản thân.
1.3 Đối tượng nghiên cứu.
Học sinh lớp 11A1, 11A2, 11A3 của trường THPT Lê Lợi năm học 20182019.
1.4 Phương pháp nghiên cứu.
1.4.1. Phương pháp nghiên cứu:
- Tài liệu chuyên môn: Sách Giáo khoa, sách giáo viên Tin học 11, các sách tham
khảo về Lập trình Pascal và tìm hiểu thông tin trên mạng Internet.
1.4.2. Phương pháp thống kê phân tích số liệu:
Thu thập các số liệu, xử lí thống kê và đánh giá.

3


1.4.3. Phương pháp thực nghiệm:
Tiến hành thực nghiệm sư phạm cho các lớp 11A1, 11A2, 11A3 tại trường
THPT Lê Lợi. Kiểm tra đánh giá hiệu quả áp dụng qua hệ thống câu hỏi bài kiểm tra
15 phút và bài kiểm tra thực hành 1 tiết.
II. Nội dung sáng kiến kinh nghiệm
2.1 Cơ sở lý luận của sáng kiến kinh nghiệm.
Gợi động cơ là 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.
Gợi động cơ không phải chỉ là việc làm ngắn ngủi lúc bắt đầu dạy một tri thức

nào đó, mà phải xuyên suốt quá trình dạy học. Vì vậy, có thể phân biệt gợi động cơ
mở đầu, gợi động cơ trung gian và gợi động cơ kết thúc. Trong đề tài này em xin đưa
ra một số giải pháp gợi động cơ hoạt động trong việc giảng dạy chương trình con của
ngôn ngữ lập trình Pascal theo từng giai đoạn như trên.
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm.
- Đa số học sinh đều học theo khối nên phần lớn thời gian các em dành cho
các môn khối, môn Tin học được xem như “môn phụ” nên thường xem nhẹ và không
chú ý học.
- Nhiều học sinh thiếu tính tự giác và động cơ học tập. Hầu hết các em trong
giờ học thường thiếu tập trung, có thái độ rất thụ động và thờ ơ trong việc học. Trên
lớp không chú ý, về nhà lại không học bài cũ nên kiến thức nắm rất hời hợt, càng khó
vận dụng lí thuyết để viết chương trình.
- Ngôn ngữ lập trình Pascal đòi hỏi sự tư duy của người học rất cao mà trong
chương trình tin học mà các em đã phải học. Mức độ tư duy của các em còn hạn chế
và không đồng đều trong một lớp học.
- Kiến thức về toán học, ngoại ngữ còn khiếm khuyết trong nhiều học sinh nên
khó tạo sự đam mê trong khi học từ đó dẫn đến tình trạng học cho qua ngày, học đối
phó.
- Có một số thuật toán các em chưa được học ở bộ môn Toán, thêm vào đó là
các em chỉ sử dụng các câu lệnh bằng Tiếng Anh để thể hiện khi lập trình. Do đó việc
học tập của học sinh vẫn còn mang tính mơ hồ, như bị ép buộc, có nhiều học sinh rất
sợ môn Tin học 11 vì tính chất khô khan, khó hiểu trong môn học.
- Các em hầu như chỉ chú ý trong học kỳ 1, còn sang kỳ 2 và nhất là về cuối kỳ
đã giảm đi sự hứng thú. Trong khi tầm quan trọng của Chương trình con thể hiện ở
4


các đặc trưng như giảm bớt độ phức tạp của bài toán, giảm thời gian lập trình, phục
vụ việc chia nhỏ bài toán, đồng thời Chương trình con cũng giúp người lập trình dễ
sửa chữa, kiểm tra lỗi.

- Số lượng phòng máy ít(1 phòng), số lượng máy hạn chế và đã cũ nên không
thể đáp ứng nhu cầu thực hành cho học sinh trong các tiết thực hành.
Từ thực tế đó tôi không ngừng học hỏi để tìm ra biện pháp khắc phục. Bằng
kinh nghiệm trong những năm qua, tôi đã đưa ra những tóm lược cơ bản nhất của
chương trình con và một số ví dụ mẫu vận dụng để giải quyết có hiệu quả là nhằm
giúp học sinh tiếp thu bài nhanh, nhớ kiến thức lâu hơn và cảm thấy hứng thú trong
học tập.
2.3 Các giải pháp và tổ chức thực hiện
2.3.1.Gợi động cơ mở đầu
Để Gợi động cơ mở đầu chúng ta có thể gợi động cơ xuất phát từ thực tế hoặc
xuất phát từ nội bộ Tin học.
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.
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:

5


a) Đáp ứng nhu cầu xóa bỏ sự hạn chế
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”.
Để 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:
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.

6


b) Hướng tới sự tiện lợi hợp lý hóa công việc
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;
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) Chính xác hóa một khái niệm
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
7


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.
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
8


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.
d) Hướng tới sự hoàn chỉnh hệ thống
Để 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

Không Có tham chiếu

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á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ì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ụ 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 đó”.
9


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.

10


e) Lật ngược vấn đề
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”.
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
11


Write('Nhap xau: '); Readln(x);
Doi(x);
Readln
End.
f) Khái quát hóa
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, Chúng 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,') = ');
12


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]);
Write(u); Writeln;
Readln
End.
2.3.2. Gợi động cơ trung gian
a) Hướng đích

13


Xuất phát từ bài toán giải phương trình bậc hai ta có 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.
b) Quy lạ về quen
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

14



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.
c) Xét tương tự
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
15


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”
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.

d) Khái quát hóa
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);
16


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ứ 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.
2.3.3. Gợi động cơ kết thúc
Gợi độ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.
Trong thực tế của hoạt động dạy học, nhiều khi ngay từ đầu hoặc trong khi giải
quyết vấn đề, ta chưa thể làm rõ tại sao lại học nội dung này, tại sao lại thực hiện
hoạt động kia. Những câu hỏi này phải đợi mãi về sau mới được giải đáp hoặc giải
đáp trọn vẹn. Như vậy, ta đã gợi động cơ kết thúc, nhấn mạnh hiệu quả của nội dung
hoặc hoạt động đó với việc giải quyết vấn đề đặt ra.
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;
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);
17


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
Ktra := (x < y + z) And (y < x + z) And (z < x + y);
End;
Procedure Nhap(Var a, b, c: Real; k: Byte);
18


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.
2.4. Hiệu quả của đề tài nghiên cứu
Sau khi áp dụng đề tài nghiên cứu trong các năm giảng dạy với các giải pháp
đã nêu tôi đã thu được kết quả:
- Hầu hết các em đã biết cách giải bài toán có sử dụng chương trình con theo
chuẩn kiến thức, kỹ năng. Hiểu rõ về bản chất của chương trình con đặc biệt là các
bài toán điển hình như trong sách giáo khoa và sách bài tập, các em biết vận dụng
linh hoạt viết được chương trình cho các bài toán tôi đã đưa ra ở mức độ tương tự và
nâng cao hơn.
- Bản thân tôi đã có thêm nhiều kinh nghiệm và kỹ năng để giảng dạy và truyền
đạt cho các em những bài học bổ ích và lý thú. Được các đồng nghiệp ủng hộ.
19


- Tôi đã khảo sát lại kỹ năng của các em sau khi được áp dụng giải pháp của đề

tài sáng kiến này trong năm học 2018 – 2019 qua bài kiểm tra thực hành 45 phút ở
các lớp như sau:
Đề bài: Viết chương trình nhập vào từ bàn phím số nguyên dương N và dãy a1,
a2,...,aN.. In ra màn hình các số hoàn hảo có trong dãy a.
Đa phần các em đã làm rất tốt, thành thạo, tỷ lệ học sinh viết hoàn thiện
chương trình tăng lên nhiều so với năm trước ở cả lớp mũi nhọn và lớp đại trà.
Lớp

Số HS

Viết hoàn thiện chương trình

Chưa hoàn thiện chương trình

Số lượng
%
Số lượng
%
11A1 43
35
81,4
8
18,6
11A2 42
30
71,4
12
28,6
11A3 45
35

78
10
22
III . KẾT LUẬN VÀ ĐỀ XUẤT
3.1 Kết luận.
Qua việc tìm hiểu lộ trình đổi mới giáo dục của Bộ giáo dục và Đào tạo Việt
Nam và việc đổi mới phương pháp dạy học môn Tin học trường Trung học phổ thông
Lê Lợi, tôi đã đưa ra một số biện pháp để ứng dụng trong việc dạy tốt môn Tin học
nhằm khích lệ học sinh yêu thích hơn môn Tin học. Đặc biệt dạy học lập trình là một
trong những phần khó và không ít giáo viên trong trường tôi, cũng như một số giáo
viên ở trường khác đều gặp phải không ít những khó khăn. Chính vì vậy trong sáng
kiến kinh nghiệm này, tôi muốn đưa ra một cách tiếp cận môn Tin học một cách tự
nhiên dựa vào sự yêu thích say mê sẵn có từ các môn học khác trong mỗi em học
sinh.
Đề tài này mang tính thực tiễn rất cao cụ thể là: trong tiết học các em học sinh
đã chủ động để tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo
viên đặt ra. Trong quá trình giải quyết vấn đề, giáo viên chỉ ra những sai lầm mà các
em học sinh mắc phải từ đó các em hiểu rõ hơn về các câu lệnh trong ngôn ngữ lập
trình.
3.2. Đề xuất
Nhà trường cần có sự đầu tư nâng cấp thêm cho phòng máy thực hành của học
sinh, bổ xung thêm tài liệu, tranh minh hoạ, mô hình dạy học lập trình trong nhà
trường, để các em có thêm tài liệu tham khảo, giáo viên nghiên cứu bài dạy.
Đề tài sáng kiến trên tôi đã áp dụng cho kết quả rất khả quan trong công tác
giảng dạy của mình, tuy nhiên sáng kiến này không thể tránh khỏi những thiếu sót,
hạn chế của cá nhân tôi. Vậy tôi kính mong nhận được sự đóng góp của các quý đồng
nghiệp, những người quan tâm nội dung này để sáng kiến hoàn thiện hơn.
Trên đây là toàn bộ nội dung của bản sáng kiến kinh nghiệm về việc gợi động
cơ hoạt động trong dạy học chương trình con, tôi đã thực hiện trong năm học 2018 –
2019. Trong quá trình thực hiện không thể tránh khỏi những thiếu sót, vậy tôi rất

20


mong được sự đóng góp ý kiến của quý thầy cô giáo và đồng nghiệp để bản sáng
kiến của tôi được hoàn thiện hơn.
XÁC NHẬN CỦA THỦ
TRƯỞNG ĐƠN VỊ

Thọ Xuân, ngày 20 tháng 5 năm 2019
Tôi xin cam đoan đây là SKKN của
mình viết, không sao chép nội dung của
người khác.

Nguyễn Thị Trang

21


TÀI LIỆU THAM KHẢO
1. Sách Giáo khoa Tin Học 11 – Hồ Sĩ Đàm
2. Sách Giáo viên Tin Học 11 – Hồ Sĩ Đàm
3. Nguồn: />4. Nguồn:

22



×