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

Một số ví dụ giúp học sinh vận dụng giải bài tập về câu lệnh lặp while...do 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 (240 KB, 27 trang )

MỤC LỤC
Nội dung

Trang

MỤC LỤC

1

1. CƠ SỞ ĐỀ XUẤT GIẢI PHÁP

3

1.1. Sự cần thiết hình thành giải pháp

3

1.2. Mục tiêu của giải pháp

4

1.3. Các căn cứ đề xuất giải pháp

5

1.3.1. Căn cứ lý luận

5

1.3.2. Căn cứ vào tình hình thực tiễn


6

1.4. Phương pháp thực hiện

8

1.4.1. Phương pháp nghiên cứu tài liệu

8

1.4.2. Phương pháp kiểm tra

8

1.5. Đối tượng áp dụng

8

1.6. Phạm vi áp dụng

8

2. QUÁ TRÌNH HÌNH THÀNH VÀ NỘI DUNG GIẢI PHÁP

8

2.1. Giải pháp đã biết

8


2.2. Nội dung của giải pháp mới hiện nay

9

2.2.1. Vận dụng cấu trúc câu lệnh lặp while...do, chỉ ra lỗi ở
các câu lệnh

11

2.2.2. Vận dụng cấu trúc câu lệnh lặp while...do giải các bài tập
dạng lặp với số lần lặp chưa biết trước

12

2.2.3. Chuyển đổi vận dụng cấu trúc câu lệnh lặp while...do giải
các bài tập lặp với số lần lặp cho trước

14

2.2.4. Một số lỗi thường gặp khi các em viết chương trình

19

3. HIỆU QUẢ GIẢI PHÁP

21

3.1. Thời gian áp dụng

21


3.2. Hiệu quả đạt được

21

1


3.3. Khả năng triển khai, áp dụng giải pháp

23

4. KẾT LUẬN VÀ ĐỀ XUẤT, KHUYẾN NGHỊ

23

4.1. Kết luận

23

4.2. Bài học kinh nghiệm

24

4.3. Đề xuất, khuyến nghị

25

TÀI LIỆU THAM KHẢO


26

2


1. CƠ SỞ ĐỀ XUẤT GIẢI PHÁP
1.1. Sự cần thiết hình thành giải pháp
Ngày nay, với sự phát triển nhanh chóng của khoa học công nghệ nói
chung của ngành tin học nói riêng, với những tính năng ưu việt, sự tiện dụng
và được ứng dụng rộng rãi, tin học ngày nay là một phần không thể thiếu
được của nhiều ngành trong công cuộc xây dựng và phát triển xã hội. Hơn thế
nữa nó còn đi sâu vào đời sống của con người.
Để đáp ứng được các yêu cầu trên, môn Tin học đã được đưa vào
giảng dạy ở hầu hết các trường phổ thông. Môn học này giúp học sinh bước
đầu làm quen với phương pháp giải quyết vấn đề theo quy trình công nghệ và
kĩ năng sử dụng máy tính phục vụ học tập và cuộc sống. Với môn tin học, học
sinh không những được học cách sử dụng, giao tiếp với máy tính, sử dụng các
phần mềm như: trình soạn thảo văn bản, chương trình bảng tính, trình duyệt
web… mà học sinh còn được cung cấp những bài học căn bản về lập trình với
ngôn ngữ lập trình Pascal.
Trong quá 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 toán các em chưa được học ở
bộ môn Toán, thêm vào đó là các em phải 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 môn học. Và đặc biệt, do mới bước đầu, học
sinh được biết đến lập trình và ngôn ngữ lập trình, nên việc vận dụng các câu
lệnh, các cấu trúc điều khiển làm sao để từ các thuật toán có thể xây dựng
được chương trình thì đa phần học sinh còn gặp không ít khó khăn, đặc biệt là
việc vận dụng các cấu trúc điều khiển như: cấu trúc điều khiển rẽ nhánh, cấu

trúc điều khiển lặp.

3


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. Và bằng kinh nghiệm, tôi đã đưa ra những tóm lược cơ bản nhất của
câu lệnh lặp while…do (câu lệnh lặp với số lần chưa biết trước) và đưa ra một
số ví dụ cơ bản để học sinh vận dụng cấu trúc câu lệnh lặp này để giải các bài
tập có hiệu quả, 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 hứng thú trong học tập. Cùng với công tác giảng dạy qua các tiết
hội giảng, cùng với sự giúp đỡ của ban giám hiệu và đồng nghiệp và với vốn
kiến thức, kinh nghiệm của mình, tôi đã đúc kết được một vài kinh nghiệm để
viết sáng kiến giải pháp: “Một số ví dụ giúp học sinh vận dụng giải bài tập về
câu lệnh lặp while...do tin học 8”. Với thời gian còn hạn chế, chắc rằng sáng
kiến của tôi còn nhiều thiếu sót. Kính mong quý đồng nghiệp có thêm nhiều ý
kiến đóng góp để bản báo cáo này được hoàn chỉnh và đạt hiệu quả sử dụng.
1.2. Mục tiêu của giải pháp
- Trang bị kiến thức giúp học sinh ham học môn tin học đặc biệt là lập trình
Pascal hơn, không còn lo sợ khi học môn này đặc biệt là khi dùng câu lệnh
lặp while…do để giải bài tập.
- Giáo dục ý thức, xây dựng tính cẩn thận, ưa tìm tòi, khắc sâu các kiến thức
đã học.
- Giúp HS nhận thức các kiến thức và có ý chí vươn lên trong học tập, các em
hứng thú say mê không mệt mỏi để phát triển trí tuệ của bản thân.
- Từ đó giúp HS nhận thức học tập tốt, nhanh nhẹn, tư duy, sáng tạo tìm tòi
các kiến thức.
- Hình thành cho học sinh một số phẩm chất và năng lực cần thiết cho người
lao động hiện đại.
- Góp phần hình thành và phát triển tư duy trong việc tiếp nhận công nghệ

