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

Hình thành kỹ năng cho học sinh vận dụng đúng từng loại cấu trúc lặp vào bài toán tin 11 THPT

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 (194.32 KB, 24 trang )

“Hình thành kỹ năng cho học sinh vận dụng đúng từng loại cấu trúc lặp
vào bài toán tin 11THPT”
A- MỞ ĐẦU
1. Lí do chọn đề tài
Trong thời đại thông tin bùng nổ như ngày nay, việc lập được các
chương trình tự hoạt động cho máy tính, máy gia dụng là rất cần thiết. Để
làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập
trình lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích
hợp. Tuy nhiên mọi thứ đều có điểm khởi đầu của nó, với học sinh việc
học Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao là ngôn
ngữ nền tảng cho việc học các ngôn ngữ bậc cao khác. Vậy làm sao để các
em viết tốt được các chương trình trong pascal? Một trong những yếu tố
quan trọng là các em phải nắm vững cấu trúc các câu lệnh và biết vận dụng
chúng vào bài toán cụ thể, đặc biệt là hai cấu trúc câu lệnh lặp. Xuyên suốt
khi hai cấu trúc này áp dụng vào hầu hết các bài tập ở các chương còn lại.
Là một giáo viên Tin học tôi luôn trăn trở làm thế nào đào tạo ra các thế
hệ học sinh có trình độ nhất định về tin học và sự đam mê Tin học cũng như
biết lập trình, gây mầm cho các em sau này trở thành các nhà lập trình viên
chuyên nghiệp, vậy để làm được điều đó tôi luôn phải đổi mới phương pháp
giảng dạy cho phù hợp với từng bài học, tiết học, từng đối tượng học sinh.
Xuất phát từ thực tiễn dạy học tại trường THPT Thiệu Hoá. Tôi đã dạy
nhiều khoá học, khi học tin 11 các em mới biết thể hiện thuật toán thành chương
trình, biết máy tính thực hiện chương trình như thế nào nên các em rất hướng
thú và muốn khám phá. Nhưng khi tôi dạy đến Bài10 : “Cấu trúc lặp”, học sinh
vẫn thấy nội dung kiến thức mới, rộng, trừu tượng và khó hiểu hơn nhiều so với
các bài học trước. Nên tôi đưa ra khả năng chuyển đổi qua lại 2 câu lệnh lặp vào
giảng dạy thì thấy kết quả tốt hơn hẳn, vận dụng tốt cấu trúc lặp vào bài toán.
Học sinh học hăng hái, tích cực, chủ động sáng tạo
Vì các lí do trên tôi mạnh dạn đưa ra sáng kiến kinh nghiệm “Hình thành kỹ
năng cho học sinh vận dụng đúng từng loại cấu trúc lặp vào bài toán tin hoc
11 THPT” để nêu một cách dạy và học đáp ứng được mục đích nêu trên.


1
2. Mục đích nghiên cứu
• Sử dụng các ví dụ cụ thể trước hết để học sinh nắm được cú pháp, ý nghĩa
của cấu trúc lặp.
• Xác định được lặp với số lần lặp biết trước hay chưa biết trước nhanh
chóng.
• Thông qua các ví dụ hướng dẫn học sinh chuyển đổi qua lại hai cấu trúc
lặp để học sinh phân biệt, nắm vững về hai cấu trúc lặp từ đó vận dụng
linh hoạt từng cấu trúc lặp vào tình huống cụ thể của bài toán.
• Viết được các thuật toán có cấu trúc lặp cho đa số các bài toán
3. Nhiệm vụ nghiên cứu
Để đạt được mục đích trên, SKNN có nhiệm vụ:
Phân tích tầm quan trọng của việc dạy học pascal từ đó đưa ra vấn đề bài 10, tin
học 11, để học sinh thảo luận qua đó nắm vững câu lệnh lặp với số lần biết trước
và chưa biết trước. Và hình thành ở học sinh kỷ năng phân tích, sử lý các vấn đề
liên quan đến vòng lặp trong quá trình lập trình các chương trình đơn giản sau
này.
4. Đối tượng nghiên cứu
- Học sinh khối 11 trường THPT Thiệu Hóa.
- Nội dung kiến thức dạy dọc “cấu trúc lặp – kỹ năng chuyển đổi qua lại
hai cấu trúc lặp”.
- Máy tính, máy chiếu để chạy mô tả các thuật toán.
2
B - NỘI DUNG
Chương I: Cơ sở lí luận của bài toán với “cấu trúc lặp”
I. Cơ sở lí luận
Pascal là ngôn ngữ khởi đầu, là hành trang cho các em tiếp cận các ngôn ngữ
bậc cao khác dễ dàng hơn. Nhưng để làm được như vậy các em phải hiểu và vận
dụng viết được các chương trình trong pascal một cách linh hoạt. Muốn vậy các
em phải nắm vững được cú pháp, ngữ nghĩa của pascal, sử dụng thành thạo các

