Tải bản đầy đủ (.doc) (33 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

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 (199.4 KB, 33 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
1
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.
2
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.
3
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>;
4
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.
- Ở 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.
5
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.
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
6
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?
7
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
= + + + +
+ + +
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;
8
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.
Để 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 đó:
9
- 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.
10
- Ở 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.
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:
11
- 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?
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:

12
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?
13
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
= + + + +
+ + +
14
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ì:
+ 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:
15
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;
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)


16
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:
17
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;
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;
18
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;
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:
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;
19
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;

20
Hs làm theo 4 bước trên và viết được:
While –do For-do
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;

21
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);
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:
22
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.
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ể:
23
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:
24
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.
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.
25

×