mới.

4


- Có ý thức và thói quen sử dụng máy tính trong hoạt động học tập, lao động
xã hội hiện đại.
- Biết được sự đa dạng và phong phú của các thiết bị trong thời đại bùng nổ
công nghệ thông tin như hiện nay.
- Giúp giáo viên có thêm tài liệu để hướng dẫn truyền tải kiến thức cho học
sinh dễ hiểu hơn, cũng như giúp cho chính mình nâng cao trình độ chuyên
môn tốt hơn.
1.3. Các căn cứ đề xuất giải pháp
1.3.1. Căn cứ lý luận
- Thực hiện có hiệu quả Nghị quyết số 29-NQ/TW ngày 04/11/2013-Hội
nghị lần 8 /BCHTW Khóa XI về “Đổi mới căn bản, toàn diện giáo dục và đào
tạo đáp ứng yêu cầu công nghiệp hóa, hiện đại hóa trong điều kiện kinh tế thị
trường định hướng xã hội chủ nghĩa và hội nhập quốc tế”. Tiếp tục thực hiện
có hiệu quả, sáng tạo việc học tập và làm theo tấm gương đạo đức Hồ Chí
Minh theo Chỉ thị số 03-CT/TW ngày 14/5/2011 của Bộ Chính trị; chương
trình hành động của Sở GDĐT, Tỉnh ủy và UBND Tỉnh. Các cuộc vận động,
các phong trào thi đua của ngành bằng những việc làm thiết thực, hiệu quả,
phù hợp điều kiện của của nhà trường, của tổ chuyên môn.
- Thực hiện phong trào thi đua viết sáng kiến kinh nghiệm của phòng giáo dục
và đào tạo huyện Châu Đức - tỉnh Bà Rịa Vũng Tàu.
Đặc trưng của môn Tin học là khoa học gắn liền với công nghệ, do vậy
một mặt trang bị cho học sinh kiến thức khoa học về Tin học, phát triển tư
duy thuật toán, rèn luyện kĩ năng giải quyết vấn đề, mặt khác phải chú trọng
đến rèn luyện kĩ năng thực hành, ứng dụng, tạo mọi điều kiện để học sinh
được thực hành, nắm bắt và tiếp cận những công nghệ mới của Tin học phục

vụ học tập và đời sống. Nội dung chương của môn Tin học hiện hành ở các
trường phổ thông đã đáp ứng được những yêu cầu trên.

5


- Qua giảng dạy tôi thấy môn tin học, ở chương trình lớp 8 học sinh
mới bắt đầu làm quen với ngôn ngữ lập trình (Pascal) một ngôn ngữ lập trình
có tính cấu trúc chặt chẽ từ cấu trúc dữ liệu, cấu trúc các câu lệnh đến cấu trúc
một chương trình, học sinh được học cách làm ra các ứng dụng cho máy tính,
được trải nghiệm và rèn luyện tính tư duy logic trong lập trình thông qua một
ngôn ngữ bậc cao đơn giản, gần gũi. Tuy nhiên do mới là bước đầu học sinh
được biết đến lập trình và ngôn ngữ lập trình, và đa phần học sinh còn gặp
không ít khó khăn, đặc biệt là việc vận dụng các cấu trúc điều khiển lặp…
Xuất phát từ những lý do trên, tôi nghiên cứu và viết lên suy nghĩ của mình,
trình bày một số ý kiến nhỏ về nội dung: “Một số ví dụ giúp học sinh vận
dụng giải bài tập về câu lệnh lặp while…do tin học 8”.
1.3.2. Căn cứ vào tình hình thực tiễn
Nhà trường đã trang bị cho phòng máy tính, máy chiếu, do đó trong các
giờ học, học sinh có điều kiện tiếp cận với công nghệ thông tin, thể nghiệm
thao tác trực tiếp trên máy nên dễ dàng nắm bắt nội dung của bài học.
Đối với giáo viên là giáo viên trẻ đã có điều kiện tiếp cận với những
tiến bộ của công nghệ thông tin, hỗ trợ rất lớn cho công tác giảng dạy.
Qua chương trình tin học lớp 6,7 các em đã được trang bị những kĩ
năng nhất định trong việc sử dụng máy tính.
Tuy đã trang bị cho phòng máy tính nhưng hệ thống phòng thực hành
tin học chưa thực sự đáp ứng được yêu cầu giảng dạy, thiếu thiết bị máy móc
để học sinh thực hành, máy sử dụng lâu đã xuống cấp, hỏng hóc.
Do đặc thù bộ môn, nên nhiều học sinh chưa thực sự say mê với môn
học, thờ ơ và coi nhẹ việc học tin học. Đa phần học sinh trong nhà trường vẫn

còn khó khăn nên ít có điều kiện tiếp cận với công nghệ thông tin. Với nội
dung lập trình trong tin học lớp 8, đây là một nội dung mới và khó đối với đa
số học sinh, phần lớn học sinh thực sự khó khăn trong việc nắm bắt ý nghĩa

6


