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ắ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
Trang 12.2.1 Vận dụng cấu trúc câu lệnh lặp while do, chỉ ra lỗi ở
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
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 142.2.4 Một số lỗi thường gặp khi các em viết chương trình 19
Trang 23.3 Khả năng triển khai, áp dụng giải pháp 23
Trang 31 CƠ SỞ ĐỀ XUẤT GIẢI PHÁP
Để đáp ứng được các yêu cầu trên, môn Tin học đã được đưa vàogiả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ọcsinh 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ácphầ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ệtweb… 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ớingô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ó đốivớ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ếngAnh để thể hiện khi lập trình Do đó việc học tập của học sinh vẫn còn mangtí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ínhchất khô khan, khó hiểu trong môn học Và đặc biệt, do mới bước đầu, họcsinh đượ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âulệ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ấutrúc điều khiển lặp
Trang 4Từ thực tế đó, tôi không ngừng học hỏi để tìm ra biện pháp khắcphục Và bằng kinh nghiệm, tôi đã đưa ra những tóm lược cơ bản nhất củacâ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àitậ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ếthộ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ốnkiế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ángkiế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ìnhPascal 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ệnhlặ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
Trang 5- 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ọcsinh dễ hiểu hơn, cũng như giúp cho chính mình nâng cao trình độ chuyênmô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ộinghị lần 8 /BCHTW Khóa XI về “Đổi mới căn bản, toàn diện giáo dục và đàotạ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ươngtrì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ậymộ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áctrường phổ thông đã đáp ứng được những yêu cầu trên
Trang 6- Qua giảng dạy tôi thấy môn tin học, ở chương trình lớp 8 học sinhmớ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úcmộ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ộtngô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ặpkhô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ậndụ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ácgiờ học, học sinh có điều kiện tiếp cận với công nghệ thông tin, thể nghiệmthao 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ữngtiế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ànhtin 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ônhọc, thờ ơ và coi nhẹ việc học tin học Đa phần học sinh trong nhà trường vẫncò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ộidung 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
Trang 7củ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ậptrình, do đó nhiều học sinh sau khi xác định được yêu cầu của bài toán thườngchỉ 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 trongviệ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 Đặcbiê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àitoá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áchlà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ậttoá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ênviệ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úccâ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ềuhọc sinh chưa nắm vững được kiến thức cơ bản trong lập trình, mà trong tinhọ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 emkhô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ớimong muốn tìm ra những đáp án đó, đã thúc đẩy tôi chọn và nghiên cứu sángkiế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
Trang 81.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áoviê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ọcsinh trò chơi,…
Do điều kiện và thời gian thực nghiệm còn ngắn, nên phạm vi nghiêncứ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áchọ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 trongtrường chưa ý thức cao trong việc tự học, tự đọc tài liệu trước khi đến lớp để
Trang 9có 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ọcsinh 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ănnhư 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ònnhú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ệthọ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ệnhnà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àmkhô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 đếntì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ọcsinh 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 ramột giải pháp và đã đem lại những hiệu quả trong việc giảng dạy, đó là hướngdẫ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ệcchuyển đổi từ câu lệnh lặp for…do sang câu lệnh lặp while…do, giúp họcsinh 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ỗithường gặp, biết cách khắc phục được lỗi đơn giản đó, từ đó các em biết cáchvậ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ượnggiá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
Trang 10+ Đ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óabegin 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
Trang 11+ Phép AND (và): Giá trị của phép so sánh này đúng khi và chỉ khi tất cả cácphé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ếtquả sai
Như a=0, kiểm tra a>1 sai, a<=5 đúng, do đó, (a>1) and (a<=5) thì kếtquả 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 sosá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âulệ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;
Trang 12 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âulệnh, nên câu lệnh đúng viết như sau:
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ùngthỏ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 nnhậ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ớnnhấ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:
Trang 13Cô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 trongtrường hợp này
S:=0;
n:=0;
While (S<=1000) do
Beginn:=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
Trang 14Với câu lệnh writeln(‘tong de so n lon nhat thoa S<=1000 la’,s); đề bàikhô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ốicù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à baonhiê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ệnthao 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: