Soạn tin học 8 - Bài 8. Lặp với số lần chưa biết trước

Thứ bảy - 12/10/2019 09:35
Hướng dẫn soạn chi tiết Tin học 8, Bài 8. Lặp với số lần chưa biết trước, Hướng dẫn trả lời câu hỏi và bài tập trong bài học
Bài 8. Lặp với số lần chưa biết trước
Thời lượng: 2 tiết
1. Mục đích, yêu cầu
- Biết nhu cầu cần có cấu trúc lặp với số lần chưa biết trước trong ngôn ngữ lập trình;
- Biết ngôn ngữ lập trình dùng cấu trúc lặp với số lần chưa biết trước để chỉ dẫn máy tính thực hiện lặp đi lặp lại công việc đến khi một điều kiện nào đó được thoả mãn;
- Hiểu hoạt động của câu lệnh lặp với số lần chưa biết trước while...do trong Pascal.

2. Những điểm cần lưu ý và gợi ý dạy học
a) Giống với bài 7, ở phần đầu của bài này GV cần nêu một số ví dụ về hoạt động lặp với số lần chưa biết trước. Ví dụ ở phần đầu trong SGK là một hoạt động trong đời sống. Tương tự như vậy với phần thuật toán nhập số n từ bàn phím. Chừng nào số nhập vào vẫn nhỏ hơn 5 thì chừng đó người dùng sẽ còn tiếp tục thực hiện thao tác nhập số n vào từ bàn phím. GV có thể lưu ý HS về việc người ta thường sử dụng thủ thuật này trong kĩ thuật lập trình để thực hiện lặp đi lặp lại một đoạn chương trình nào đó như ví dụ sẽ được trình bày ở mục b dưới đây.
Ví dụ 1 trong SGK là một bài toán toán học thuần túy.
Trong ví dụ 1, sau khi giới thiệu thuật toán SGK một cách khái quát, đưa ra sơ đồ hoạt động của cấu trúc lặp với số lần chưa biết trước, SGK giới thiệu câu lệnh while...d( của Pascal như một ví dụ minh hoạ. HS được làm quen với cách sử dụng lệnh while...d( qua các ví dụ.

b) Dưới đây gợi ý một cách tiến hành khác để GV tham khảo. Cách tiếp cận này được thực hiện theo phương án đi từ câu lệnh lặp cụ thể while...d( trong Pascal, sau đó khái quát thành kiến thức chung ở các ngôn ngữ lập trình.
Dưới đây là chương trình cho một nhóm bạn HS (ví dụ gồm 5 người) lần lượt nhập tên của mình để thực hiện "màn chào hỏi" với máy tính:
Program Chao_hoi;
uses crt;
var i: interger;
Ten: string;
Begin
for i:=1 to 5 do
Begin write('Nhap ten cua ban: '); Readln(Ten); writeln('Chao ban ', Ten); readln;
end;
End.

Sau khi phân tích chương trình này, GV có thể đặt tình huống nếu chưa biết trước số bạn trong nhóm thì phải viết chương trình như thế nào?
Nếu HS chưa đưa ra được phương án giải quyết cho vấn đề này. GV nên chủ động đưa ra một chương trình Pascal như sau (có thể lưu chương trình này với tên Chao_hoi.pas):
Program Chao_hoi;
uses crt;
var Tieptuc: char;
Ten: string;
Begin
Tieptuc:='c';
while tieptuc = 'c' do
Begin
write('Nhap ten cua ban: '); Readln(Ten); writeln('Chao ban ', Ten);
write('Tiep tuc? c/k'); readln(Tieptuc);
end;
readln
End.

Dựa trên chương trình này, GV giới thiệu về cú pháp, sơ đồ hoạt động của câu lệnh while...do.

c) Trong Pascal, cú pháp câu lệnh lặp với số lần chưa biết trước có dạng: while < điều kiện> do <câu lệnh>;
trong đó:
- điều kiện thường là một phép so sánh;
- câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép.
Câu lệnh lặp này được thực hiện như sau:
1. Kiểm tra điều kiện.
2. Nếu điều kiện SAI, câu lệnh sẽ bị bỏ qua. Nếu điều kiện ĐÚNG, thực hiện câu lệnh và quay lại bước 1.
 
Sơ đồ hoạt động của câu lệnh lặp với số lần chưa biết trước

Việc dịch nghĩa hay diễn giải ý nghĩa của từ tiếng Anh trong câu lệnh while...do có thể là cần thiết đối với HS chưa được học tiếng Anh và để HS dễ nhớ (trong khi ... còn đúng thì thực hiện).

d) Đến đây, GV có thể khái quát cho HS biết rằng các ngôn ngữ lập trình đều có câu lệnh lặp với số lần chưa biết trước, hoạt động của câu lệnh lặp với số lần chưa biết trước ở các ngôn ngữ lập trình là giống nhau. Điểm khác nhau giữa các ngôn ngữ lập trình là cú pháp câu lệnh để thể hiện cấu trúc này.
Phần cuối bài, GV sử dụng các ví dụ trong SGK hoặc lấy ví dụ khác để HS hiểu được hoạt động, viết đúng cú pháp và biết một số trường hợp sử dụng hiệu quả của câu lệnh while...do.
Lưu ý:
- Đối với lệnh lặp while...do, trong các câu lệnh của vòng lặp này cần có câu lệnh làm thay đổi biểu thức điều kiện, có nghĩa là phải có câu lệnh để đến lúc nào đó điều kiện không được thoả mãn, khi đó vòng lặp kết thúc.
Ví dụ trong chương trình Chao_hoi.pas ở trên, điều kiện không được thoả mãn và vòng lặp kết thúc khi điều kiện tieptuc = 'c' cho kết quả sai, tức là tieptuc <> 'c'. Câu lệnh readln(Tieptuc) để gán giá trị cho biến Tieptuc từ bàn phím, giá trị của biểu thức điều kiện thay đổi phụ thuộc vào câu trả lời của người dùng. Khi người dùng nhấn "c" thì vòng lặp tiếp tục, ngược lại, khi người dùng nhấn bất kì chữ cái (hoặc chữ số) nào khác thì vòng lặp kết thúc.
- Trong trường hợp điều kiện luôn được thoả mãn, nghĩa là người dùng luôn luôn nhấn phím c, khi đó chương trình này sẽ tiếp tục lặp đi lặp lại. GV có thể sử dụng chương trình ở mục 2 SGK để giải thích về việc lặp vô hạn có thể xảy ra do lỗi của người lập trình:
var a:integer;
begin
a:=5;
while a<6 do writeln('A');
end.
- Các câu lệnh của vòng lặp có thể không được thực hiện một lần nào cả là một đặc điểm khá quan trọng của câu lệnh while...do. Trong Pascal, để mô tả cấu trúc lặp với số lần chưa biết trước, còn có một câu lệnh khác là Repeat...until. Với câu lệnh Repeat...until có đặc điểm là các câu lệnh trong vòng lặp luôn được thực hiện ít nhất một lần. SGK chỉ giới thiệu câu lệnh while...do. Người ta đã chứng minh được rằng chỉ cần câu lệnh while...do là đủ, có nghĩa là mọi tình huống lặp sử dụng câu lệnh repeat...until đều có thể sử dụng while...do để thay thế. GV không giới thiệu câu lệnh Repeat...until, không so sánh câu lệnh Repeat...until với while...do để tránh quá tải với HS.

3. Hướng dẫn trả lời câu hỏi và bài tập
Bài 1. Có thể nêu rất nhiều ví dụ về các hoạt động lặp với số lần chưa biết trước. Dưới đây là một số ví dụ:
a) Tìm một từ nhất định bị gõ sai chính tả trong văn bản và sửa lại cho đúng. Số từ cần phải sửa chưa được biết trước.

b) Khi chuẩn bị bát phở để phục vụ cho khách, cô bán hàng thường thực hiện các công việc sau đây: Cho một lượng bánh phở vào nồi nước phở để trần bánh phở, cho bánh phở đã trần vào bát, làm chín một ít thịt và cho vào bát bánh phở đã được làm nóng, cho thêm gia vị, chan nước phở đang được đun sôi vào bát phở,... Các thao tác đó được thực hiện lặp lại mỗi khi có khách ăn phở. Trong suốt ca bán hàng số lần thực hiện các thao tác lặp đó là không thể biết trước.

c) Trong xưởng may, mỗi cô công nhân được giao may một chi tiết của chiếc áo, hay chiếc quần với các đường may đã được thiết kế trước. May xong một sản phẩm, cô công nhân sẽ may sản phẩm tiếp theo cho đến khi hết giờ làm việc.

Bài 2. Sự khác biệt giữa câu lệnh lặp với số lần biết trước và câu lệnh với số lần chưa biết trước là:
a) Như tên gọi của nó, câu lệnh lặp với số lần 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 chưa biết trước thì số lần chưa được xác định trước.

b) Trong câu lệnh lặp với số lần biết trước, điều kiện là giá trị của biến đếm có giá trị nguyên đã đạt được giá trị lớn nhất hay chưa, còn trong câu lệnh lặp với số lần chưa biết trước, điều kiện tổng quát hơn, có thể là kiểm tra một giá trị của một số thực, cũng có thể là một điều kiện khác, ví dụ như một số có chia hết cho 3 hay không,...

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 xác định trước, trước hết đ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 một lần nào.

Bài 3. a) Thuật toán 1: Chín vòng lặp được thực hiện. Khi kết thúc thuật toán S = 5.0. Đoạn chương trình Pascal tương ứng:
S:=10; x:=0.5;
while S>5.2 do S:=S - x;
writeln(S);

b) Thuật toán 2: Không vòng lặp nào được thực hiện vì ngay từ đầu điều kiện đã không thoả mãn nên các bước 2 và 3 bị bỏ qua. S = 10 khi kết thúc thuật toán. Đoạn chương trình Pascal tương ứng:
S:=10; n:=0;
while S<10 do
begin n:=n+3; S:=S-n end;
writeln(S);
Nhận xét: Trong các thuật toán và chương trình trên, điều kiện được kiểm tra trước khi các lệnh trong vòng lặp được thực hiện. Do đó nếu điều kiện không được thoả mãn ngay từ đầu, các lệnh trong vòng lặp sẽ bị bỏ qua.

Bài 4. a) Chương trình thực hiện 5 vòng lặp.
b) Vòng lặp trong chương trình được thực hiện vô tận vì sau câu lệnh n:= n + 1 câu lệnh lặp kết thúc và S vẫn mang giá trị 0 nên điều kiện S <= 10 luôn được thoả mãn.
Nhận xét: Trong câu lệnh lặp, điều kiện cần phải được thay đổi để sớm hay muộn chuyển sang trạng thái không thoả mãn. Khi đó vòng lặp mới được kết thúc sau hữu hạn bước. Để làm được điều này, câu lệnh trong câu lệnh lặp while...do thường là câu lệnh ghép.

  Ý kiến bạn đọc

Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây