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

Một số giải pháp rèn kĩ năng vận dụng câu lệnh lặp của ngôn ngữ lập trình p ascal trong chương trình tin học 8

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 (1.37 MB, 26 trang )

MẪU Bìa SKKN của Sở GD&ĐT Thanh Hóa

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HỐ
PHỊNG GD&ĐT THỌ XN

SÁNG KIẾN KINH NGHIỆM

MỘT SỐ GIẢI PHÁP RÈN KĨ NĂNG VẬN DỤNG
CÂU LỆNH LẶP CỦA NGƠN NGỮ LẬP TRÌNH
PASCAL TRONG CHƯƠNG TRÌNH TIN HỌC 8

Người thực hiện: Lê Thị Vân
Chức vụ: Giáo viên
Đơn vị công tác: Trường THCS Nam Giang-Thọ Xuân
SKKN thuộc lĩnh vực : Tin học

THANH HOÁ NĂM 2019


1. MỞ ĐẦU
1.1. Lí do chọn đề tài
Hiện nay, giáo dục tin học đóng vai trị chủ đạo trong việc chuẩn bị cho
học sinh khả năng tìm kiếm, tiếp nhận, mở rộng tri thức và sáng tạo trong thời
đại cách mạng cơng nghiệp lần thứ tư và tồn cầu hố. Tin học có ảnh hưởng
lớn đến cách sống, cách suy nghĩ và hành động của con người, là công cụ hiệu
quả hỗ trợ biến việc học thành tự học suốt đời. Mơn Tin học giúp học sinh
thích ứng và hồ nhập được với xã hội hiện đại, hình thành và phát triển năng
lực cho học sinh. Học tin học, không phải chúng ta chỉ biết ngồi chơi điện tử,
các trò giải trí hay biết soạn thảo thơng thường, vv… mà học tin học ta có thể
xây dựng nên những chương trình ứng dụng cho mình như giải tuyết các bài
tồn từ đơn giản đến phức tạp bằng các ngôn ngữ lập trình… Đặc biệt là trong


xu thế hiện nay, tin học đóng vai trị quan trọng, nó đáp ứng được xu thế phát
triển trong cuộc cách mạng công nghiệp 4.0
Chương trình Tin học lớp 8 là chương trình bước đầu làm quen với
ngơn ngữ lập trình, đây là một chương trình khó đối với cả giáo viên và học
sinh. Có những em học khá cũng phải thốt lên, Tin học 8 sao khó thế, cịn hơn
cả mơn Tốn cơ ạ. Là bởi vì : Mơn Tin học 8 học về lập trình, mà khi muốn
lập trình được ta phải biết các thuật toán trong toán học, hơn nữa, các câu lệnh
của chương trình hồn tồn bằng tiếng Anh. Đây là ngôn ngữ với những qui
định chặt chẽ, chưa kể đến khi viết được một chương trình dù đơn giản hay
phức tạp địi hỏi chương trình Pascal có rất nhiều các câu lệnh lặp để thể hiện
một cơng việc nào đó được lặp đi lặp lại nhiều lần. Do đó khi phân tích bài
tốn, địi hỏi các em phải hình dung xem bài tốn đó phải áp dụng thuật tốn
nào, sử dụng vòng lặp nào mới hiệu quả. Trăn trở về vấn đề này bản thân tơi
đã tích cực nghiên cứu nội dung SGK, các tài liệu tập huấn dạy học theo định
hướng phát triển năng lực học sinh, tham gia học các chuyên đề đổi mới
PPDH…xem các diễn đàn giáo dục, tham gia sinh hoạt cụm chuyên môn, tổ
chuyên môn, đặc biệt tích cực dự giờ các đồng nghiệp. Xuất phát từ cơ sở trên,
tôi mạnh dạn đề xuất SKKN “Một số giải pháp rèn kĩ năng vận dụng câu
lệnh lặp của ngơn ngữ lập trình pascal trong chương trình Tin học 8 ’’


1.2. Mục đích nghiên cứu
Pascal là một ngơn ngữ lập trình tốt và đặc biệt, được tạo ra với mục
đích dùng cho giảng dạy vì các lý do: Có cú pháp rõ ràng, trình biên dịch
Pascal nhỏ gọn, có thể chạy tốt trên các máy tính cấu hình yếu, rất phù hợp với
khả năng đầu tư cho học tập của học sinh.
Cấu trúc lặp là cấu trúc thường được sử dụng để lập trình giải các bài
tốn, trong đó có các bài tốn truy hồi, đó là nền tảng cho các mơn tốn học ở
cấp 3 sau này. Tuy nhiên một số học sinh khi gặp các bài toán dạng này, các
em khó xác định được cơng thức truy hồi của bài tốn, đồng thời khơng biết

nên dùng cấu trúc lặp nào để giải bài tốn đó. Chính vì vậy, học sinh cảm thấy
chán nản, khơng muốn tìm hiểu và rèn luyện kĩ năng lập trình. Mặt khác với
một số đối tượng học sinh khá, giỏi, đa phần các em rất hào hứng với việc học
lập trình, cụ thể là ngơn ngữ lập trình Turbo Pascal hoặc Free Pascal). Do đó
các em muốn tìm hiểu sâu hơn về một số bài tốn mà có thể áp dụng cấu trúc
lặp để giải. Giáo viên nên tích cực khai thác vốn hiểu biết của học sinh để vận
dụng, liên hệ một số ví dụ mở rộng, nâng cao với đối tượng học sinh này.
Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài
tốn mang tính lặp, trong nội dung của bài sáng kiến này tôi đưa ra những
kinh nghiệm của bản thân để giúp các em có thể dễ dàng lập trình giải các các
bài tập.
1.3. Đối tượng nghiên cứu
Trong q trình giảng dạy, tơi nhận thấy Pascal là mơn học khó đối với
các em học sinh Khối 8, vì có một số thuật tốn các em chưa được học ở bộ
mơn Tốn, thêm vào đó là các em chỉ sử dụng các câu lệnh bằng Tiếng Anh để
thể hiện khi lập trình. Do đó việc học tập của học sinh vẫn cịn mang tính mơ
hồ, như bị ép buộc, có nhiều học sinh rất sợ mơn Tin học 8 vì tính chất khơ
khan, khó hiểu trong khi học. Đối với đối tượng là học sinh lớp 8, muốn viết
được một chương trình Pascal khơng những các em phải nhớ được các cấu
trúc câu lệnh, các từ khóa, mà các em phải hiểu được thuật tốn, điều này là
vơ cùng khó đối với các em học ở mức trung bình, trung bình khá...
Từ thực tế đó tơi khơng ngừng học hỏi để tìm ra biện pháp khắc phục.
Bằng kinh nghiệm khiêm tốn trong những năm qua, tôi đã đưa ra những tóm
lược cơ bản nhất của các bài tốn bằng ngơn ngữ tự nhiên, từ các ngơn ngữ đó
tơi vận dụng lại bằng các câu lệnh lặp pascal thông thường để chỉ rõ vấn đề
cho học sinh thấy sau đó tơi lấy thêm một số ví dụ mẫu vận dụng cấu trúc lặp


để giải quyết có hiệu quả là nhằm giúp học sinh tiếp thu bài nhanh, nhớ kiến
thức lâu hơn và cảm thấy thích thú với mơn học.

Với những cơ sở đó, tơi sẽ hướng cho các em tự phân tích, tự tìm ra hướng
giải quyết. Dựa trên các cấu trúc lặp mà kiến thức trong sách giáo khoa đã
cung cấp, các em biết đối với từng bài tốn, mình phải sử dụng cấu trúc lặp
nào ? Cấu trúc lặp đã biết trước số lần lặp hay cấu trúc lặp chưa biết trước số
lần lặp, hay là kết hợp các cấu trúc lặp với nhau…
1.4. Phương pháp nghiên cứu
1.4.1. Phương pháp nghiên cứu xây dựng cơ sở lí thuyết
Tìm đọc và nghiên cứu kĩ sách giáo khoa, các tài liệu có liên quan đến
việc rèn kỹ năng lựa chọn và thiết kế thuật toán cho học sinh nhằm xây dựng
cơ sở lí luận cho đề tài.
1.4.2. Phương pháp thu thập thơng tin
Khảo sát thực tế học sinh: Qua bài kiểm tra
1.4.3. Phương pháp điều tra khảo sát thực tế
Trực tiếp dự giờ giáo viên, trao đổi cùng đồng nghiệp về cách hướng dẫn
học lựa chọn và thiết kế thuật toán cụ thể, xem đồng nghiệp cảm thấy khi dạy
vấn đề này thì phần nào là khó dạy nhất để rút kinh nghiệm.
Trao đổi với học sinh xem khi lựa chọn và thiết kế thuật tốn em cảm thấy
khó nhất ở bước nào, tại sao?
Trực tiếp chấm, chữa bài kiểm tra thường xuyên, kiểm tra định kì, kết quả
thi học sinh giỏi các cấp qua các năm học của học sinh nhằm tìm hiểu việc rèn
luyện kĩ năng lựa chọn và thiết kế thuật toán của học sinh.
1.4.4. Phương pháp thống kê, xử lí số liệu
Từ kết quả khảo sát, tiến hành thống kê, so sánh, phân tích và xử lí thơng
tin, thu thập ý kiến phản hồi của học sinh và đồng nghiệp để khái qt hóa tình
hình nắm bắt kiến thức và kĩ năng lựa chọn và thiết kế thuật toán của học sinh
để đưa ra biện pháp khắc phục.


2. NỘI DUNG
2.1. Cơ sở lí luận

Trên cơ sở dạy học theo định hướng hình thành và phát triển năng lực
người học, không chỉ chú trọng những năng lực chung, cốt lõi mà còn chú
trọng phát triển cả năng lực chuyên biệt. Định hướng dạy học này đáp ứng
được các đòi hỏi của thực tiễn, hướng nghiệp và phát triển. Đồng thời giúp HS
linh hoạt và năng động trong việc tiếp cận và hình thành năng lực. Mặt khác,
để kết quả giáo dục của mơn Tin học nói riêng được tốt, ngồi việc bản thân
HS tích cực học tập thì vai tròn dẫn dắt của người thầy trong mỗi tiết học là
điều rất quan trọng.
Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài
tốn mang tính lặp ở bộ mơn Tin học vừa đúng với nguyên tắc dạy học ở
trường THCS, vừa đúng theo tinh thần đổi mới phương pháp dạy học hiện nay,
nhằm hình thành cho học sinh tính tích cực, độc lập, sáng tạo, nâng cao năng
lực phát triển và giải quyết vấn đề, rèn luyện kỹ năng vận dụng kiến thức vào
thực tiễn, tác động đến tình cảm, đem lại niềm tin và thích thú học tập cho HS.
Vì vậy, việc hệ thống các kiến thức về câu lệnh lặp cũng như đưa ra những ví
dụ để giải một số bài tập của giáo viên phải được chú ý đúng mức, phù hợp
với học sinh.
2.2. Thực trạng
2.2.1. Thực trạng về nội dung chương trình sách giáo khoa hiện nay:
Mục tiêu dạy học được mô tả không chi tiết và không nhất thiết phải
quan sát, đánh giá được.
Nội dung SGK biên soạn theo hướng nặng về cung cấp kiến thức để thi
cử, ít chú trọng vấn đề bồi dưỡng năng lực cho học sinh. Nhiều bài học khô
khan, một số kiến thức quá trừu tượng khơng gắn liền với các tình huống thực
tiễn.
2.2.2 Thực trạng chung về môn tin học trong các nhà trường phổ thông
hiện nay:
Đối với bộ môn Tin học ở trường THCS vẫn với tư cách là một môn học
tự chọn, cho nên mức độ yêu cầu cũng chỉ là ở mức độ “làm quen”. Tuy nhiên
nó lại là một môn học rất mới mẻ và trừu tượng, nhất là các ngơn ngữ lập trình

mà đặc biệt là ngơn ngữ lập trình Pascal. Đây là một nội dung khó đối với cả
người dạy và người học. Một trong những nội dung khó đó là phần kiến thức
về Câu lệnh rẽ nhánh và tổ chức lặp ở chương trình Tin học 8.