của từng câu lệnh cũng như cách vận dụng chúng như thế nào trong việc lập
trình, do đó nhiều học sinh sau khi xác định được yêu cầu của bài toán thường
chỉ dừng lại ở việc xây dựng và biểu diễn thuật toán cho bài toán (dưới dạng
sơ đồ hoặc liệt kê các bước) chứ chưa biết sử dụng các câu lệnh như thế nào
để mô tả các thao tác đó thành chương trình, nên kết quả học sinh bế tắc trong
việc giải quyết các bài toán lập trình dẫn đến kết quả giảng dạy chưa cao. Đặc
biêt, khi các em học đến cấu trúc câu lệnh lặp, học sinh khó phân biệt như thế
nào là lặp, cái gì cần lặp và khi nào thì kết thúc việc lặp, do đó khi gặp các bài
toán cần sử dụng cấu trúc lặp để giải quyết đa số học sinh không biết cách
làm, hoặc tìm ra cách làm nhưng không biết làm thế nào để chuyển từ thuật
toán thành chương trình.
Đối với giáo viên trẻ chưa có kinh nghiệm trong công tác giảng dạy nên
việc truyền đạt cho học sinh hiểu đúng bản chất và cách vận dụng các cấu trúc
câu lệnh còn gặp không ít khó khăn, lúng túng đôi khi chú tâm nhiều vào lí
thuyết mà ít quan tâm đến việc hướng dẫn học sinh trực tiếp thực hành nhiều.
Qua việc giảng dạy và tìm hiểu thực tiễn tại trường, tôi thấy còn nhiều
học sinh chưa nắm vững được kiến thức cơ bản trong lập trình, mà trong tin
học 8 nội dung nhiều và khó hiểu nên chất lượng bộ môn vẫn chưa tốt, các em
không có hứng thú học vì môn học mang tính chất thuật giải khó hiểu. Vì vậy,
tôi luôn trăn trở: Làm thế nào để nâng cao chất lượng bộ môn? Làm thế nào
để học sinh hứng thú, say mê trong khi học? Có biện pháp gì để tạo hứng thú
say mê tìm tòi sáng tạo, vận dụng những gì đã học vào thực tiễn?… Với mong
muốn tìm ra những đáp án đó, đã thúc đẩy tôi chọn và nghiên cứu sáng kiến

giải pháp: “Một số ví dụ giúp học sinh vận dụng giải bài tập về câu lệnh lặp
while…do tin học 8”, nhằm góp phần đưa chất lượng môn tin học đi lên, giúp
các em có vốn kiến thức về lập trình, đặc biệt là về câu lệnh lặp với số lần
chưa biết trước vững vàng và không còn sợ khi học lập trình Pascal.

7


1.4. Phương pháp thực hiện:
1.4.1. Phương pháp nghiên cứu tài liệu
- Sưu tầm và nghiên cứu các tài liệu có liên quan: Sách giáo khoa, sách giáo
viên.
- Phương pháp quan sát
- Phương pháp tổng kết kinh nghiệm.
- Phương pháp thực nghiệm.
- Phương pháp đàm thoại nghiên cứu vấn đề.
1.4.2. Phương pháp kiểm tra
Giáo viên lồng ghép trong bài giảng để đưa ra một số câu hỏi, bài tập
để kiểm tra thông qua hoạt động nhóm, phiếu học tập, hoặc tổ chức cho học
sinh trò chơi,…
1.5. Đối tượng áp dụng
Áp dụng cho học sinh khối 8, các giáo viên bộ môn tin học.
1.6. Phạm vi áp dụng
Đề tài được nghiên cứu qua thực tế giảng dạy tại trường THCS Quang
Trung nói chung, tổ Tin học nói riêng. Thông qua giáo viên giảng dạy môn tin
học trong những năm vừa qua và hiện tại.
Do điều kiện và thời gian thực nghiệm còn ngắn, nên phạm vi nghiên
cứu của sáng kiến kinh nghiệm chỉ thực hiện ở môn tin học lớp 8.
2. QUÁ TRÌNH HÌNH THÀNH VÀ NỘI DUNG GIẢI PHÁP
2.1. Giải pháp đã biết

Từ năm học 2015- 2016, và đến năm học 2016- 2017, huyện Châu Đức,
cũng như trường THCS Quang Trung đã áp dụng mô hình trường học mới ở
lớp 6, và lớp 7 với mô hình học này phần lớn đòi hỏi học sinh phải tự giác
học tập là chính. Trong quá trình giảng dạy, tôi nhận thấy đa số học sinh trong
trường chưa ý thức cao trong việc tự học, tự đọc tài liệu trước khi đến lớp để

8


có thể lĩnh hội, tiếp thu kiến thức dễ dàng và dễ hiểu hơn. Và đặc biệt là học
sinh lớp 8, bắt đầu học ngôn ngữ lập trình Pascal, sẽ gặp rất nhiều khó khăn
như sử dụng các câu lệnh, hay một chương trình sẽ được viết như thế nào,
chạy như thế nào mới đúng theo yêu cầu của bài tập. Mà đa số các em còn
nhút nhát, sợ hỏi thầy cô giáo của mình về nội dung chưa hiểu. Và đặc biệt
học sinh còn lẫn lộn giữa câu lệnh lặp for…do với while...do, vì hai câu lệnh
này khó áp dụng để giải các bài tập như thế nào cho phù hợp với hai câu lệnh
đó, nên nhiều em còn sợ học môn lập trình Pascal 8, dù các em có khả năng,
nhưng khi gặp bài rắc rối, khó hơn hoặc không có bài tập mẫu các em làm
không được, và một phần các em chưa có kĩ năng lập trình đúng các trình tự
các bước nên khó giải quyết được vấn đề đặt ra.
2.2. Nội dung của giải pháp mới hiện nay
Bắt nguồn từ thực trạng việc giảng dạy tin học, từ nguyên nhân dẫn đến
tình trạng học sinh chưa có hứng thú học tập lập trình và từ thực tiễn việc học
sinh hiểu và vận dụng các cấu trúc câu lệnh lặp trong lập trình, tôi đã đưa ra
một giải pháp và đã đem lại những hiệu quả trong việc giảng dạy, đó là hướng
dẫn học sinh giải một số bài toán có vận dụng câu lệnh lặp while...do và việc
chuyển đổi từ câu lệnh lặp for…do sang câu lệnh lặp while…do, giúp học
sinh nắm rõ cấu trúc câu lệnh lặp while…do hơn, và biết được một số lỗi
thường gặp, biết cách khắc phục được lỗi đơn giản đó, từ đó các em biết cách
vận dụng vào giải bài tập, tăng hứng thú với môn học và nâng cao chất lượng

giáo dục. Giải pháp cụ thể như sau:
* Cấu trúc của câu lệnh lặp với số lần chưa biết trước while...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>;
Trong đó:
+ while, do là các từ khóa.

9


+ Điều kiện trả về 1 trong 2 giá trị đúng hoặc sai.
+ Câu lệnh: Có thể là câu lệnh đơn hoặc câu lệnh ghép (đặt trong cặp từ khóa
begin...end;).
- Nguyên lý hoạt động:
Bước 1: Kiểm tra điều kiện.
Bước 2:
- Nếu điều kiện sai, câu lệnh sẽ bị bỏ qua và việc thực hiện lệnh lặp kết thúc.
- Nếu điều kiện đúng, thực hiện câu lệnh và quay lại bước 1.
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 chương trình.
* Chú ý:
+ Trong thân chương 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ô hạn.
+ Chương trình lớp 8: Điều kiện là biểu thức quan hệ (hay gọi là các phép so
sánh) hoặc biểu thức logic.
Biểu thức quan hệ như:
Các phép quan hệ


Mô tả

Ví dụ

=

Bằng

5=5

<

Nhỏ hơn

4<5

>

Lớn hơn

7+x>5

<>

Khác

a+1<>0

<=
>=


Nhỏ hơn hoặc bằng
Lớn hơn hoặc bằng

4<=6
5>=2

10


- Biểu thức logic như:
+ Phép AND (và): Giá trị của phép so sánh này đúng khi và chỉ khi tất cả các
phép so sánh đơn giản đều đúng. Ngược lại, cho giá trị sai.
Ví dụ: (a>1) and (a<=5) (a là số nguyên)
Khi a=2,3,4,5 cho kết quả đúng, tất cả các số còn lại của a đều cho kết
quả sai.
Như a=0, kiểm tra a>1 sai, a<=5 đúng, do đó, (a>1) and (a<=5) thì kết
quả cuối cùng là sai.
+ Phép OR (hoặc): Giá trị của phép so sánh này sai khi tất cả các phép so
sánh đơn giản đều sai. Ngược lại, cho giá trị đúng.
Ví dụ: (a>1) or (a>=5) (a là số nguyên)
Khi a=2, kiểm tra điều kiện: a>1 đúng, a>=5 sai, do đó (a>1) or (a>=5)
thì cho ra kết quả đúng.
Khi a=0, kiểm tra điều kiện: a>1 sai, a>=5 sai, do đó, (a>1) or (a>=5)
cho ra kết quả sai.
2.2.1. Vận dụng cấu trúc câu lệnh lặp while...do, chỉ ra lỗi ở các câu lệnh
Bài 1: Viết sai từ khóa, sai vị trí từ khóa:
a. x:=10; whide (x=10) do x:=x+5;  Từ khóa whide viết sai, viết đúng là
while
b. x:=5; do (x=8) while x:=x+1;  Sai thứ tự từ khóa (trong pascal):

while <điều kiện> do <câu lệnh>, đúng phải là: x:=5; while (x=8) do x:=x+1;
Bài 2: Sai cách viết điều kiện và câu lệnh trong câu lệnh lặp while..do
a. i:=4; while (i:=5) do x:=1;
 Sai, thừa dấu :, vì sau từ khóa while là điều kiện, còn ở đây i:=5 là câu
lệnh gán. Vì vậy, câu lệnh đúng phải là:
i:=4; while (i=5) do x:=1;
b. x=5; while (x=5) do x:=x+3;

11


 Sai, vì thiếu dấu :, ở câu lệnh này, trước từ khóa while là x=5 là một câu
lệnh, nên câu lệnh đúng viết như sau:
x:=5; while (x=5) do x:=x+3;
c. x:=8; while (x<=10) do x=x+1
 Sai, vì thiếu dấu : và dấu;, ở câu lệnh x=x+1, sau từ khóa do là câu lệnh,
kết thúc câu lệnh phải có dấu ;, câu lệnh viết đúng như sau:
x:=8; while (x<=10) do x:=x+1;
d. i:=1; while (i<10) do s:=s+i; i:=i+1;
 Đoạn lệnh này lỗi vì tạo nên vòng lặp vô hạn, không có câu lệnh làm thay
đổi biến i, nên có thể sửa như sau:
i:=1; while (i<10) do begin s:=s+i; i:=i+1; end;
→Lúc này biến i đã được thay đổi.
* Chú ý: Câu lệnh ghép đặt trong cặp từ khóa begin…end;
2.2.2. Vận dụng cấu trúc câu lệnh lặp while…do giải các bài tập dạng lặp
với số lần lặp chưa biết trước
Bài tập: Tìm n lớn nhất, sao cho S= 1+ 2 + 3+ … + n, với yêu cầu S<=1000.
Để giải bài toán này, học sinh nắm được như sau:
Câu 1: Yêu cầu của bài toán trên:
- Tìm số n lớn nhất có thể để tổng S vẫn đảm bảo yêu cầu S<=1000.

Câu 2: Số n lớn nhất là bao nhiêu và làm thế nào để tìm được số n:
Học sinh chưa thể đưa ra ngay được giá trị của n, nhưng học sinh biết
được quy luật của bài toán là lần lược đem các số nguyên liên tiếp bắt đầu từ
1 cộng lại để tìm tổng S sao cho đảm bảo yêu cầu S<=1000, số cuối cùng
thỏa mãn trong dãy đó chính là giá trị của n. Nói cách khác là lần lượt cho n
nhận các số xuất phát từ 1 và cộng lần lượt vào S cho đến khi n đạt giá trị lớn
nhất mà S vẫn đảm bảo yêu cầu S<=1000.
Câu 3: Công việc gì được lặp lại, số lần lặp là bao nhiêu lần:

12


Công việc lặp lại là lần lượt tăng n mỗi lần 1 đơn vị và cộng vào S cho
đến khi nào tìm được n lớn nhất, và phải đảm bảo yêu cầu S<=1000. Vì vậy,
số lần lặp chưa biết là bao nhiêu lần.
Câu 4: Khi nào thì còn thực hiện tăng n và cộng vào tổng S:
Trong khi S<=1000 thì còn thực hiện thao tác đã nêu.
Từ đó, học sinh dễ dàng nhận thấy không thể sử dụng cấu trúc for...do trong
trường hợp này.
S:=0;
n:=0;
While (S<=1000) do
Begin
n:=n+1;
S:=S+n;
end;
- Chương trình mẫu như sau:
Var s, n:integer;
Begin
S:=0; n:=0;

While (S<=1000) do
Begin
n:=n+1;
S:=S+n;
end;
writeln(‘so n lon nhat de S<=1000 la’,n);
writeln(‘tong de so n lon nhat thoa S<=1000 la’,s);
readln
end.

13


Với câu lệnh writeln(‘tong de so n lon nhat thoa S<=1000 la’,s); đề bài
không yêu cầu in kết quả này ra màn hình nhưng chương trình mẫu giúp các
em biết được khi n đạt giá trị lớn nhất thõa yêu cầu S<=1000 thì tổng cuối
cùng sẽ bằng bao nhiêu.
Kết luận: Những bài toán có dạng lặp nhưng số lần lặp chưa cụ thể là bao
nhiêu cần phải xác định: Công việc gì cần lặp lại, khi nào thì còn thực hiện
thao tác lặp đó. Học sinh có thể phát biểu cấu trúc câu lệnh lặp while...do như
sau: “ trong khi điều kiện còn đúng thì còn thực hiện công việc”.
2.2.3. Chuyển đổi vận dụng cấu trúc câu lệnh lặp while...do giải các bài
tập lặp với số lần lặp cho trước
Để các em hiểu hơn về việc chuyển đổi qua lại giữa hai cấu trúc này,
cho các em xem một ví dụ minh họa như sau:

- Các em quan sát hình 1 và cho biết phải đổ bao nhiêu lần thì bình sẽ được
đổ đầy nước và công việc gì được làm đi làm lại nhiều lần.
+ Số lần thực hiện là 50 lần và công việc được làm đi làm lại là công việc đổ
nước vào bình.

- Tiếp theo cho các em xem hình thứ 2 như sau:

14


+ Các em có biết được số lần thực hiện công việc đổ nước không?
+ Đổ khi nào thì dừng việc đổ nước?
- Câu trả lời là: Chưa biết được số lần đổ và thực hiện công việc đổ nước cho
đến khi bình đầy thì dừng việc đổ nước lại.
=> Từ hai hình ảnh trên có thể giúp cho các em hiểu và biết được như thế nào
là lặp và phân biệt được 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.
Dựa vào ví dụ minh họa trên và các bài tập sau sẽ giúp học sinh hiểu rõ
hơn nữa về câu lệnh lặp với số lần chưa biết trước.
Bài 1: Tính và đưa kết quả ra màn hình tổng S sau:

S =1 +2 +3 +... +n
Với n là số nguyên được nhập từ bàn phím
Học sinh cần nắm được bài 1 như sau:
Câu 1: Bài 1 đã xác định được lần lặp là bao nhiêu lần:
- Đã xác định được lần lặp, cụ thể cộng dồn từ 1 đến n để tính tổng S

15


Câu 2: Viết câu lệnh lặp dùng for…do để tính tổng S như sau:
Vì n được nhập từ bàn phím nên giá trị n đã được biết.
S:=0;
for i:=1 to n do
S:=S+i;

Câu 3: Có thể dùng câu lệnh while...do để viết cho bài 1 như sau: lần lượt cho
biến đếm (cụ thể là biến i) nhận giá trị là các số xuất phát từ 1 tới n và cộng
lần lượt vào S, công việc này còn thực hiện khi vẫn đảm bảo điều kiện i<=n.
Khi dùng câu lệnh lặp while...do phải dùng thêm câu lệnh gán i:=i+1; để làm
thay đổi giá trị của điều kiện, cụ thể là điều kiện (i<=n) phải được thay đổi,
như sau:
S:=0; i:=1;
While (i<=n) do
Begin
s:=s+i;
i:=i+1;
end;
Bài 2:
a. Tính và đưa kết quả ra màn hình tổng S sau:
S = 1+

1 1
1
+ + ... + ; Với n là số nguyên được nhập từ bàn phím.
2 3
n

b. Tính và đưa kết quả ra màn hình tổng S sau:
S = 1+

Với

1 1
1
+ + ... +

2 3
n

1
< ε , với ε là sai số, được nhập từ bàn phím.
n

Câu 1: Câu a đã xác định được lần lặp chưa:

16


Đã xác định được lần lặp, cụ thể cộng dồn đến n vì n đã được biết trước
(n nhập từ bàn phím).
Câu 2: Viết câu lệnh lặp để tính tổng S ở câu a dùng câu lệnh lặp for…do như
sau:
S:=0;
for i:=1 to n do
S:=S+1/i;
Câu 3: Câu b đã xác định được lần lặp chưa:
- Chưa xác định được lần lặp, vì

1
< ε không xác định được cụ thể n bằng bao
n

nhiêu. Vì vậy, với câu b này, thì công việc lặp sẽ lặp đi lặp lại khi
đến khi

1

>= ε , cho
n

1
< ε thì công việc lặp sẽ kết thúc.
n

Câu 4: Câu lệnh lặp để tính tổng S ở câu b như sau: (biến saiso được nhập từ
bàn phím)
S:=0;
n:=1;
While (1/n>=saiso) do
Begin
S:=S+1/n;
n:=n+1;
End;
- Học sinh tự hoàn chỉnh chương trình dựa trên hai vòng lặp đã có ở trên.
Câu 5: Sự tương đồng của câu a, b:
Xuất phát, S được gán giá trị: 0;
Tiếp theo, cộng dồn vào S một giá trị: 1/n, với n tăng từ 1,2,3…
Câu 6: Hai bài toán trên khác nhau:

17


Câu a đã biết số lần lặp cụ thể, câu b chưa xác định được lần lặp cụ thể


1
< ε không xác định được cụ thể n bằng bao nhiêu.

n

Câu 7: Câu lệnh lặp while…do viết được vòng lặp tính tổng S ở câu a
Vậy có thể dùng câu lệnh lặp for…do để viết vòng lặp tính tổng S ở
câu b được không:
- Dùng câu lệnh lặp lặp while…do để thực hiện vòng lặp cho câu lệnh lặp
for…do là có thể làm được, nhưng việc dùng câu lệnh lặp for…do để thực
hiện vòng lặp cho câu lệnh lặp while…do là không được vì:
+ Câu lệnh lặp 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 lặp 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 lặp for…do kết thúc khi biến đếm > Giá trị cuối. Còn trong câu
lệnh lặp 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 2 câu a, ta có thể thực hiện
như sau:
S:=0;
i:=1;
While (i<=n) do
Begin
S:=S+ 1/ i;
i:=i+1;
end;
+ Câu lệnh lặp 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 của câu lệnh lặp for…do để thực hiện tính tổng S
cho bài 2 câu b.

18



Kết luận: Câu lệnh lặp while…do có thể áp dụng để giải các bài toán có dạng
lặp với số lần biết trước, còn câu lệnh lặp for...do không thể áp dụng để giải
các bài toán có dạng lặp với số lần chưa biết trước.
* So sánh câu lệnh lặp với số lần chưa biết trước và câu lệnh lặp với số lần
biết trước
Mục đích: Giúp cho học sinh phân biệt được hai câu lệnh này.
a) Câu lệnh lặp với số lần lặp biết trước chỉ thị cho máy tính thực hiện một
lệnh hoặc một nhóm lệnh với số lần đã được xác định từ trước, còn với câu
lệnh lặp với số lần lặp chưa biết trước thì số lần lặp chưa được xác định trước.
b) Trong câu lệnh lặp với số lần cho trước, điều kiện là giá trị của một biến
đếm có giá trị nguyên đã đạt được giá trị lớn nhất hay chưa.
c) Trong câu lệnh lặp với số lần biết trước, câu lệnh được thực hiện ít nhất
một lần, sau đó kiểm tra điều kiện. Trong câu lệnh lặp với số lần chưa biết
trước, điều kiện được kiểm tra: nếu điều kiện được thoả mãn, câu lệnh mới
được thực hiện. Do đó có thể có trường hợp câu lệnh không được thực hiện
nếu kiểm tra điều kiện không được thõa mãn.
2.2.4. Một số lỗi thường gặp khi các em viết chương trình
- Khai báo thiếu biến.
- Lỗi đặt tên hằng, biến trùng nhau.
Ví dụ: var a, A: byte (Pascal không phân biệt chữ hoa và chữ thường)
- Lỗi đặt tên hằng, biến, tên chương trình,... không đúng quy định của ngôn
ngữ lập trình. Ví dụ: var end:real; (tên của biến không được đặt là end trùng
với từ khóa end; trong chương trình).
- Ngăn cách giữa các biến phải là dấu phẩy thì các em dùng dấu chấm phẩy ;
- Khi kết thúc câu lệnh không có dấu chấm phẩy ;
- Thiếu dấu ngoặc tròn trong biểu thức lôgic.
- Tràn số do không xác định được miền giá trị của biến.

19



