MỤC LỤC
A. PHẦN MỞ ĐẦU....................................................................................................................2
I. Lý do chọn đề tài.................................................................................................................2
II. Định hướng nghiên cứu.................................................................................................... 3
1. Mục đích nghiên cứu......................................................................................................3
2. Nhiệm vụ nghiên cứu......................................................................................................3
B. NỘI DUNG.............................................................................................................................4
I. Cơ sở lý luận....................................................................................................................... 4
1. Nghiên cứu lý luận........................................................................................................ 4
2. Quan sát - điều tra...........................................................................................................4
3. Tổng kết kinh nghiệm..................................................................................................... 4
II. Cơ sở thực tiễn:................................................................................................................. 4
1. Thuận lợi:........................................................................................................................ 4
2. Khó khăn:........................................................................................................................5
III. Nội dung đề tài gợi động cơ hoạt động trong việc giảng dạy chương trình con.......5
1. Gợi động cơ mở đầu:..................................................................................................... 6
a. Đáp ứng nhu cầu xóa bỏ sự hạn chế........................................................................ 6
b. Hướng tới sự tiện lợi hợp lý hóa công việc..............................................................8
c. Chính xác hóa một khái niệm................................................................................... 9
d. Hướng tới sự hoàn chỉnh hệ thống.........................................................................10
e. Lật ngược vấn đề...................................................................................................... 12
f. Xét tương tự...............................................................................................................13
g. Khái quát hóa...........................................................................................................14
h. Tìm sự liên hệ và phụ thuộc....................................................................................16
2. Gợi động cơ trung gian................................................................................................17
a. Hướng đích................................................................................................................17
b. Quy lạ về quen..........................................................................................................19
c. Xét tương tự.............................................................................................................. 20
d. Khái quát hóa...........................................................................................................21
e. Xét sự biến thiên và phụ thuộc............................................................................... 22
3. Gợi động cơ kết thúc....................................................................................................23
C. KẾT LUẬN.......................................................................................................................... 29
D. KIẾN NGHỊ………………………………………………………………………………31
Trang 1
ĐỀ TÀI: GỢI ĐỘNG CƠ HOẠT ĐỘNG TRONG VIỆC GIẢNG DẠY CHƯƠNG
TRÌNH CON
A. PHẦN MỞ ĐẦU
I. 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 tìm các biện pháp giảng
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, 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 cơ bản. Thứ hai là thực tiễn về nghiệp vụ - 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. Chính vì vậy để có thể phát huy khả năng nghiệp vụ,
giáo viên cần phải biết kích thích tính tích cực, sáng tạo say mê học hỏi của
học sinh trong việc học tập giúp học sinh 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 đó. Điều này chính là gợi động cơ trong dạy học.
-
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ý, 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. Đặ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.
Trang 2
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.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.
-
Với tất cả những lý do nêu trên, tôi
quyết định chọn đề tài này.
II. Định hướng nghiên cứu
1. 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ể 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ụ nghiên cứu
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.
Trang 3
B. NỘI DUNG
I. Cơ sở lý luận
1. Nghiên cứu lý luận
Trong nghiên cứu lý luận 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. Bên cạnh đó cũng nghiên cứu 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.
2. Quan sát - điều tra
Quan sát - điều tra giúp 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. 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
và môi trường tự nhiên là nguồn cung cấp dữ liệu trực tiếp. Người nghiên cứu
đến trực tiếp một nơi nào đó mà họ quan tâm 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.
3. Tổng kết kinh nghiệm
Tổng kết kinh nghiệm 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.
II. Cơ sở thực tiễn:
* Một số thuận lợi và khó khăn khi thực hiện chuyên đề:
1. Thuận lợi:
Nhà trường:
Tuy môn Tin học mới chỉ là môn học
mới được đưa vào học trong những năm gần đây nhưng nhà trường đã
tạo điều kiện để học sinh có thể học từ khối lớp 10, tạo điều kiện sắm
sửa máy móc, trang thiết bị phục vụ cho việc dạy và học môn Tin học.
Trang 4
-
Giáo viên:
Giáo viên được đào tạo chuẩn chuyên
ngành về Tin học để đáp ứng yêu cầu cho dạy và học môn Tin học trong
bậc THPT.
-
Phần lớn giáo viên quan tâm đến Tin
học, quan tâm đến lập trình và tạo được động cơ hứng thú cho học sinh
qua từng đoạn chương trình, cho học sinh thấy được tầm quan trọng
trong lập trình nhất là các em học sinh khối 11 được học môn học lý thú
là lập trình pascal.
2. Khó khăn:
Do chương trình tin học những năm gần
đây mới được đưa vào trong trường THPT nên còn nhiều bỡ ngỡ và mới
mẽ, giáo viên chưa sẵn sàng trang bị cho mình kiến thức thật tốt để
truyền đạt những kiến thức tốt nhất về bộ môn tin học đến cho học sinh
đặc biệt trong lập trình pascal nên việc truyền đạt kiến thức đến cho học
sinh còn nhiều bỡ ngỡ.
-
Nhà trường còn nhiều khó khăn nên
chưa đáp ứng được phòng dạy thực hành tốt nhất nên việc thực hành học
sinh trong các giờ học lập trình pascal còn khó khăn.
III. Nội dung đề tài gợi động cơ hoạt động trong việc giảng dạy chương trình
con
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, giáo viên 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 tôi xin đưa ra một số giải pháp gợi
Trang 5
độ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.
1. Gợi động cơ mở đầu:
Để Gợi động cơ mở đầu 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, 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:
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
Trang 6
+ 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, 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, 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.
Trang 7
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.
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:');
Trang 8
For k := 1 to n do
If NgTo(A[k]) Then Write(A[k]:6);
Readln
End.
Từ chương trình trên 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 thời điểm nào đó có đủ điều kiện
thì 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ị, 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
Trang 9
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
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
tatục
có thể đưa ra Không
sơ đồ sau:
Thủ
Có tham chiếu
Chương trình con
Tham trị
Hàm
Có tham chiếu
Tham biến
Trang 10
-
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 đó”.
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
Trang 11
End.
e. Lật ngược vấn đề
Xuất phát, 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, 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);
Trang 12
Readln
End.
f. Xét tương tự
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 đó”.
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);
Trang 13
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:');
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.
g. 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;
Trang 14
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
Trang 15
UCLN(u, a[i]);
Write(u); Writeln;
Readln
End.
h. Tìm sự liên hệ và phụ thuộc
Nói riêng đối với cách gợi động cơ xuất
phát từ những phương thức tư duy và hoạt động phổ biến trong Tin học như
xét tương tự, khái quát hóa, xét sự liên hệ và phụ thuộc, sự quen thuộc đối với
phương thức này không chỉ là kết quả mà còn là điều kiện của việc gợi động
cơ theo cách đó. 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;
Trang 16
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;
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.
2. Gợi động cơ trung gian
a. 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);
Trang 17
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('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
Trang 18
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!')
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.
b. Quy lạ về quen
Trang 19
k
Xét bài toán : Tính C n . 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à
k
tính n! Ở đây chúng ta cần lưu ý với học sinh rằng: Để tính C n ta cần xây dựng
k
chương trình con tính n! sau đó, 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
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);
Trang 20
- Xem thêm -