câu lệnh trong ngôn ngữ, như các câu lệnh lặp. Nhưng thực tế học sinh gặp rất
nhiều khó khăn, nhầm lẫn trong việc xác định vòng lặp và xác định điều kiện
dừng của vòng lặp, câu lệnh nào nằm trong vòng lặp. Từ đó nảy sinh cho giáo
viên và học sinh nhu cầu gải quyết vấn đề đó.
II. Triển khai những nội dung chủ yếu của bài học “Cấu trúc lặp”.
1. Lặp
Trong phạm vi tin học, ta có thể hiểu “Lặp” là một số thao tác nào đó phải
làm đi làm lại một số lần.
Cấu trúc lặp mô tả thao tác lặp và được phân biệt hai loại là lặp với số lần biết
trước và lặp với số lần chưa biết trước.
2. Lặp với số lần biết trước và câu lệnh For –do
• Dạng lặp tiến:
FOR <biến đếm>:=<giá trị đầu> TO <giá trị cuối> DO <câu
lệnh>;
• Dạng lặp lùi:
FOR <biến đếm>:=<giá trị cuối> DOWNTO <giá trị đầui> DO
<câu lệnh>;
Trong đó:
- Biến đếm là biến đơn, thường có kiểu nguyên.
- Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm và giá trị
đầu phải nhỏ hơ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 thực hiện.
Hoạt động của for – do:
- Ở dạng lặp tiến, câu lệnh viết sau từ khóa Do đượ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.
3
- Ở dạng lặp lùi, câu lệnh viết sau từ khóa Do đượ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 giảm từ giá trị cuối đến giá trị
đầu.

3. Lặp với số lần chưa biết trước và câu lệnh While –do
Cấu trúc lặp:
While <điều kiện> Do <câu lệnh> ;
Trong đó:
- Điều kiện là biểu thức logic;
- Câu lệnh là một câu lệnh đơn hoặc ghép.
Hoạt động câu lệnh while:
Trong khi điều kiện sau While còn đúng thì câu lệnh sau Do còn thực hiện,
vòng lặp dừng khi điều kiện không còn đúng nữa.
Chương II
Triển khai giải pháp tạo kỹ năng cho học sinh vận dụng đúng cấu trúc lặp
vào bài toán tin 11.
I. Thực trạng của giáo viên và học sinh khi dạy và học bài
“cấu trúc lặp”.
- Thực trạng đối với học sinh:
Học sinh bước vào học tin 11 các em mới biết thể hiện thuật toán thành
chương trình, biết máy tính thực hiện chương trình như thế nào, nảy sinh vấn
đề mới nên các em rất hướng thú và muốn khám phá. Khi học các bài đầu
của sách giáo khoa các em thấy kiến thức nhẹ nhành, học đến đâu là có thể
làm tốt các bài tập ngay, nhưng khi học đến bài10 (cấu trúc lặp) thì hầu hết
các em thấy kiến thức nhiều hơn nhiều, khó hơn, trừu tượng và đòi hỏi kiến
thức tổng hợp của các bài trước mới viết được chương trình, đặc biệt khi vết
hai cấu trúc lặp thường chưa đúng ở phần điều kiện. Vì vậy làm giảm lòng
yêu thích khi học các bài tiếp theo.
- Thực trạng đối với giáo viên:
Giáo viên khi dạy các bài trước thì được các em hắng hái học nên cũng
hăng hái dạy, nhưng khi đến bài 10 thì không hứng thú dạy vì các em tinh
thần học giảm và vì kiến thức trừu tượng nên nhiều giáo viên dạy theo kiểu
thuyết trình là chính, không lấy học sinh làm trung tâm, nên học sinh lại càng
khó hiểu mà chỉ học theo kiểu học thuộc lòng, nhưng như vậy sẽ không tự áp

dụng làm các bài tập khác.

Trước thực trạng trên làm cho cả giáo viên và học sinh đều giảm hứng thú
khi dạy và học đến bài này. Vậy nên tôi nghĩ bản thân phải tìm ra giải pháp
cải thiện thực trạng trên nên tôi đã tìm ra giải pháp là SKKN này.
4
II. Quá trình triển khai giải pháp tạo kỹ năng cho học sinh vận
dụng cấu trúc lặp vào bài toán
Để tạo được kỹ năng cho học sinh trước hết phải giúp học sinh nắm được
kiến thức cơ bản về cấu trúc lặp, sau đó nâng cao dần bằng cách chuyển đổi
qua lại hai cấu trúc lặp. Vậy nên tôi trình bầy bài “cấu trúc lặp”, sau đến khả
năng chuyển đổi hai câu trúc lặp như sau:
1. Giúp học sinh hiểu “Cấu trúc lặp” trong Tin học:
• Thao thác lặp:
Giáo viên: đặt vấn đề bằng các ví dụ từ thực tế:
Vd1: Giáo viên trao giấy khen cho các em học sinh giỏi. giáo viên sẽ trao
từng em một cho đến hết số học sinh giỏi.
Vd2: Chương trình tính điểm cho học sinh một lớp (50 hs) sẽ phải thực
hiện các thao tác sau:
- Nhập họ tên (sbd)
- Nhập điểm
Tính tổng điểm hoặc tính trung bình.
GV: chương trình phải thực hiện đi thực hiện lại 3 thao tác trên bao nhiêu
lần?
Hs: Phải lặp lại 50 lần.
Gv: Các thao tác trên gọi là thao tác lặp, Vậy thao tác lặp là như thế nào?
Hs: Là thao thác được làm đi làm lại nhiều lần.
• Cấu trúc lặp:
Gv: để tính điểm cho học sinh chương trình viết đi viết lại các câu lệnh
thực hiện các thao tác trên 50 lần, dẫn đến không thuận tiện, mất thời gian,

chương trình dài.
=> vậy nên ngôn ngữ lập trình đưa ra cấu trúc lặp – chỉ cần viết câu lệnh của
các thao tác cho một học sinh sau đó cho phép chương trình thực hiện các
thao tác lặp với các học sinh khác.
Gv: Vậy em hiểu cấu trúc lặp như thế nào?
Hs: Cấu trúc lặp là mô tả thao tác lặp.
Xét 2 bài toán sau:
Với a là số nguyên được nhập từ bàn phím và a > 2, xét các bài toán sau đây:
Bài 1. Tính và đưa kết quả ra màn hình tổng

1 1 1 1

1 2 100
S
a a a a
= + + + +
+ + +
5
Bài 2. Tính và đưa kết quả ra màn hình tổng

1 1 1 1

1 2
S
a a a a N
= + + + + +
+ + +
Cho đến khi
1
0,0001

a N
<
+
.
Giáo viên: đưa ra các câu hỏi sau:
Câu 1: xác định thao tác lặp cho 2 bài toán trên?
Hs: thao tác lặp là cộng dồn vào S một lượng 1/(a+N). với (n=1,2 )
Câu 2. Em hãy xác định số lần lặp cho 2 bài toán trên?
Hs: Bài 1: lặp 100 lần. (nếu ban đầu s=1/a)
Bài 2: Chưa biết trước số lần lặp.
 Vậy cấu trúc lặp: Mô tả thao tác lặp và được phân biệt 2 loại là lặp với
số lần biết trước và lặp với số lần chưa biết trước.
2. Lặp với số lần biết trước và câu lệnh For-Do
Xét bài toán 1: Với a là số nguyên được nhập từ bàn phím và a > 2
Tính và đưa kết quả ra màn hình tổng

1 1 1 1

1 2 100
S
a a a a
= + + + +
+ + +
Gv: gợi ý cho hs viết thuật toán:
Ban đầu s=1/a;
sau đó cộng dồn vào s một lượng 1/(a+N) với (n= 1, 2, ,n).
Cho học sinh lên trình bầy thuật toán (1a-sgk):
Gv: Nếu S1=
aaaa
1

1
1

99
1
100
1
+
+
++
+
+
+
viết ngược của S thì có bằng S
không?
Hs: bằng nhau vì tổng không đổi.
Vậy giống như trên ta cũng viết được thuật toán cho S1 nhưng đi từ cuối về
đầu các số hạng. (Ta có thuật toán 1b-sgk).
Gv: Em hãy so sánh 2 thuật toán trên:
Hs: gv và học sinh tìm ra sự khác nhau sau:
Ở thuật toán 1a: - N ban đầu =1
- Mỗi lần lặp N tăng 1 đơn vị
- N cuối cùng còn thực hiện thao tác lặp là 100.
Ở thuật toán 1b: - N ban đầu =100
- Mỗi lần lặp N giảm 1 đơn vị
- N cuối cùng còn thực hiện thao tác lặp là 1.
6
Để biểu diễn cho 2 dạng cấu trúc lặp trên ta có câu lệnh For- Do với hai dạng
Tiến-Lùi.
• Dạng lặp tiến:

FOR <biến đếm>:=<giá trị đầu> TO <giá trị cuối> DO <câu lệnh>;
• Dạng lặp lùi:
FOR <biến đếm>:=<giá trị cuối> DOWNTO <giá trị đầui> DO <câu lệnh>;
Trong đó:
- Biến đếm là biến đơn, thường có kiểu nguyên.
- Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm và giá trị
đầu phải nhỏ hơ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 thực hiện.
Gv: Từ 2 thuật toán trên em hãy xác định: Biến đếm, giá trị đầu, giá trị cuối, câu
lệnh?
Hs: Biến đếm: N;
Giá trị đầu =1;
Giá trị cuối = 100;
Câu lệnh: s:=s+1/(a+n);
Gv: Từ đó em áp dụng cấu trúc hai câu lệnh For-Do viết câu lệnh cho hai thuật
toán trên?
Hs: Dạng lặp tiến: S:=1.0/a;
For N:=1 To 100 Do S:=S+1.0/(a+N);
Dạng lặp lùi:
S:=1.0/a;
For N:=100 Downto 1 Do S:=S+1.0/(a+N);
Ở dạng tiến N tự động tăng 1 đơn vị, ở dạng lùi N tự động giảm 1 đơn vị.
GV: Em hãy cho biết hoạt động của câu lệnh for –do ở cả 2 dạng trên?
Hs: dễ dàng đưa ra được
Hoạt động của for – do:
- Ở dạng lặp tiến, câu lệnh viết sau từ khóa Do đượ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.
- Ở dạng lặp lùi, câu lệnh viết sau từ khóa Do đượ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 giảm từ giá trị cuối đến

giá trị đầu.
7
Gv:- Vì biến đếm được điều chỉnh tự động nên câu lệnh sau do không nên thay
đổi giá trị biến đếm.
- Câu lệnh for có thể lồng nhau, sau do của for ngoài là câu lệnh for trong.
Ví dụ áp dụng: Em hãy viết câu lệnh For –Do :
Cho hai số nguyên M,N(M<N) Tính tổng các số chia hết cho 3 hoặc 5.
Hs : Dễ dàng tìm được: Giá trị đầu=M
Giá trị cuối=N
Câu lệnh: If (i mod 3=0) or ( i mod 5=0) then
s:=s+i;
Hs trình bầy:
Dạng tiến:
S:=0;
For i:=M To N Do
If (i mod 3=0) or ( i mod 5=0) then s:=s+i;
Dạng lùi:
S:=0;
For i:=N Downto M Do
If (i mod 3=0) or ( i mod 5=0) then s:=s+i;
Tổng quát: bài toán For –do các em phải xác định 4 bước:
- Biến đếm
- Giá trị đầu cho biến đếm:
- Giá trị cuối;
- Câu lệnh sau Do.
3. Lặp với số lần chưa biết trước và câu lệnh While -Do
Xét bài toán 2. Với a là số nguyên được nhập từ bàn phím và a > 2:
Tính và đưa kết quả ra màn hình tổng

1 1 1 1


1 2
S
a a a a N
= + + + + +
+ + +
Cho đến khi
1
0,0001
a N
<
+
.
Tôi đưa ra các câu hỏi sau để đặt học sinh vào tình huống đặt vấn đề:
Gv: Bài toán này có xác định cụ thể số lần lặp không?
Hs: Không xác định được số lần lặp, vì với a nhập từ bàn phím thì 1/
(a+n)<0.0001 không xác định cụ thể N bằng bao nhiêu được.
Gv: Em hãy viết thuật toán cho bài toán trên?
8
Hs: Trình bầy thuật toán:
Gv: Bài toán dừng khi nào?
Hs: Khi thỏa điều kiện 1/(a+n)<0.0001
GV: bài toán này có biểu diễn bằng câu lệnh for-do được không?
Hs: Không vì không biết trước số lần lặp.
Gv: đây là bài toán lặp với số lần lặp chưa biết trước - ta có câu lệnh While-Do
như sau:
Cấu trúc câu lệnh While-Do:
While <điều kiện> Do <câu lệnh> ;
Trong đó:
- Điều kiện là biểu thức logic;

- Câu lệnh là một câu lệnh đơn hoặc ghép.
Gv: em hãy đưa ra hoạt động while-do:
Hs trình bầy:
Hoạt động câu lệnh while-do:
Trong khi điều kiện sau While còn đúng thì câu lệnh sau Do còn thực hiện,
vòng lặp dừng khi điều kiện không còn đúng nữa.
Gv: Điều kiện sau While cho bài toán 2 này là gì?
Hs: Vì điều kiện sau While là điều kiện còn lặp nên ngược với điều kiện dừng
đó là: Not (1/(a+n)<0.0001).
Gv: Trong câu lệnh for – do biến đếm tự động tăng hoặc giảm 1 đơn vị, nhưng
trong while-do không tự động nên ta phải có câu lệnh điều chỉnh biến đếm tăng
hoặc giảm 1.
Em hãy viết câu lệnh while –do cho bài toán 2 này:
Hs : tìm được điều kiện và hai câu lệnh sau do nên dễ dàng viết được như sau:
S:=1/a; N:=0;
While not (1/(a+N) < 0.0001) do
Begin
N:=N+1;
S:=S+1/(a+N);
End;
Gv: Có thể đảo 2 câu lệnh sau Do cho nhau được không? Nếu được chỉnh như
thế nào?
9
HS: trình bầy:
S:=1/a; N:=1;
While not (1/(a+N) < 0.0001) do
Begin
S:=S+1/(a+N);
N:=N+1;
End;

Tổng quát: bài toán while –do các em phải xác định:
- Giá trị đầu cho biến đếm;
- Điều kiện sau while;
- Câu lệnh sau Do;
- Lệnh tăng, giảm biến đếm mấy đơn vị.
Giáo viên cho học sinh hoàn chỉnh chương trình dựa trên hai vòng lặp đã có ở
trên để giải 2 bài toán trên. (sau đó Giáo viên đi kiểm tra rồi chiếu chương trình
đã chuẩn bị lên, sau đó chạy chương trình)
4. Khả năng chuyển đổi qua lại hai dạng cấu trúc lặp for- do và while-
do.
Với các mục trên học sinh đã nắm vững bài cấu trúc lặp: để nâng cao và hình
thành kỹ năng cho các em tôi đưa ra mục 4 này như sau:
Với a là số nguyên được nhập từ bàn phím và a > 2, xét các bài toán sau đây:
Bài 1. Tính và đưa kết quả ra màn hình tổng

1 1 1 1

1 2 100
S
a a a a
= + + + +
+ + +
Bài 2. Tính và đưa kết quả ra màn hình tổng

1 1 1 1

1 2
S
a a a a N
= + + + + +

+ + +
Cho đến khi
1
0,0001
a N
<
+
.
Câu hỏi1: Có thể dùng câu lệnh while…do để viết vòng lặp tính tổng S ở bài 1
được không?
Học sinh trả lời: Việc dùng câu lệnh lặp while…do để thực hiện vòng lặp cho
câu lệnh for…do là có thể làm được vì:
10
+ Câu lệnh for…do sau khi thực hiện câu lệnh sau do thì biến đếm tự
động tăng lên 1, trong câu lệnh while…do ta có thể thực hiện lệnh tăng
biến_đếm lên 1 bằng cách thực hiện câu lệnh gán biến_đếm:=biến_đếm+1.
+ Câu lệnh for…do kết thúc khi biến_đếm > Giá_trị_cuối, trong câu lệnh
while…do ta có thể đưa điều kiện biến_đếm>Giá_trị_cuối vào trong điều kiện
kiểm tra vòng lặp while…do, cụ thể bài 1 ta có thể thực hiện như sau:
S:=1/a;
N:=1;
While N <= 100 do
Begin
S:=S+1/(a+N);
N:=N+1;
End;
Câu hỏi 2: Có thể dùng câu lệnh for…do để viết vòng lặp tính tổng S ở bài 2
được không?
Học sinh trả lời:
Việc dùng câu lệnh for…do để thực hiện vòng lặp cho câu lệnh while…do là

không được vì:
+ Câu lệnh while…do thực hiện câu lệnh khi điều_kiện còn đúng, nên ta
không xác định được đến vòng lặp thứ bao nhiêu để điều_kiên sai vì thế ta
không thể dùng vòng lặp for…do để thực hiện tính tổng S cho bài 2.
Câu hỏi 3: Vậy những bài toán nào dùng được cả hai cấu trúc lặp for và While?
Học sinh trả lời: Lớp bài toán lặp với số lần lặp biết trước.
Câu hỏi 4: Những bài toán nào chỉ dùng While do?
Hs: lớp bài toán lặp với số lần lặp chưa biết trước.
 Mọi bài toán lặp đều dùng được while-do.
a. Hình thành cách chuyển từ câu lệnh For –do sang While –do.
(Mọi bài toán lặp đều chuyển được)
Đầu tiên các em phải nhớ 2 cấu trúc , thành phần cấu tạo nên để xác định chúng:
Xét ví dụ cụ thể: cho câu lệnh for -do sau, hãy chuyển sang While-do:
S:=0;
For i:=1 to 100 do s:=s+i;
Gv: Em hãy xác định biến đếm, giá trị đầu, giá trị cuối, câu lệnh sau do.
Hs: Biến đếm là: i
Giá trị đầu : 1
Giá trị cuối : 100;
11
Câu lệnh sau do: s:=s+i;
=>Vậy trong khi i

[1 100] thì còn lặp, đây cũng là điều kiện trong While.
Nhưng nếu (biến đếm:=1) thì điều kiện trong while sẽ là (biến đếm <=100)

Học sinh: lên chuyển sang dạng While-do:
S:=0; i:=1;
While i<=100 do
Begin

s:=s+i;
i:=i+1;
end;
Gv: Chúng ta so sánh 2 câu lệnh lặp trên ta được:
For-do While -do
Biến đếm là: i
Giá trị đầu : 1
Giá trị cuối : 100;
Câu lệnh sau do: s:=s+i;
Biến đếm là: i
Gán giá trị đầu : i:= 1;
Điều kiện : <=100;
Câu lệnh sau do: begin
s:=s+i;
i:=i+1;
end;

Từ sự so sánh trên em hãy hình thành tổng quát cách chuyển For sang while:
Giáo viên hướng dẫn học sinh để hình thành các bước như sau:
Bước 1: Từ for xác định giá trị đầu gán cho biến đếm (biến đếm:=gt đầu);
Bước 2: Xác định giá trị cuối rồi tạo điều kiện sau while(biến đếm<=gt cuối)
Bước 3: Xác định câu lệnh sau do chuyển sang while;
Bước 4: Tăng hoặc giảm biến đếm lên 1 đơn vị (biendem:=biendem +1;).
Áp dụng các bước như trên chuyển for -do sang while –do cho các bài toán sau:
Bài1: S:=0; for i:=N to M do if (i mod 3=0) or (i mod 5=0) then s:=s+i;
Hs làm theo 4 bước trên được:
For-do While -do
Biến đếm là: i
Giá trị đầu : N
Giá trị cuối : M;

Câu lệnh sau do:
if (i mod 3=0) or (i mod 5=0) then s:=s+i;
Biến đếm là: i
Gán giá trị đầu : i:= N;
Điều kiện : <=M;
Câu lệnh sau do:
Begin
if (i mod 3=0) or (i mod 5=0)
then s:=s+i;
12
i:=i+1;
end;
Từ trên dễ dàng ta được câu lệnh while:
s:=0; i:=N;
While i<=M Do Begin
if (i mod 3=0) or (i mod 5=0) then s:=s+i;
i:=i+1;
end;
Bài2: S:=0; for i:=100 downto -100 do if (i mod 2=0) then s:=s+i;
Hs làm theo hướng dẫn:
For-do While -do
Biến đếm là: i
Giá trị đầu : -100
Giá trị cuối : 100;
Câu lệnh sau do:
if (i mod 2=0) then s:=s+i;
Biến đếm là: i
Gán giá trị đầu : i:= -100;
Điều kiện : <=100;
Câu lệnh sau do:

Begin
If i mod 2=0 then s:=s+i;
i:=i+1;
end;
Từ trên dễ dàng ta được câu lệnh while – do như sau:
s:=0; i:= -100;
While i<=100 Do Begin
if (i mod 2) then s:=s+i;
i:=i+1;
end;
b. Cách chuyển từ While –Do sang For-Do:
(chỉ chuyển được khi điều kiện sau while là số lần lặp biết trước)
Quá trình làm ngược lại cách chuyển trên:
Vd: Chuyển dạng While-do sang for – do:
S:=0; i:=1;
While i<=100 do
Begin
s:=s+i;
i:=i+1;
13
end;
Gv: Hướng dẫn học sinh tìm từ while- do các dữ kiện cột bên trái để thu được
cột bên phải sau:
Từ trên dễ dàng ta viết được câu lệnh for -do:
S:=0;
For i:=1 to 100 do s:=s+i;
Gv: Các em hình thành các bước tương tự như trên?
Học sinh tìm tòi, suy luận và đưa ra:
Bước 1: Từ While xác định giá trị khởi đầu của biến đếm (biến đếm:=giá trị
đầu);

Bước 2: Từ điều kiện sau while ta xác định được giá trị cuối (biến đếm :=gt
cuối);
Bước 3: Xác định câu lệnh sau do của for chuyển sang while;
Bước 4: (bỏ lệnh tăng giảm biến đếm).
Áp dụng các bước như trên chuyển for sang while cho các bài toán sau:
Bài1: câu lệnh while
s:=0; i:=N;
While i<=M Do Begin
if (i mod 3=0) or (i mod 5=0) then s:=s+i;
i:=i+1;
end;
Hs làm theo 4 bước trên và viết được:
While –do For-do
While –do For-do
Biến đếm là: i
Gán giá trị đầu : i:= 1;
Điều kiện : <=100;
Câu lệnh sau do: begin
s:=s+i;
i:=i+1;
end;

Biến đếm là: i
Giá trị đầu : 1
Giá trị cuối : 100;
Câu lệnh sau do: s:=s+i;
14
Biến đếm là: i
Gán giá trị đầu : i:= N;
Điều kiện : i <=M;

Câu lệnh sau do:
Begin
if (i mod 3=0) or (i mod 5=0)
then s:=s+i;
i:=i+1;
end;

Biến đếm là: i
Giá trị đầu : N
Giá trị cuối : M;
Câu lệnh sau do:
if (i mod 3=0) or (i mod 5=0) then
s:=s+i;
HS: Từ trên dễ dàng viết thành câu lệnh for –do như sau:
S:=0; for i:=N to M do if (i mod 3=0) or (i mod 5=0) then s:=s+i;
Bài 2: Vừa gà vừa chó
Bó lại cho tròn.
Ba mươi sáu con,
Một trăm chân chẵn
Hỏi bao nhiêu con mỗi loại?
• Viết câu lệnh while –do:
Hướng dẫn: Gv Cho biến đếm số “chó” là c, “gà” là g, thì các biến đó phải thỏa
mãn điều kiện gì:
Hs: c+g=36; 4*c+2*g=100;
GV: Em hãy tính số c tối thiểu và tối đa có thể?
Hs: Với c, g nguyên , gà tối thiểu 1 con,
nên biến c tối đa [(100-2*1)/4] =24, tối thiểu 1;
GV: từ đây ta cho biến chạy là c và áp dụng các bước đã nêu em viết câu lệnh
while -do?
Hs: áp dụng:

Bước 1: gán giá trị khởi đầu cho biến đếm: c:=1;
Bước 2:điều kiện sau while: c<=24;
Bước 3: câu lệnh sau do gồm những lệnh nào:
g:=36-c;
If 2*g+4*c=100 then write(‘gà=’,g,’chó=’,c);
15
Bước 4: Tăng giá trị biến đếm lên 1: c:=c+1;
 Học sinh trình bầy được câu lệnh while như sau:
C:=1;
While C<=24 Do
Begin
g:=36-c;
If 2*g+4*c=100 then write(‘gà=’,g,’chó=’,c);
C:=c+1;
End;
• Chuyển từ câu lệnh while sang For-do
Học sinh: áp dụng các câu hỏi để chuyển đổi sang for-do và viết được:
While –do For-do
Biến đếm là: C
Gán giá trị đầu : C:=C=1;
Điều kiện : C <=24;
Câu lệnh sau do:
Begin
g:=36-c;
If 2*g+4*c=100 then
write(‘gà=’,g,’chó=’,c);
C:=c+1;
end;

Biến đếm là: C

Giá trị đầu : 1
Giá trị cuối : 24;
Câu lệnh sau do còn:
g:=36-c;
If 2*g+4*c=100 then
write(‘gà=’,g,’chó=’,c);
Từ đây hsinh dễ dàng viết được câu lệnh for-do và trình bầy như sau:
For C:=1 to 24 do
begin
g:=36-c;
If 2*g+4*c=100 then write(‘gà=’,g,’chó=’,c);
End;
GV: tương tự các em có thể làm theo biến “gà” g, sau đó viết chương
trình.
16
Do hạn chế số lượng trang nên tôi chỉ trình bầy 2 ví dụ, các tiết bài tập
tôi tiến hành thêm các ví dụ khó hơn.
III. Hệ thống bài tập tạo kỹ năng cho học sinh vận dụng linh hoạt
cấu trúc lặp vào bài toán cụ thể:
1. Các bài tập về lặp với số lần biết trước.
(Viết câu lệnh lặp cả hai dạng for –do và while-do)
Học sinh có thể viết dạng for rồi chuyển sang while hoặc ngược lại:
Bài 1: Cho hai số nguyên a,b Tính tổng các số lẽ từ a đến b.
Bài 2: tính Y=

=
+
50
1
1

n
n
n
Bài 3: cho dãy số nguyên A={a
1
, ,a
n
}.
Hãy sắp xếp dãy trên thành dãy không giảm
Bài 4: cho dãy số nguyên A={a
1
, ,a
n
}.
Tính và hiển thị tổng các số dương trong dãy.
Bài 5: Lập trình tìm số phi-bô-na-xi thứ n, n nhập từ bàn phím
Bài 6: Kiểm tra dãy n số a1,a2, ,an có tạo thành cấp số cộng không?
Bài 7: Tính tổng các số nguyên tố <100.
Bài 8: đếm xem có bao nhiêu số hoàn hão <1000.
Bài 9: Tính N!
Bài 10: Tính C
k
n
=
)!(!
!
knk
n

(n,k nhập từ bàn phím).


Hướng dẫn: Loại bài tập này học sinh chỉ cần trả lời các câu hỏi tôi đã đưa ra
ở mục for, while, và chuyển đổi hai loại lặp là các em làm rất tốt., sau đó các
em dễ dàng hoàn thành thành chương trình.:
2. Các bài tập về lặp với số lần chưa biết trước.
(Viết câu lệnh lặp ở dạng while-do)
Bài 1: Tìm n nguyên dương nhỏ nhất để s=1+1/2+1/3+ +1/n>a. a nhập từ bàn
phím.
Bài 2: Tính sinx theo công thức sắp sĩ sau:
Sin(x) = x-
)!12(
)1(
!7!5!3
12753
+
−++−+
+
n
xxxx
n
n
Với x tính theo radian nhập vào từ bàn phím, đến khi
00001.0
)12(
12
<=
+
+
n
x

n
Bài 3: Nhập từ bàn phím tuổi cha và con (hiện tại tuổi cha lớn hơn 2 lần tuổi con
và tuổi cha hơn tuổi con ít nhất là 25). Bao nhiêu năm nữa tuổi cha gấp đôi tuổi
con?
Bài 4: Lập trình nhập từ bàn phím số nguyên n (0<n<=32 767). Hãy xác định và
đưa ra màn hình số chữ số 0 có nghĩa của n.
17
Bài 5: cho tệp dulieu.dat gồm các số nguyên, tính tổng các số nguyên trong tệp
đưa vào tệp ketqua.out.
Hướng dẫn: Loại bài tập này học sinh chỉ cần trả lời các yếu tố :
- Giá trị đầu cho biến đếm;
- Điều kiện sau while;
- Câu lệnh sau Do;
- Lệnh tăng, giảm biến đếm mấy đơn vị.
Các em làm rất tốt., sau đó các em dễ dàng hoàn thành thành chương trình.:
3. Một số bài tập dùng nhiều vòng lặp trong cùng bài toán:
(ở mức nâng cao dần dàng cho học sinh khá hơn)
Bài 1: cho mảng n phần tử nguyên a1,a2, ,an. Hỏi mảng đã xắp xếp
tăng chưa?
Bài 2: cho tệp dulieu.dat gồm một dòng văn bản, đếm xem tệp có bao
nhiêu kí tự mỗi loại? cho kết quả vào tệp ketqua.out.
Bài 3: tạo hàm Ho(s) với s là xâu hoten, giá trị trả lại là họ của người
đó.
Bài 4: cho 3 số nguyên n,k,p (n<=15, k<=100).
Yêu cầu 1: cho biết có bao nhiêu số nguyên dương có số chữ số
không vượt quá n và có tổng các chữ số =k.
Yêu cầu 2: nếu đem các số trong yêu cầu 1 sắp xếp tăng dần và
đánh số thứ tự từ 1 đến hết thì số thứ p là số nào? (giả thiết p không
lớn hơn số lượng các số tìm được).
Dữ liệu vào: tong.inp gồm 1 dòng chứa n, k, p.

Kết quả ra: ketqua.out gồm:
Dòng 1 ghi số lượng các số trong yêu cầu 1.
Dòng 2 ghi số thứ p.
Bài 5: công viên tổ chức trò chơi “con số may mắn” mỗi em nhỏ đến
tham dự sẽ được phát một số nguyên dương. Công viên có thiết bị
quay số, mỗi lần quay sẽ tạo ngẫu nhiên một số nguyên dương không
vượt quá 10
4
. người quay sẽ thực hiện n lần quay số. số nào xuất hiện
nhiều nhất trong n lần quay được gọi là số may mắn thì được
thưởng(có thể có nhiều con số may mắn).
Yêu cầu: cho n con số xuất hiện trong n lần quay, bạn giúp người quay
xác định số lần xuất hiện của con số may mắn.
Dữ liệu vào: từ tệp bai5.inp gồm dòng đầu là số n (1<=N<=10
4
);
Dòng tiếp có n số là các số xuất hiện trong n lần quay.
Kết quả: ghi bai5.out chỉ một số duy nhất là số lần xuất hiện con số
may mắn.
18
Loại bài tập này đòi hỏi các em phải tự tư duy, biết cách phối hợp
các cấu trúc lặp, cũng như kiến thức tổng hợp và khả năng sáng tạo.
19
Chương III
Thực nghiệm
Tôi đã tiến hành áp dụng phương pháp tạo kỹ năng vận dụng linh hoạt cấu trúc
lặp vào giảng dạy ở một số lớp 11 tại trường THPT Thiệu Hóa. Kết quả thu
được khi kiểm tra đánh giá về phần cấu trúc lặp như sau:
- Lớp 11A dạy theo phương pháp này, còn 11B dạy bình thường không áp dụng
phương pháp đề ra trong SKKN.

Bảng thống kê điểm số
Tôi áp
dụng từ các
lớp 11 khóa
này và so
sánh với các
khóa 11 trước dạy bình thường, năm nay các em đạt kết quả tốt hơn hẳn và có
hai em tham gia đội tuyển thi học sinh giỏi tỉnh đều đạt giải. Hầu hết các em khi
viết chương trình cũng thấy dễ dàng hơn, nhanh chóng và chính xác.
Quá trình thực nghiệm cho thấy:
- Việc áp dụng giải pháp dạy học trên là khả thi và ứng dụng được vào tất cả các
bài toán lặp, xuyên suốt khi viết chương trình các bài toán tin 11. Khả năng mở
rộng là rất lớn.
- Dạy học theo giải pháp trên giúp học sinh phát triển tư duy, năng lực giải quyết
vấn đề trong học tập cũng như trong cuộc sống.
- Phát huy được tính tích cực của học sinh, giúp học sinh yêu môn tin học hơn,
là động cơ thôi thúc các em trở thành những nhà lập trình viên trong tương lai.
Tỷ lệ
Lớp
Kém Yếu TB Khá Giỏi
Lần 1
11A 0% 2% 46% 40% 12%
11B 2% 15% 57% 24% 2%
Lần 2
11A 0% 0% 45% 41% 14%
11B 1% 14% 59% 24% 2%
20
C - KẾT LUẬN:
SKKN đã thâu tóm, phân tích những kiến thức chủ yếu về “Cấu trúc lặp”
từ đó hình thành kỹ năng vận dụng linh hoạt cấu trúc lặp vào từng bài toán.

SKKN thực hiện với một bài học cụ thể nhưng đều được áp dụng vào các
bài học sau, ảnh hưởng rất lớn đến toàn bộ chương trình tin học lớp 11, làm nền
tảng cho các em viết chương trình cho các bài toán tin 11.
Sáng kiến kinh nghiệm đã làm sáng tỏ nội dung kiến thức, giải quyết được
mâu thuẫn xẩy ra của các em khi học và vận dụng phần cấu trúc lặp. Từ đó giúp
các em nắm vững, chắc kiến thức, nhanh chóng giải quyết được vấn đề.
Quá trình thực nghiệm đã dạy học lấy người học làm trung tâm nên đã tạo
được hứng thú học tập, tính tích cực, tự lực, rèn luyện khả năng tư duy cho học
sinh, nâng cao chất lượng dạy và học.
Tôi nghĩ các giáo viên nên áp dụng giải pháp này nhưng mỗi người chắc
hẳn có cách đặt vấn đề và giải quyết vấn đề riêng tạo nên khả năng riêng của
mỗi người trong giảng dạy.
Tuy nhiên do hạn chế về thời gian, số lượng và điều kiện giảng dạy nên
SKKN chưa được triển khai trên diện rộng với nhiều lớp đối tượng.
Tôi hy vọng SKKN này góp một phần nhỏ vào việc đổi mới phương pháp
dạy học Tin học ở trường phổ thông.
Rất mong được sự quan tâm, đóng góp ý kiến của quý độc giả để SKKN
của tôi hoàn thiện hơn.
Tôi xin chân thành cảm ơn!
XÁC NHẬN CỦA TTHỦ TRƯỞNG ĐƠN VỊ
HT: LÊ ANH NIÊN
Thanh Hóa, ngày 19 tháng 5 năm 2013
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ị Phương
21
Tài liệu tham khảo
1. Sách giáo khoa Tin học 11, Hồ Sĩ Đàm, Hồ Cẩm Hà, Trần Đỗ
Hùng, Nguyễn Đức Nghĩa, Nguyễn Thanh Tùng, Ngô Ánh Tuyết,

NXBGD.
2. Sách bài tập Tin học 11, Hồ Sĩ Đàm, Trần Đỗ Hùng, Ngô Ánh
Tuyết, NXBGD
3. Sách giáo viên Tin học 11, Hồ Sĩ Đàm, Hồ Cẩm Hà, Trần Đỗ
Hùng, Nguyễn Đức Nghĩa, Nguyễn Thanh Tùng, Ngô Ánh Tuyết,
NXBGD.
4. Tài liệu bồi dưỡng giáo viên thực hiện chương trình sách giáo khoa lớp
11, Hồ Sĩ Đàm, Nguyễn Hải Châu, Hồ Cẩm Hà, Trần Đỗ Hùng,
Quách Tất Kiên, NXBGD.
5. Thuật toán, Nguyễn Xuân Huy, NXBTK
22
MỤC LỤC
Trang
A- Mở đầu 1
1. Lí do chọn đề tài 1
2. Mục đích nghiên cứu 2
3. Nhiệm vụ nghiên cứu 2
4. Đối tượng nghiên cứu 2
B - Nội dung
Chương I: Cơ sở lí luận của bài toán với “cấu trúc lặp”.
I. Cơ sở lí luận
II. Triển khai những nội dung chủ yếu của bài học “Cấu trúc lặp”

3
1. Llặp
3
2. Lặp với số lần biết trước và câu lệnh For-Do.
3
3. với số lần chưa biết trước và câu lệnh While-Do .
4

Chương II. Triển khai giải pháp tạo kỹ năng cho học sinh vận dụng
đúng cấu trúc lặp vào bài toán tin 11”.
I. Thực trạng của giáo viên và học sinh khi dạy và học bài “cấu trúc
lặp”

4
II. Quá trình triển khai giải pháp

5
1. Giúp học sinh hiểu “Cấu trúc lặp” trong Tin học

5
2. Giúp học sinh hiểu Lặp với số lần biết trước và câu lệnh For-Do

6
3. Giúp hs hiểu Lặp với số lần chưa biết trước và câu lệnh While-Do

8
4. Khả năng chuyển đổi qua lại 2 dạng cấu trúc lặp For và While-do

10
a) Chuyển từ for sang While-Do

11
23
b) Chuyển từ While sang For-Do

13
III. Hệ thống bài tập 17
Chương III. Thực nghiệm 19

C - Kết luận 20
Tài liệu tham khảo
24

×