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 - Pdf 27

“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

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ị

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:

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):

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

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:

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

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)


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:

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;

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

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

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
đó.


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