- Gán kết quả phép chia cho biến kiểu số nguyên.
- Khi viết từ khóa thường viết sai lỗi chính tả.
Ví dụ: const lại viết thành cost, writeln lại viết là writenl, read lại viết là real ..
- Viết sai câu lệnh gán (:=), và thường lẫn lộn với phép toán quan hệ bằng (=)
Ví dụ: câu lệnh gán x:=5; lại viết là x=5;
- Khai báo biến thuộc kiểu dữ liệu này nhưng trong phần thân chương trình lại
dùng biến đó với kiểu dữ liệu khác.
- Lặp vô hạn: vì vậy sử dụng câu lệnh lặp while..do, trong thân chương 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ô hạn.
Ví dụ:
Var a:integer;
Begin
a:=5;
While (a<6) do write(‘a’);
End.
Vì ban đầu a được gán bằng 5 (a:=5), khi kiểm tra điều kiện thì a<6 đúng, nên
a luôn luôn bé hơn 6, nên vòng lặp cứ chạy và không ngừng vì không có câu
lệnh làm thay đổi giá trị của điều kiện.
- Chạy chương trình mà không quan tâm đến kết quả.
Do đó, để phát hiện ra những lỗi dễ dàng:
+ Các em hãy đọc lại và dịch chương trình để phát hiện lỗi và sau đó sửa lỗi.
Để khắc phục sửa lỗi nhanh, các em có thể sử dụng phần mềm từ điển pascal:
Đây là phần mềm tìm ra lỗi và được thông báo lỗi bằng tiếng Việt nên rất dễ
dùng, nhưng chỉ sử dụng cho trình dịch Turbo Pascal (đang sử dụng trong
chương trình tin học 8).

20



Phần mềm từ điển Pascal chỉ giúp người lập trình tìm và hướng dẫn
cách khắc phục những lỗi về cú pháp, không tìm ra lỗi thuật toán. Ta có thể sử
dụng phần mềm từ điển Dictionary Pascal DP v2.0 BETA.exe của tác giả
Nguyễn Thiên Tứ (Đồng Tháp), địa chi tải về:
www.host.thientu.tk/SOFT/DP/Ver EXE/DP - Tu dien Pascal.rar.
Ví dụ: khi chạy chương trình Turbo Pascal và gặp thông báo lỗi sau:

Lúc đó ta chỉ cần gõ 85 vào ô Type in the keyword to find của phần
mềm từ điển, lúc đó màn hình sẽ xuất hiện thông báo lỗi bằng tiếng Việt và
cách khắc phục như sau:

Như vậy người lập trình chỉ cần tìm và bổ sung dấu chấm phẩy ở cuối
câu lệnh.
3. HIỆU QUẢ GIẢI PHÁP
3.1. Thời gian áp dụng
- Năm 2014-2015, tôi thực hiện sáng kiến này ở hai lớp 8/3,8/4.
- Năm 2015-2016, tại lớp 8/1.
3.2. Hiệu quả đạt được
Để viết được một chương trình Pascal hoàn chỉnh đặc biệt là chương
trình sử dụng câu lệnh lặp với số lần chưa biết trước while…do rất khó đối
với học sinh lớp 8, vì các em đa số không có máy tính ở nhà để tìm tòi thêm,

21


và bài tập về câu lệnh lặp while…do rất là mơ hồ với các em không biết lặp
như thế nào, và lặp bao nhiêu lần sẽ dừng để kết thúc bài toán nên học sinh
thường lúng túng, gặp khó khăn, dẫn đến chán học lập trình và giáo viên
thường phải hoạt động rất nhiều để giúp các em. Vì vậy, tiết học thường loãng

và đôi khi dẫn đến việc cháy giáo án.
Khi học sinh được triển khai và các em được sử dụng đề tài này, tôi
nhận thấy các tiết học lí thuyết, thực hành và ngay cả các tiết bài tập về cách
sử dụng câu lệnh lặp while…do rất sôi nổi, các em biết tự mình tìm ra được
lỗi sai trong câu lệnh; biết áp dụng câu lệnh vào bài tập cơ bản rất tốt. Đặc
biệt, các em đã tự giải thích, chứng minh được cách vận dụng cấu trúc câu
lệnh lặp While…do và khả năng chuyển đổi qua lại giữa hai câu lệnh lặp
trong tin học 8, học sinh đã nắm vững cú pháp, cũng như ý nghĩa của hai câu
lệnh trên. Các em thấy được sự giống và khác nhau của hai câu lệnh một cách
rõ ràng hơn, giúp học sinh nắm rõ bản chất của hiện tượng lặp trong lập trình,
bản chất của câu lệnh lặp với số lần chưa biết trước While…do và cách vận
dụng nó một cách linh hoạt để giải quyết từng bài toán cụ thể. Trong quá trình
học, giáo viên nên cho các em tự trao đổi, thảo luận, trình bày, thì học sinh sẽ
được thể hiện khả năng vận dụng hiểu biết của mình nên các em tỏ ra hăng
hái trong việc phát biểu ý kiến và tranh luận. Đồng thời tiết học trở nên sinh
động hơn và giáo viên không đóng vai trò là người xây dựng lý luận mà học
sinh là người chủ động để giải quyết các vấn đề, khơi dậy ở học sinh hứng thú
với môn học, tạo niềm tin cho học sinh trong khả năng giải quyết các bài toán
lập trình nên tính tự giác, chủ động, tính cực, hứng thú trong học tập được
nhân lên rõ ràng.
Kết quả khảo sát cho thấy: Tỉ lệ học sinh biết tự mình tìm tòi và học hỏi
để giải các bài tập về câu lệnh lặp while…do khi được triển khai và chưa triển
khai đề tài như sau:

22


- Năm 2014- 2015:
+ Lớp 83 chưa được triển khai đề tài chỉ có 8/ 30 em nắm rõ cấu trúc câu lệnh
và biết cách sử dụng câu lệnh lặp while…do giải các bài tập cơ bản trong tin

