Một số biện pháp rèn luyện kỹ năng giải bài toán truy hồi bằng cấu trúc lặp trong pascal - Pdf 25


Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
A. ĐẶT VẤN ĐỀ
I. Lời mở đầu :
Sự phát triển mạnh mẽ của công nghệ thông tin đã làm cho xã hội có
nhiều nhận thức mới về cách tổ chức các hoạt động. Nhiều quốc gia trên thế giới
ý thức được rất rõ tầm quan trọng của tin học và có những đầu tư lớn cho lĩnh
vực này, đặc biệt trong giáo dục nhằm nâng cao dân trí về tin học và đào tạo
nguồn nhân lực có chất lượng cao.
Người Việt Nam có nhiều tố chất thích hợp với ngành khoa học này, vì thế
chúng ta hi vọng có thể sớm hoà nhập với khu vực và trên thế giới về tốc độ phát
triển nền công nghệ thông tin. Đảng, Nhà nước ta đã nhận thấy được tầm quan trọng
của ngành Tin học và đã đưa môn học này vào nhà trường phổ thông như những
môn khoa học khác bắt đầu từ năm học 2006-2007. Bộ trưởng Bộ GDĐT cũng đã
đưa ra chỉ thị số 55/2008/CT- BGTĐT ngày 30/9/2008 về tăng cường giảng dạy, đào
tạo và ứng dụng công nghệ thông tin trong ngành giáo dục giai đoạn 2008-2011.
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. 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, học sinh có thể tự học,
tự rèn luyện thông qua một số bài tập, dạng bài tập cụ thể.
II. Thực trạng của vấn đề nghiên cứu :
1. Thực trạng :
Tin học là một môn học mới ở các trường phổ thông nên học sinh còn
nhiều bỡ ngỡ khi tiếp cận với môn học này. Trong đó nội dung tin học lớp 11 là
một nội dung tương đối khó với đa số học sinh. Việc học ngôn ngữ lập trình
Turbo Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao. Học sinh
được làm quen với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu qua đó giúp các
em hình dung được sự ra đời, cấu trúc, hoạt động cũng như ích lợi của các
chương trình hoạt động trong máy tính, các máy tự động… Và để làm được việc
1

sử dụng cấu trúc lặp trong Pascal để giải một số bài toán truy hồi cho học
sinh lớp 11”.
2

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
B. GIẢI QUYẾT VẤN ĐỀ
I. Bài toán truy hồi và cấu trúc lặp :
1. Bài toán truy hồi :
Trong khoa học tính toán ngày nay, phép truy hồi là thuật toán cơ bản để
giải một số bài toán. Ưu điểm của phương pháp truy hồi là ở chỗ nó dùng một
công thức nhất định để diễn tả những phép tính lặp đi lặp lại bất chấp số lần lặp
lại là bao nhiêu. Chẳng hạn với bài toán cấp số cộng là một ví dụ :
Cho
0
1
U
( n 1)
n n
a
U U d

=


= + ∀ ≥

với a là một số cho trước và d là hằng số
cố định (công sai).
- Nếu n là biết trước thì việc xác định số U
n

until <điều kiện>;
II. Sử dụng cấu trúc lặp để giải bài toán truy hồi :
1. Sử dụng cấu trúc For … To Do
* Cấu trúc:
for <biến đếm>:= <biểu thức 1> to <biểu thức 2> do <câu lệnh>;
* Trong đó:
- for, to, do là các từ khoá.
- <biến đếm> là một biến có kiểu đếm được (nguyên, kí tự, liệt kê, logic…)
- <biểu thức 1>, <biểu thức 2> là các biểu thức có giá trị cùng kiểu với <biến đếm>
- <câu lệnh> là một câu lệnh, có thể là câu lệnh đơn hoặc câu lệnh phức.
* Hoạt động:
Câu lệnh viết sau từ khóa do sẽ được thực hiện tuần tự, với biến đếm lần lượt
nhận các giá trị liên tiếp tăng từ giá trị đầu đến giá trị cuối, nếu giá trị đầu lớn
hơn giá trị cuối thì vòng lặp không được thực hiện.
Ví dụ 1: Với a là số nguyên và a > 2, tính tổng:

1 1 1 1

1 2 100
S
a a a a
= + + + +
+ + +
(SGK Tin học 11 – Trang 42)
Phân tích:
Với bài toán trên dễ thấy ta có công thức truy hồi để tính giá trị S như sau:
0
1
S
a

end.
Ví dụ 2: Lập trình tính giai thừa của một số nguyên n (do giới hạn lưu trữ số
nguyên cho n<8).
Phân tích:
Giai thừa của n: n! = 1.2…n (tích các số tự nhiên từ 1 đến n). Không có
công thức tổng quát để tính n! nhưng ta có công thức truy hồi sau:



=
=
)!1n.(n-n!
1!0
Đặt g
n
=n!, theo công thức trên ta có:
0
n n-1
g =1
g =g .n



5

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
Như vậy ta có chương trình tính giai thừa như sau:
program Vidu_2;
var n, i, g : integer;
begin

ứng với mỗi giá trị của i, do đó ta có thể viết f0:= f1+f2 theo công thức truy hồi;
sau đó f1 và f2 được thay đổi giá trị để tính phần tử tiếp theo.
Toàn văn chương trình:
program Vidu_3;
var
i, f0, f1, f2 : integer;
begin
writeln('Chuong trinh tinh cac so Fibonaxi tu 1 den 20 ');
f1 := 1; f2 := 1;
6

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
writeln('F1 = 1');
writeln('F2 = 1');
for i := 3 to 20 do
begin
f0 := f1 + f2;
writeln('F',i,' = ',f0);
f1 := f2;
f2 := f0;
end;
readln;
end.
2. Sử dụng cấu trúc for downto do
* Cấu trúc:
for <biến đếm>:= <biểu thức 1> downto <biểu thức 2> do <câu lệnh>;
* Trong đó:
- for, downto, do là các từ khoá.
- <biến đếm> là một biến có kiểu đếm được (nguyên, kí tự, liệt kê, logic…)
- <biểu thức 1>, <biểu thức 2> là các biểu thức có giá trị cùng kiểu với <biến đếm>

n
Y Y
n

= +
+

Với n từ 50 giảm dần về 1
Việc cộng vào tổng Y được lặp lại 50 lần, giá trị n khi tham gia vòng
lặp là 50 và sau mỗi lần lặp n giảm đi 1 cho đến khi n =1 thì dừng. Như vậy số
lần lặp là biết trước, biến n được sử dụng là một biến đếm giảm từ 50 về 1, tổng
cần tính là Y
0

Ta viết chương trình như sau:
program vidu_4;
var Y: real;
n : integer;
begin
clrscr;
Y := 0;
for n := 50 downto 1 do
Y := Y + n/(n+1);
writeln('Tong Y la: ',Y:10:4);
readln;
end.
Tuy nhiên trong một số trường hợp thì chỉ có thể dùng một cấu trúc, đặc biệt
là khi tính các công thức truy hồi. Ta xét một ví dụ dùng for … downto … do
thích hợp hơn:
Ví dụ 5:

1
. Công thức truy hồi là truy hồi ngược (vì tính si qua s
i+1
)
nên dùng for … down … to là thích hợp nhất. Có thể viết đoạn chương trình
tính như sau:
s:=0;
for i := n downto 1 do
s := sqrt (2 * i + s);
Ta có thể viết chương trình như sau:
program Vidu_5;
var
i,n : integer;
s : real;
begin
write('Nhap mot so tu nhien n = ');
readln(n);
s:=0;
for i := n downto 1 do
s := sqrt (2 * i + s);
writeln('Ket qua can tinh: s = ',s:10:5);
readln;
end.
9

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
3. Sử dụng cấu trúc While … do…
* Cấu trúc:
While <điều kiện> do <câu lệnh>;
* Trong đó:

= + + + + +
+

n
1
r =
2n+1
(n là một số tự
nhiên bắt đầu bằng 0)
Ta có:
0
n n-1 n
s =0
s =s +r



và S
n
≈ S khi r
n
<= 10
-4
.
Quá trình tính là một quá trình lặp cho đến khi điều kiện dừng xảy ra.
Toàn bộ chương trình:
program vidu_6;
var
s,r : real;
n : integer;

Đặt:
n
2 2 2
1 1 1
s 1
2 3 n
= + + + + +

n
2
1
r =
n
(n là số tự nhiên bắt đầu từ 1)
Ta có:
0
n n-1 n
s =0
s =s +r



và S
n
≈ S khi r
n
<= 10
-6
.
Quá trình tính là một quá trình lặp cho đến khi điều kiện dừng xảy ra.

s s s *0.017
=


= +

(dân số năm sau bằng dân số năm trước cộng
thêm lượng tăng tự nhiên).
Như vậy n là số năm cần tìm nếu n là số tự nhiên bé nhất thoả mãn S
n
≥100.
Ta thấy rằng để tính trực tiếp n thì không dễ dàng nhưng chúng ta có thể sử
dụng phương pháp lặp. Nghĩa là chúng ta tăng dần n (với n bắt đầu từ 0) và tính
S
n
theo công thức trên cho đến khi S
n
>100 thì dừng.
* Toàn văn chương trình:
program Vidu_8;
var
n : integer;
s : real;
Begin
n := 0;
s := 75;
while s<=100 do
begin
n := n + 1;
s := s + s*0.017;

n
1 1 1
s 1
2 3 n
= + + + +

n
1
r
n
=
Ta có:
0
n n-1
s 0
s s
n
r
=


= +

đến khi S > a thì dừng.
Quá trình tính là một quá trình lặp cho đến khi điều kiện dừng xảy ra.
* Toàn bộ chương trình:
Program vidu_9;
Uses crt;
Var a, S : real;
n: longint;

.
Phân tích:
Đặt:
2 3 n
n
x x x
=1+x+ + + + +
2! 3! n!
s

n
n
x
r
n!
=
Ta có:
0
n n-1
s 1
s s
n
r
=


= +


S≈

var s, r : real;
n ,x : integer;
begin
14

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
writeln('Chuong trinh tinh gan dung ham e mu ',x);
s := 1; n := 1; r:= 1;
Repeat
r :=r * x/n; s := s + r; n := n + 1;
until r<=2*(1E-6)
writeln('Tong can tinh voi do chinh xac 1E-6 la S = ',s :10:6);
readln;
end.
5. Bài tập tham khảo
Bài tập 1: 1: Tính tổng
n
cos1 cos1+cos2 cos1+cos2+ cosn
= + + +
sin1 sin1+sin2 sin1+sin2+ sinn
T
với số n là
số nguyên nhập từ bàn phím.
Bài tập 2: Tính các giá trị biểu thức sau với số n tự nhiên nhập từ bàn phím:
1 2 2 3 4 1 2S . . . n(n ) ( n)
= + + +
Bài tập 3: Viết chương trình nhập số thực x, tính các giá trị sau với độ chính xác
của số hạng cuối cùng là 10
-6
:

suất 0.3% mỗi tháng. Hỏi sau bao nhiêu tháng, người đó rút hết tiền thì sẽ nhận
được số tiền ít nhất là B đồng? Biết rằng việc gửi tiết kiệm không kì hạn thì lãi
suất không được cộng vào vốn.
15

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
III. Kết quả và kiến nghị đề xuất :
1. Kết quả nghiên cứu :
Trong năm học 2012-2013 tôi đã ứng dụng đề tài nghiên cứu của mình đối
với một số lớp khối 11 ở trường THPT Hậu Lộc 4 và đã tổng hợp số liệu về kết
quả đạt được của học sinh về kĩ năng sử dụng cấu trúc lặp khi giải các bài toán
truy hồi như sau:
STT Lớp Sĩ số Đạt yêu cầu Không đạt yêu cầu
1 11A1 45 85% 15%
2 11A5 46 92% 7%
3 11A8 48 95% 5%
Như vậy, việc rèn luyện cho học sinh kĩ năng sử dụng cấu trúc lặp vào
dạng bài toán thường gặp là bài toán truy hồi giúp học sinh có tiến bộ rõ rệt khi
viết các chương trình có sử dụng cấu trúc lặp. Đồng thời nâng cao việc yêu thích
học tin học đối với một bộ phận học sinh, trong đó có một số em có khả năng
tìm hiểu sâu hơn về các dạng bài toán lập trình.
2. Kiến nghị, đề xuất :
Sau khi thực hiện đề tài này tôi xin mạnh dạn đưa ra một số đề xuất như sau :
- Để học sinh thực sự hiểu rõ các loại cấu trúc lặp trong lập trình mà cụ thể
đối với học sinh lớp 11 là ngôn ngữ lập trình Pascal thì cần tăng cường hơn nữa
lượng thời gian trong phân phối chương trình để học sinh rèn luyện các dạng bài
tập về cấu trúc lặp, giúp học sinh nắm chắc cú pháp, cách sử dụng cấu trúc này.
- Giáo viên cần đưa ra các bài tập để phù hợp với từng đối tượng học sinh,
với mỗi loại cấu trúc lặp nên đưa ra bài có tính đặc trưng để học sinh ghi nhớ
được cách sử dụng và cú pháp của cấu trúc lặp.

NguyÔn ThÞ Hßa
MỤC LỤC
17

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
Trang
A. ĐẶT VẤN ĐỀ 1
I. Lời mở đầu 1
II. Thực trạng của vấn đề nghiên cứu 1
1. Thực trạng 1
2. Kết quả của thực trạng trên 2
B. GIẢI QUYẾT VẤN ĐỀ : 3
I. Bài toán truy hồi và cấu trúc lặp 3
1. Bài toán truy hồi 3
2. Cấu trúc lặp trong Pascal 3
II. Sử dụng cấu trúc lặp để giải bài toán truy hồi : 4
1. Sử dụng cấu trúc For … to do 4
2. Sử dụng cấu trúc For downto do 7
3. Sử dụng cấu trúc While … do… 9
4. Sử dụng cấu trúc lặp Repeat … Until… 13
5. Bài tập tham khảo 15
III. Kết quả và kiến nghị đề xuất : 16
1. Kết quả nghiên cứu 16
2. Kiến nghị, đề xuất 16
C. KẾT LUẬN 17
18

Gi¸o viªn: NguyÔn ThÞ Hßa – Trêng THPT HËu Léc 4 – Thanh Hãa
DANH MỤC TÀI LIỆU THAM KHẢO
1) Hội Tin học Việt Nam - Tạp chí “Tin học và nhà trường”


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status