2.2.3. Thực trạng về vấn đề dạy và học môn Tin học ở trường.
* Đối với nhà trường:
Trang thiết bị phục vụ cho công tác dạy học theo hướng phát triển năng
lực HS còn thiếu thốn : Số phòng máy chỉ có 1 phịng với 17 máy, chưa đảm
bảo mỗi em được một máy để thực hành.
* Đối với giáo viên.
So với các môn học khác, số GV biên chế giảng dạy mơn tin học của
nhà trường ít có 1GV, thậm chí trong 1 cụm chỉ có 1 giáo viên Tin, do đó việc
dự giờ, góp ý, rút kinh nghiệm cho nhau nhiều khi khơng đảm bảo tính khách
quan, đánh giá thiếu chính xác và ít học được các kinh nghiệm về chuyên
môn.
Tin học là môn học tự chọn, không bắt buộc thi HSG do đó GV ít khi
đầu tư tìm tịi, nghiên cứu sáng tạo…
* Đối với học sinh:
Áp lực về HSG các mơn văn hóa rất lớn. Do đó HS chủ yếu tập trung
học và ơn thi các mơn văn hóa, ít có thời gian để tìm tịi, nghiên cứu học tập
môn Tin học.
Mặt khác chất lượng HS khơng đồng đều, có những HS thơng minh
vượt trội, song cũng cịn nhiều HS có học lực trung bình, lại ham chơi, nghịch
ngợm, lười học… Điều này cũng gây khó khăn, bất cập cho GV trong quá
trình giảng dạy.
Đa số học sinh bị hổng kiến thức Toán từ lớp dưới nên ý thức tìm tịi và
nghiên cứu của các em cịn hạn chế. Có khơng ít học sinh chưa cố gắng trong
học tập, khơng chịu khó động não, nên ảnh hưởng khơng nhỏ đến việc học.
Trên cơ sở tìm hiểu tình hình của nhà trường, thực trạng của HS.

Năm học 2016-2017, khi dạy xong bài 6,7,8 - câu lệnh rẽ nhánh và câu lệnh
lặp. Tôi đã khảo sát 75 em HS khối 8 với nội dung đề kiểm (tra 45 phút)
như sau:
* Đề kiểm tra:
I. Trắc nghiệm (4 điểm): Khoanh tròn chữ cái đứng trước kết quả đúng
Câu 1: Phát biểu nào sau đây là đúng ?
A. Cấu trúc lặp được sử dụng để chỉ thị cho máy tính thực hiện lặp lại một
vài hoạt động nào đó cho đến khi một điều kiện nào đó được thoả mãn.
B. Chỉ ngơn ngữ lập trình Pascal mới có các câu lệnh lặp để thể hiện cấu
trúc lặp.


C. Ngôn ngữ Pascal thể hiện cấu trúc lặp với số lần lặp cho trước bằng câu
lệnh while…do
D. Ngôn ngữ Pascal thể hiện cấu trúc lặp với số lần lặp chưa biết trước
bằng câu lệnh for…do
Câu 2: Lệnh lặp nào sau đây là đúng?
A. For <biến đếm>= <giá trị đầu> to <giá trị cí> do <câu lệnh>;
B. For <biến đếm>:= <giá trị đầu> to <giá trị cí> do <câu lệnh>;
C. For <biến đếm>:= <giá trị cí> to <giá trị đầu> do <câu lệnh>;
D. For <biến đếm>: <giá trị đầu> to <câu lệnh> do <giá trị cuối>;
Câu 3: Câu lệnh pascal nào sau đây là hợp lệ?
A. For i:=100 to 1 do writeln(‘A’); B. For i:=1.5 to 10 do writeln(‘A’);
C. For i= 1 to 10 do writeln(‘A’); D. For i:= 1 to 10 do writeln(‘A’);
Câu 4: Vòng lặp while ..do là vòng lặp:
A. Biết trước số lần lặp
B. Biết trước số lần lặp nhưng giới hạn là <=100
C. Chưa biết trước số lần lặp D.Biết trước số lần lặp nhưng giới hạn là >=100
Câu 5: Câu lệnh lặp while…do có dạng đúng là:
A. While <điều kiện> do; <câu lệnh>; B. While <điều kiện> <câu lệnh> do;

C. While <câu lệnh> do <điều kiện>;
D.While <điều kiện> do <câu lệnh>;
Câu 6: Cho S và i là biến nguyên. Khi chạy đoạn chương trình sau kết
quả in lên màn hình là của s là :
s:=0;
for i:=1 to 5 do s := s+i;
writeln(s);
A.11
B. 55
C. 101
D.15
Câu 7:Chương trình pascal sau sẽ in ra màn hình nội dung gì?
Var i: integer;
BEGIN
For i:=1 to 10 do writeln(‘Day la lan lap thu ‘,i);
Readln;
END.
A. 1 câu “Day la lan lap thu i”;
B. 1 câu “Day la lan lap thu ‘, i”;
C. 10 câu “Day la lan lap thu ‘, i”;
D. 10 câu "Day la lan lap thu i” với i theo thứ
tự từ 1->10;
Câu 8: Cho S và i biến kiểu nguyên. Khi chạy đoạn chương trình sau giá trị
sau cùng của S là :


S:= 0; i:= 1;
while i<= 6 do
begin
S:= S + i; i:= i + 2;

end;
A. 16
B. 9
II. Tự luận (6 điểm):

C. 6

Câu 1. (4 đ): a) Mơ tả thuật tốn tính tổng sau:

D. 0
S = 1+

1 1
1
+ + ... +
2 3
100

b) Viết chương để tính tổng S ở câu a.
Câu 2. (2 đ): Viết chương trình tính trung bình cộng của n số thực: a 1,a2,a3,
…,an. (Các số n và a1,a2,a3,…,an được nhập từ bàn phím).
Đáp án của đề như sau:
I. Trắc nghiệm
Câu
1
2
3
4
5
6

7
8
Đáp án
A
B
D
C
D
D
D
B
II. Tự luận
Câu 1:
a) Mơ tả thuật tốn:
B1: S0; i0;
B2: S:=S+1/i; ii+1;
B3: Nếu i<=100 thì quay lai B2, ngược lại thông báo giá trị của S và kết
thúc thuật toán.
b) program caub;
var i,n,S: integer;
begin
s:=0; i:=0;
for i:=1 to 100 do s:=s+1/i;
write(‘Tong cua day so la: ‘,s);
readln;
end.
Câu 2)
Program cau2;
Ues crt;
Var n,d:integer;

X,tb:real;


Begin
Clrscr;
d:=0; TB:=0;
write(‘nhap so các so can tinh n= ‘);readln(n);
while dd:=d+1;
write(‘nhap so thu ‘,d , ‘=’);readln(x);
TB:=TB+x; end;
TB:=TB/n;
Write(‘Trung binh cua ‘,n,’ so la = ‘,TB:5:3);
Readln;
END.
Qua bài kiểm tra, tôi thu được kết quả như sau:
Tổng số
Giỏi
Khá
TB
Yếu
Kém
SL %
SL %
SL %
SL %
HS được SL %
khảo sát
75
9

12.0 15
20.0 44
58.7 5
6.7
2
2.7
Từ kết quả điều tra này, tôi nhận thấy rằng việc quyết định đưa ra sáng
kiến là điều rất cần thiết, hoàn toàn phù hợp với xu thế đổi mới phương pháp
dạy học theo hướng tích cực, lấy học sinh làm trung tâm trên cơ sở SGK hiện
hành tạo bước đệm cho việc thay SGK trong những năm tới.
2.3. Giải pháp giải quyết vấn đề
2.3.1. Xây dựng KHGD ngay từ đầu năm học:
- GV chia nhóm học tập cho từng HS, phân nhóm trưởng, hướng dẫn cách
hoạt động nhóm, em khá giỏi kèm em yếu, kém.
- GV cần đầu tư nghiên cứu, mỗi năm cập nhật những cách hay của đồng
nghiệp để tích luỹ cho việc giảng dạy.
- GV cần dành một thời lượng thích hợp cho việc mấu chốt và hướng dẫn HS
cách nhớ kiến thức cơ bản vừa học ở các tiết học lý thuyết. Cũng như cách tìm
hiểu ý nghĩa của mỗi lệnh trong các bài thực hành.
2.3.2. Một số giải pháp thực hiện:
Giải pháp 1: Hệ thống lại kiến thức chung các vịng lặp
a) Cấu trúc lặp là gì?
Cấu trúc lặp là một điều khiển thực hiện công việc lặp đi lập lại khi
chưa đủ số lần lặp hoặc khi một điều kiện nào đó cịn đúng.


Trong thực tế có rất nhiều cơng việc được lặp đi lặp lại nhiều lần, như:
ngày mai, em biết mình đi học buổi sáng, buổi chiều, buổi tối, em biết mình
đánh răng 2 lần… đó là những việc em đã biết trước được số lần lặp, đó là lặp
với số lần lặp đã biết trước. Ngược lại, có những cơng việc em không xác định

được số lần lặp là bao nhiêu lần, ví dụ: em gọi điện cho bạn, chng sẽ đổ cho
đến khi bạn nhấc máy lên. Như vậy số lần chuông đổ là số lần lặp lại và vỉ
không biết chuông đổ bao nhiêu lần nên ta gọi đó là số lần lặp khơng xác định
trước.
Cấu trúc lặp trong thuật tốn được dùng để mơ tả việc thực hiện lặp lại
nhiều lần một hoặc một nhóm các hoạt động.
Mọi ngơn ngữ lập trình đều có câu lệnh lặp để thể hiện cấu trúc lặp,
trong đó một hoặc nhiều lệnh được viết một lần nhưng lại được điều khiển để
thực hiện lặp lại một số hữu hạn lần. Các lệnh điều khiển quá trình lặp như
vậy gọi là câu lệnh lặp.
Trong lập trình, đơi khi q trình lặp khơng thể dừng được gọi là q
trình lặp vơ hạn. Điều này xảy ra khi điều kiện để dừng lặp không còn bị biến
đổi giá trị sau mỗi lần lặp. Khi đó để thốt lặp vơ hạn, cần có các câu lệnh cho
phép thốt ngay khỏi lặp.
Có hai loại cấu trúc lặp: 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.
b) Cấu trúc lặp với số lần đã biết trước
* Trước hết, Tơi đưa ra mục đích, yêu cầu của bài học như sau:
Xác định yêu cầu kiến, kĩ năng.
Kiến thức
+ Hiểu được các hoạt động lặp. Biết được các tình huống sử dụng từng
loại lệnh lặp.
+ Hiểu cấu trúc lặp với số lần biết trước.
+ Biết cách vận dụng đúng đắn từng loại cấu trúc lặp số lần biết trước
vào tính huống cụ thể.
Kĩ năng
+ Mơ tả được thuật toán của một số bài toán đơn giản có hoạt động lặp
với số lần lặp biết trước .
+ Biết vận dụng câu lệnh lặp với số lần biết trước để lập trình một số bài
tốn đơn giản .

* Tác dụng: Câu lệnh lặp với số lần lặp đã xác định trước.


* Cú pháp:
Dạng tiến:
For <Biến đếm > := <giá trị đầu> to <giá trị cuối> do <Câu lệnh> ;
Dạng lùi:
For <biến đếm> := <giá trị cuối> Downto <giá trị đầu> do <Câu lệnh> ;
Trong đó:
+ for, to, do là các từ khóa.
+ Biến đếm có kiểu nguyên.
+ Giá trị đầu và giá trị cuối là các biểu thức có cùng kiểu với biến đếm
và giá trị cuối phải lớn hơn hoặc bằng giá trị đầu.
+ Câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép.
* Nguyên lý hoạt động cấu trúc For dạng tiến:
1. Biến đếm nhận giá trị của giá trị đầu.
2. Máy kiểm tra xem giá trị của biến đếm còn nhỏ hơn giá trị của biểu
thức giá trị cuối hay không (biến đếm ≤ giá trị cuối).
3. Nếu việc kiểm tra:
- Cho giá trị sai câu lệnh sẽ bị bỏ qua.
- Cho giá trị đúng:
+Máy sẽ thực hiện câu lệnh sau từ khóa do.
+Tăng giá trị của biến đếm lên giá trị đứng liền sau của nó
một đơn vị
- Quay trở lại bước 2
Trong cấu trúc For do, câu lệnh được thực hiện lặp đi lặp lại cho đến
khi giá trị của biến đếm lớn hơn giá trị cuối. Mỗi lần thực hiện xong câu
lệnh, giá trị của biến đếm được tăng lên đến giá trị liền sau của nó.
Khi câu lệnh thành phần của lệnh lặp for...do là một câu lệnh lặp for...do khác
thì ta nói rằng các câu lệnh lặp for...do lồng nhau.

c) Lặp với số lần chưa biết trước
Phần này, khi hệ thống lại, tơi cũng đưa ra mục đích, u cầu khi học
xong bài học này
* Trước hết, Tôi đưa ra mục đích, yêu cầu của bài học như sau:
Xác định yêu cầu kiến, kĩ năng.
Kiến thức
+ Hiểu được các hoạt động lặp. Biết được các tình huống sử dụng từng
loại lệnh lặp.


+ Hiểu cấu trúc lặp với số lần chưa biết trước.
+ Biết cách vận dụng đúng đắn từng loại cấu trúc lặp số lần chưa biết
trước vào tính huống cụ thể.
Kĩ năng
+ Mơ tả được thuật tốn của một số bài tốn đơn giản có hoạt động lặp
với số lần lặp chưa biết trước .
+ Biết vận dụng câu lệnh lặp với số lần chưa biết trước để lập trình một
số bài toán đơn giản .
* Lặp với số lần chưa biết trước có hai dạng:
Dạng 1 : Trong khi <điều kiện> cịn đúng thì cịn thực hiện <cơng việc>
Dạng 2: Cịn thực hiện <cơng việc> trong khi <điều kiện> cịn đúng.
Tuy nhiên, trong phạm vi Tin học 8, tơi chỉ giới thiệu cấu trúc
lặpWhile…do
*Tác dụng: Dùng để xây dựng chu trình với số lần lặp chưa xác định
trước.
* Cú pháp: While <điều kiện> do <câu lệnh>;
Câu lệnh là thân chu trình và có thể là câu lệnh đơn hoặc câu lệnh ghép.
Nguyên lý hoạt động:
1. Máy tính xác định giá trị của điều kiện.
2. Tuỳ thuộc vào giá trị của điều kiện:

- Nếu điều kiện có giá trị đúng, máy tính sẽ thực hiện câu lệnh sau đó
quay lại bước 1.
- Nếu điều kiện có giá trị sai, câu lệnh sẽ bị bỏ qua và việc thực hiện
lệnh lặp kết thúc.
• Nhận xét:
- Câu lệnh được thực hiện lặp đi lặp lại cho đến khi <điều kiện> nhận giá
trị sai. Câu lệnh sẽ không được thực hiện lần nào nếu <điều kiện> nhận giá trị
sai ngay từ khi bắt đầu vào chu trình.
- Trong thân chu trình phải có câu lệnh làm thay đổi giá trị của <điều
kiện> để tránh xảy ra vịng lặp vơ tận.
Cuối cùng, tơi tóm lại cho học sinh bằng sơ đồ tư duy như sau:


Đối với chương trình Tin học 8, khơng giới thiệu câu lệnh lặp for dạng
lùi, tuy nhiên, tôi vẫn giới thiệu thêm cho các em phần này vì có một số bài
toán khi áp dụng câu lệnh này sẽ dễ dàng hơn.
Khi dạy xong 2 cấu trúc này, qua từng ví dụ, tơi sẽ phân tích cho các em thấy
rõ hơn khi nào ta sử dụng cấu trúc dạng for…do và khi nào ta sử dụng cấu trúc
dạng while…do
Giải pháp 2: Đưa ra một số bài tập vận dụng dưới dạng lý thuyết
Bài tập 1: Cho S và i là biến nguyên. Khi chạy đoạn chương trình :
s:=0;
for i:=1 to 5 do s := s+i;
writeln(s);
Kết quả in lên màn hình là của s là :
A.11
B. 55
C. 101
D.15



Phân tích: Trước hết, với đoạn chương trình trên, ta cần cho các em xác định
số lần lặp lại công việc là: giá trị cuối – giá trị đầu + 1 (lần), vậy số lần lặp lại
là: 5-1+1= 5 lần. Biến đếm i sẽ nhận các giá trị từ 1 đến 5. Lần thứ nhất, i
nhận giá trị là giá trị đầu tiên của của biến đếm là 1, công việc lặp đầu tiên
s=0+1=1, tương tự cho đến khi i=5 thì s=s4+i5=15
Bài tập 2: Đối với từng đoạn chương trình Pascal sau đây, hãy cho biết lệnh
Writeln in ra màn hình giá trị i, j, k là bao nhiêu? (i,j,k là biến thuộc kiểu
nguyên)
a)
b)
c)
j:=2; k:=3;
j:=2; k:=3;
j:=2; k:=3;
for i:=1 to 5 do j:=j+1;
for i:=1 to 5 do
for i:=1 to 5 do
k:=k+j;
begin
if i mod 2=0 then j:=j+1;
cach:=’ ‘;
j:=j+1;
k:=k+j;
writeln(j, cach, k);
k:=k+j;
cach:=’ ‘;
end;
writeln(j, cach, k);
cach:=’ ‘;

writeln(j, cach, k);
Phân tích:
Mới nhìn, ta thấy 3 đoạn chương trình trên dường như giống nhau,
nhưng phân tích kĩ từng đoạn chương trình, ta thấy kết quả j, k qua các vịng
lặp ở các đoạn lại hồn tồn khác nhau. Nếu câu lệnh sau “do” khơng có
“begin…end” thì câu lệnh đầu tiên sẽ thực hiện trước cho đến khi kết thúc lặp
sau đó mới thực hiện các câu lệnh tiếp theo. Ngược lại, nếu sau “do” có
“begin…end” thì các câu lệnh trong “begin…end” sẽ được thực hiện một cách
tuần tự sau mỗi lần lặp, riêng đoạn chương trình c lặp lại có điều kiện. Từ
phần tích đó, tơi sẽ hướng dẫn các em tính từng giá trị của i,k,j sau mỗi lần lặp
như sau:
Đoạn
Số lần
i
j
k
Kết quả in ra
CT
lặp
a
5
i1= 1
j1=3
i2= 2
j2=4
i3= 3
j3=5
i4= 4
j4=6
i5= 5

j5=7
k= k+j5=7+3 = 10
7 10
b

5

i1= 1

j1=3

k1=k+j1=3+3 = 6


i2= 2
j2=4
k2=k1+j2=6+4 = 10
i3= 3
j3=5
k3=k2+j3=10+5 = 15
i4= 4
j4=6
k4=k3+j4=15+6 = 21
i5= 5
j5=7
k5=k4+j5=21+7 = 28 7 28
c
5
i1= 1
j1=2

i2= 2
j2= 3
i3= 3
j3=3
i4= 4
j4=4
i5= 5
j5=4
k=k+j5 =3+4 = 7
4 7
Bài tập 3: Đoạn lệnh sau đây sẽ cho kết quả là gì?
so:=1;
while so<10 do write(so);
so:=so+1; i:=i+1;
A. In ra các số từ 1 đến 9
B. In ra các số từ 1 đến 10;
C. In ra vô hạn các số 1, mỗi số trên một dịng.
D. Khơng phương án nào đúng.
Phân tích:
Ta thấy, trong câu lệnh lặp, điều kiện ln ln đúng vì so ban đầu được
gán bằng 1 luôn luôn nhỏ hơn 10. Trong đoạn chương trình có câu lệnh tăng
giá trị của i lên một đơn vị nhưng câu lệnh này không được thực hiện vì nằm
ngồi vịng lặp, vịng lặp được thực hiện vơ tận. Hai câu lệnh cuối cùng (sau từ
khóa “do” cần được gộp thành một câu lệnh ghép. Vậy đáp án đúng ở đây là
đáp án C.
Bài tập 4: Tìm hiểu các đoạn chương trình Pascal sau đây, khơng cần viết
chương trình, hãy cho biết các lệnh Writeln in ra màn hình giá trị của i,j,k là
bao nhiêu?
a)
b)

i:=1; j:=2; k:=3;
i:=1; j:=2; k:=3;
while i<6 do i:=i+1; j:=j+1; k:=k+j; while i<6 do
cach:= ‘ ‘;
begin
writeln(i, cach, j, cach, k);
i:=i+1; j:=j+1; k:=k+j;
end;
cach:= ‘ ‘;
writeln(i, cach, j, cach, k);
Phân tích:


Hai đoạn chương trình trên nếu khơng nhìn kỹ học sinh tưởng giống
nhau, nhưng 2 chương trình khác nhau hồn tồn. Ở đoạn chương trình a, chỉ
có câu lệnh i:=i+1 nằm trong vịng lặp, các câu lệnh khác nằm ngồi vịng lặp.
Ở đoạn chương trình thứ 2, các câu lệnh nằm trong begin…end nằm trong
vịng lặp. Từ phần tích đó, tơi sẽ hướng dẫn các em tính từng giá trị của i,j,k
sau mỗi lần lặp như sau:
Đoạn
ĐK
i
j
k
Kết quả in ra
CT
a
i1= 2
i2= 3
i3= 4

i4= 5
i5= 6
j =3
k= k+j = 3+3 = 6
6 3 6
b
5
i1= 2
j1=3
k1=k+j1=3+3 = 6
i2= 3
j2=4
k2=k1+j2=6+4 = 10
i3= 4
j3=5
k3=k2+j3=10+5 = 15
i4= 5
j4=6
k4=k3+j4=15+6 = 21
i5= 6
j5=7
k5=k4+j5=21+7 = 28 6 7 28
Giải pháp 3: Đưa ra một số bài tập vận dụng các câu lệnh lặp để viết
chương trình
Ví dụ 1: Tính tổng 3 số tự nhiên liên tiếp đầu tiên
Nhận xét: Đây là chương trình đơn giản đầu tiên, tơi sẽ phân tích các
vịng lặp để các em hiểu rõ hơn
- Nếu dùng vòng for ta đã biết trước số lần lặp là 3-1+1=3 lần nên cơng
việc tính tổng là 3 lần, đây là chương trình tính tổng cộng dồn nên mỗi lần lặp
chương trình sẽ lấy tổng phía trước nó cộng với giá trị tại biến đếm tiếp theo

- Nếu dùng vịng While, chương trình sẽ kiểm tả điều kiện, nếu thỏa
mãn biến đếm nhỏ hơn hoặc bằng 3 thì thực hiện cơng việc sau câu lệnh “do”.
Vì sau “do” có 2 câu lệnh trở lên nên ta đặt trong cặp “begin…end”. Tôi sẽ
đưa ra và chạy đồng thời 2 chương trình để học sinh so sánh
Dùng For…to…do
Dùng while…do
Program tong;
Program tong;
Var i,s: integer;
Var i,s: integer;
BEGIN
BEGIN
Clrscr;
Clrscr;


s:=0; i:=1;
for i:=1 to 3 do s:=s+i;
writeln(‘su dung vong lap for: ‘,s);
readln;
END.

s:=0; i:=1;
while i<=3 do
begin
s:=s+i; i:=i+1
end;
writeln(‘su dung vong lap while: ‘,s);
readln;
END.


Cả 2 chương trình trên đều cho cùng 1 kết quả là 6. Tùy từng chương
trình các em sẽ xem xét để vận dụng vịng lặp nào cho thích hợp
Ví dụ 2: Tính tổng S = 1 + 1/2 + 1/3 + .... + 1/n
Với bài này, vận dụng cấu trúc lặp For...to...do sẽ dễ dàng hơn vì ta đã biết
rõ n được nhập từ bàn phím, đã biết trước số lần lặp, vì nếu dùng cấu trúc
While...do một số em sẽ khó xác định được điều kiện của bài tốn là gì.
• Nhận xét:
- Trong biểu thức trên, số hạng thứ i của tổng có thể tính được theo cơng
thức S(i) = 1/i (i=1,2,...,n)
-Ta đưa ra cơng thức tính tổng mà học sinh đã quen thuộc có dạng
s=1+2+3+...+n. Yêu cầu học sinh cho về dạng phân số có tử là 1 khi đó học
sinh sẽ hiểu và có thể thực hiện được
• Chương trình:
Phương án 1: Sử dụng cấu trúc For do.
Var i, n : Integer; S:Real;
Begin
Write('Hay nhap vao so nguyen n=');
Readln(n);
S:=0;
For i:=1 to n do
S:= S + 1 / i;
Writeln( ' Tong S =', S : 6 : 2 );
Readln;
End.
Phương án 2: Sử dụng cấu trúc For downto.
Var i, n : Integer; S:Real;
Begin



Write('Hay nhap vao so nguyen n=');
Readln(n);
S:=0;
For i:= n dowto 1 do
S:= S + 1 / i;
Writeln( ' Tong S =', S : 6 : 2 );
Readln;
End.
Ví dụ 3: In ra màn hình hai dịng. Dịng trên gồm các số chẵn. Dòng dưới
gồm các số lẻ theo theo thứ tự từ 1 đến n
Nhận xét phân tích:
-Yêu cầu học sinh trả lời khi nào thì đó được gọi là chẵn, khi nào thì lẻ.
-Trong pascal có phép nào cho biết phép chia hết, phép không chia hết.
- Vậy để biết số đó có chia hết cho 2 hay khơng thì ta thực hiện như thế nào?
(gọi a là số cần tìm khi đó nếu a mod 2=0 thì a là số chẵn, nếu a mod 2<>0 thì
a là số lẻ)
-Để in ra màn hình các số từ 1 đến n thì ta dùng câu lệnh nào?
(for i:=1 to n do)
-Kết hợp với phép chia cho 2 thì ta tìm được số chẵn, số lẻ.
For i:=1 to n do
If I mod 2=0 then write(i:4)
Else write(i:4);
Ta có thể giải quyết được bài tốn bằng cách sử dụng cấu trúc For... do như
sau
• Chương trình pascal
Kết quả thu được


Ví dụ 4: Tìm bội số chung nhỏ nhất của hai số ngun dương
• Nhận xét:

- Thuật tốn cho thấy là trong q trình tính tốn, khơng thể biết trước được
quá trình nhân phải thực hiện lặp lại bao nhiêu lần. Trường hợp này phải sử
dụng cấu trúc lặp với số lần lặp không xác định.
- Điều kiện để dừng là tích số chia hết cho số thứ hai
Chương trình

Kết quả

Ví dụ 5: Tìm Ước số chung lớn nhất của hai số ngun dương m, n.
• Thuật tốn:
Nếu m>n thì lấy m = m – n
Nếu m vẫn lớn hơn n thì tiếp tục lấy m = m - n
Nếu m< n thì lấy n = n - m
Nếu n vẫn lớn hơn m thì tiếp tục lấy n = n – m
Lặp lại thuật toán trên cho đến khi m = n. Lúc đó m = n là ƯSCLN
• Nhận xét:
Thuật tốn cho thấy khơng thể xác đinh trước được phép trừ phải thực hiện lặp
lại bao nhiêu lần. Trường hợp này phải sử dụng cấu trúc lặp với số lần lặp
không
xác
định.
Điều kiện để dừng là hai số bằng nhau.
• Chương trình
Program USCLN;
Var x, y: Integer;
Begin
Write(‘x = ‘);Readln(x);
Write(y = ‘);Readln(y);



While x <> y do
If x>y then x := x – y
else y := y – x;
Writeln(‘USCLN la: ‘, x)
Readln;
End.
Ví dụ 6: Người ta chứng minh rằng, các tổng Tn :
T1= 1+1/2
T2=1+1/2+1/3
T3=1+1/2+1/3+1/4
.....
T4=1+1/2+1/3+...+1/n+1
Ln tăng có thể lớn hơn một số bất kỳ, mặc dù chỉ cộng thêm một số rất nhỏ
ở mỗi bước. Viết chương trình nhập số thực A và tìm số tự nhiên nhỏ nhất N
sao cho:
1+1/2+1/3+...+1/n>A
Nhận xét:
Với ví dụ này, vì bài tập có điều kiện đã rõ ràng, chương trình sẽ lặp lại cho
đến khi tổng lớn hơn số thực A được nhập từ bàn phím, nên ta sử dụng vịng
lặp While...do
Chương trình như sau
Kết quả

Ví dụ 7: Viết chương trình tính tổng các số lẻ sao cho tổng lớn hơn 200.


Nhận xét: Đối với bài tập này, các em đã biết sử dùng cấu trúc while…
do để lập trình, tuy nhiên, phần đa số các em lại xác định sai điều kiện của bài
toán, các em lầm tưởng điều kiện của bài toán là Tong>200 với câu lệnh là
While Tong>200 do, điều này dẫn đến bài toán rơi vào lặp vơ hạn. Cần hướng

dẫn các em hiểu rằng vì Tong lớn hơn 200 nên khi nào Tong<=200 thì chương
trình vẫn cịn thực hiện cơng việc lặp đó là tính tổng các số lẻ.
chương trình như sau:
Program ct;
Uses crt;
Var Tong,i:integer;
BEGIN
Clrscr;
Tong:=0; i:=0;
While Tong<=200 do
Begin
i:=i+1;
if (i mod 2<>0) then
Tong:=Tong+i;
End;
Write(‘Tong cac so le lon hon 200 la: ‘,Tong);
Readln;
END.
Ví dụ 8: Lập trình liệt kê và đếm các số nguyên tố từ 2 đến n
Nhận xét: Đây là bài toán vừa phải duyệt và đếm các số trong khoảng từ 2
đến n, nên ta phải dùng 2 vòng cấu trúc lặp lồng nhau, với bài tốn này, ta nên
sử dụng cấu trúc for…do vì ta đã biết trước được số lần lặp lại
Chương trình
Kết quả nhận được


Qua các ví dụ tơi đã hướng dẫn cho các em biết cách dùng vòng lặp sao
cho phù hợp với từng bài tốn, có những bài tốn ta có thể dùng cấu trúc
“for…do” hoặc “While…do” đều được nhưng có những bài tốn ta chỉ có thể
dùng for…do hoặc chỉ có thể dùng While…do, có những bài tốn ta phải dùng

các cấu trúc lặp lồng nhau (như ví dụ 8), và có những bài tốn ta cần phải kết
hợp nhiều cấu trúc lặp với nhau mới có thể giải quyết được. Nếu hiểu được
bản chất và hoạt động của mỗi cấu trúc các em sẽ biết vận dụng dễ dàng để lập
trình
2.4. Hiệu quả của SKKN
Sau khi vận dụng sáng kiến này vào giảng dạy, trong năm học 20172018. Tôi nhận thấy có sự chuyển biến tích cực từ học sinh.
Để thấy rõ được kết quả này, tôi cũng tiến hành kiểm tra lại HS với nội
dung đề kiểm tra như trên:
Tôi đã thu được kết quả như sau:
Tổng số
Giỏi
Khá
TB
Yếu
Kém
SL %
SL %
SL %
SL %
HS được SL %
khảo sát
78
14 17.9 27 34.6 33 42.4
3
3.8
1
1.3
Như vậy rõ ràng so với trước, sau khi được hướng dẫn kỹ về cấu trúc
lặp cũng như các bài tập minh họa, tôi thấy phần lớn các em hiểu bài hơn, kỹ
năng vận dung kiến thức để lập trình giải các bài tốn có chuyển biến tích cực

hơn, số học sinh đạt điểm khá, giỏi tăng lên rõ rệt, giảm hẳn số điểm Yếu –
Kém. Tuy nhiên một số học sinh yếu kém mất kiến thức căn bản ở mơn Tốn,
thêm vào đó có một số thuật tốn các em chưa được học trong chương trình,
nên giáo viên phải kiên trì, nhẫn nại, thậm chí mất nhiều thời gian trong việc
hướng dẫn các thuật toán cho các em.
Vận dụng sáng kiến này vào giảng dạy, tôi thấy kết quả học tập đã được
cải thiện rõ rệt, các em thấy hào hứng hơn mỗi khi phải lập trình giải tốn và
u thích mơn học hơn, góp phần nâng cao hiệu quả giảng dạy mơn Tin học 8
nói riêng và hiệu quả giáo dục nói chung.


3. KẾT LUẬN- KIẾN NGHỊ

3.1. Kết luận
Trên đây là tóm lược nội dung cú pháp, cách thực hiện các câu lệnh
thuộc cấu trúc lặp và phân tích trên ngơn ngữ lập trình Pascal, một số ví dụ
của các bài tốn điển hình cho từng dạng lặp cụ thể mà bản thân đã đúc kết
được trong q trình giảng dạy mơn tin học ở trường. Qua đó giúp học sinh và
đồng nghiệp có thể làm tài liệu tham khảo trong quá trình học tập và giảng dạy
của mình có hiệu quả.
Trong phạm vi là một sáng kiến kinh nghiệm có thể việc phân tích về
nội dung câu lệnh và ví dụ về các dạng lệnh có thể chưa thật chi tiết và phong
phú, rất mong nhận được sự góp ý chân thành từ quý đồng nghiệp, học sinh để
đề tài được hoàn thiện hơn.
3.2. Kiến nghị - Đề xuất
3.2.1. Đối với Sở GD&ĐT, Bộ GD&ĐT
Trong đề án thay SGK , nên chọn và biên soạn nội dung SGK theo định
hướng phát triển năng lực HS, giảm nội dung lý thuyết quá trừu tượng ở bộ
mơn, xây dựng các bài tốn gắn liền với thực tiễn học tập của học sinh và theo
“hướng mở” để phù hợp với sự ngày các phát triển hiện đại của cơng nghệ

thơng tin.
3.2.2. Đối với Phịng GD&ĐT huyện – tỉnh
Đào tạo và bồi dưỡng chuyên sâu thêm các chuyên đề về chương trình
Tin học, đặc biệt là các chuyên đề về lập trình trong chương trình Tin học 8.
Phòng giáo dục nên tổ chức các buổi giao lưu, thi học sinh giỏi môn Tin
học 8 để phát triển hơn nữa năng lực của các học sinh.
Chắc chắn kinh nghiệm tơi trình bày trên đây cịn có những thiếu sót.
Rất mong nhận được ý kiến đóng góp của đồng nghiệp và những người quan
tâm đến nội dung này.
Tôi xin trân trọng cảm ơn!
XÁC NHẬN
CỦA THỦ TRƯỞNG ĐƠN VỊ
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.
NGƯỜI VIẾT
Lê Thị Vân


MỤC LỤC
Tên đề mục
1. PHẦN MỞ ĐẦU
1.1. Lý do chọn đề tài
1.2. Mục đích nghiên cứu
1.3. Đối tượng nghiên cứu
1.4. Phương pháp nghiên cứu
2. NỘI DUNG
2.1. Cơ sở lý luận
2.2. Thực trạng
2.3. Giải pháp giải quyết vấn đề

2.4. Hiệu quả của SKKN
3. KẾT LUẬN, KIẾN NGHỊ

Trang
1
1
2
2
3
4
4
4
9
25
26


TÀI LIỆU THAM KHẢO
1. Sách Tin học dành cho THCS Quyển 3
2. Sách Bài tập Tin học Quyển 3.
3. Sách Turbo Pascal 7.0 (Bùi Thế Tâm)
4. Sách Cấu trúc dữ liệu và thuật toán (TS Lê Minh Trung. TP Hồ Chí
Minh 10/1994)
5. Lập trình Pascal (Bùi Việt Hà – Nhà XBGD)
6. Tài liệu trên mạng


×