học lớp 8. Còn 84 được triển khai đề tài thì có 28/ 31 em đã đã nắm rõ cấu
trúc câu lệnh và biết cách sử dụng câu lệnh lặp while…do giải các bài tập cơ
bản trong tin học lớp 8.
LỚP
83
84

CHƯA TRIỂN KHAI
8/30

ĐƯỢC TRIỂN KHAI
28/31

- Năm 2015-2016: tiếp tục triển khai đề tài tại lớp 8 1 có 32 em đã nắm rõ cấu
trúc câu lệnh và biết cách sử dụng câu lệnh lặp while…do giải các bài tập cơ
bản.
LỚP
81

ĐƯỢC TRIỂN KHAI
32/36

3.3. Khả năng triển khai, áp dụng giải pháp
Giải pháp có thể áp dụng cho học sinh khối 8 trong toàn tỉnh, cho giáo
viên giảng dạy bộ môn tin học.
4. KẾT LUẬN VÀ ĐỀ XUẤT, KHUYẾN NGHỊ
4.1. Kết luận
Từ kết quả thu được của việc áp dụng sáng kiến giải pháp cho thấy, so
với các phương pháp khác, việc hướng dẫn học sinh giải các bài tập cụ thể có
sử dụng cấu trúc câu lệnh lặp while…do một cách chi tiết giúp học sinh thấy

rõ bản chất của cấu trúc lặp với số lần chưa biết trước, hiểu và biết vận dụng
chính xác cấu trúc câu lệnh lặp while…do trong việc giải quyết từng bài toán
cụ thể góp phần tạo nên hứng thú cho người học, tăng chất lượng môn học.
Từ đó nhận thấy rằng, việc dạy học tin học nói chung và dạy học lập trình nói
riêng, cách dạy học giúp học sinh hiểu rõ bản chất của vấn đề nên xuất phát từ

23


những bài toán cụ thể cũng như cần phải hướng dẫn một cách chi tiết, điều đó
giúp người học nắm rõ hơn bản chất của vấn đề, từ đó biết vận dụng các kiến
thức lĩnh hội được vào giải quyết các bài toán cần vận dụng các kiến thức đó
tạo niềm tin và hứng thú cho người học, góp phần nâng cao chất lượng giáo
dục bộ môn.
Sau khi nghiên cứu, tham khảo sáng kiến giải pháp này, và cũng áp
dụng ở một số lớp, bản thân người dạy và người học sẽ tích cực hơn. Từ đó
kết quả học tập của các em sẽ tốt hơn; các em sẽ yêu thích, ham mê môn học
hơn.
Các ví dụ trên chắc chắn còn có nhiều hướng khai thác và cách giải
khác, rất mong được sự đóng góp thêm của quý thầy, cô.
Trên đây là những kinh nghiệm của bản thân tôi trong quá trình giảng
dạy. Với thời gian còn hạn chế, chắc rằng sáng kiến giải pháp của tôi còn
nhiều thiếu sót. Kính mong quý đồng nghiệp có thêm nhiều ý kiến đóng góp
để bản báo cáo này được hoàn chỉnh và đạt hiệu quả sử dụng cao hơn. Tôi xin
chân thành cảm ơn.
4.2. Bài học kinh nghiệm
Học sinh đã có hứng thú học hơn về lập trình cũng như phân biệt được
sự khác nhau giữa các cấu trúc câu lệnh lặp trong chương trình 8, thì sẽ có
tâm lý muốn giải các bài tập nâng cao hơn. Vì vậy tùy vào từng mức học của
học sinh, tôi sẽ giao trước các dạng bài tập sao cho phù hợp với các em để các

em chuẩn bị bài trước ở nhà.
Và khi giảng dạy giáo viên cần khích lệ và khuyến khích các em khi
đưa ra các tình huống hay và xử lý các tình huống đó, giáo viên có thể cho
điểm nhưng phải cho điểm đúng với từng mức học của các em. Giáo viên
cũng nên khen ngợi và biểu dương tinh thần học tập của các em, tạo ra một
môi trường học tập tốt, sôi nổi, tích cực để thể hiện được mọi khả năng của

24


các em hơn. Từ đó, các em sẽ rất phấn khởi học tập, cũng như việc làm này
giúp các em có hứng thú và hăng say học tập dù học lập trình rất khô khan và
rất khó với các em mới bắt đầu học năm lớp 8 này.
4.3. Đề xuất, khuyến nghị
* Đối với Phụ huynh:
- Tạo cho con có thói quen học tập, và ý thức tự học, ở nhà có thể trang bị
máy tính để các em thực hành tại nhà để việc học được nâng cao hơn, và có
một tâm lý thoải mái trong học tập.
- Thường xuyên phối hợp với giáo viên chủ nhiệm để biết về những tiến bộ
của các em, qua đó phụ huynh biết để mừng và tiếp tục động viên, hoặc cùng
kết hợp để nhắc nhở, động viên, giáo dục kịp thời.
* Đối với Phòng giáo dục:
- Tổ chức hội thảo chuyên đề cho giáo viên bộ môn tin học trong từng năm để
giáo viên có dịp trao đổi kinh nghiệm, bàn luận tìm ra biện pháp tối ưu, tích
cực nâng cao chất lượng dạy học bộ môn, ví dụ như đưa ra các phương pháp
để dạy câu lệnh lặp while..do tốt nhất, hiệu quả nhất. Giáo viên có kinh
nghiệm nhiều hơn, tốt hơn, phù hợp hơn với học sinh của huyện nhà trong
công tác giảng dạy.

25



×