Bài 8. Lặp với số lần chưa biết trước

Chia sẻ bởi Đặng Vĩnh Thiện | Ngày 24/10/2018 | 64

Chia sẻ tài liệu: Bài 8. Lặp với số lần chưa biết trước thuộc Tin học 8

Nội dung tài liệu:

Cú pháp câu lệnh lặp For…Do
Cú pháp:
For := to do
;
Các em hãy quan sát
VD1: Viết chương trình tính tổng các số tự nhiên từ 1 đến 100
S = 1 + 2 + 3 + . . .+100
Lặp 100 lần
Lặp với số lần biết trước, sử dụng câu lệnh lặp For…Do để viết chương trình
VD2: Viết chương trình nhập vào các số cho đến khi gặp 0 thì dừng lại. Tính tổng các số vừa nhập.
Chưa biết lặp mấy lần
Lặp với số lần chưa biết trước, sử dụng câu lệnh gì để viết chương trình?
Bài 8:
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC
1. Các hoạt động lặp với số lần chưa biết trước
Ví dụ 1: (SGK)
Một ngày chủ nhật, bạn Long gọi điện cho Trang. Không có ai nhấc máy. Long quyết định gọi thêm hai lần nữa. Nếu vẫn không có ai nhấc máy thì chắc là không có ai ở nhà. Như vậy Long đã biết trước là mình sẽ lặp lại hoạt động gọi điện thêm hai lần. Một ngày khác, Long quyết định cứ 10 phút gọi điện một lần cho Trang cho đến khi nào có người nhấc máy. Lần nàyLong sẽ lặp lại hoạt động gọi mấy lần?
Điều kiện để kết thúc hoạt động lăp là gì?
Long chưa biết được sẽ lặp lại hoạt động gọi điện mấy lần.
Điều kiện kết thúc hoạt động lặp là có người nhấc máy
Ví dụ 2: Nếu cộng lần lượt n số tự nhiên đầu tiên (n=1, 2, 3,.), Ta sẽ được các kết quả T1=1, T2=1+2, T3=1+2+3,. tăng dần. Cần cộng bao nhiêu số tự nhiên đầu tiên dể ta nhân được tổng Tn nhỏ nhất lớn hơn 1000 ?
T2 = 1 + 2
T1 = 1
T3 = 1 + 2 + 3
… tăng dần
Cần cộng bao nhiêu số tự nhiên để ta nhận được tổng Tn nhỏ nhất lớn hơn 1000?
Điều kiện như thế nào thì kết thúc hoạt động lặp?
Điều kiện: Khi tổng Tn nhỏ nhất lớn hơn 1000 thì kết thúc hoạt động lặp
Phân tích bài toán:
1
T1 = 1
Đúng
2
T2 = 1 + 2
Đúng
3
T3 = 1 + 2 + 3
Đúng



?
Tn = 1 + 2 + 3 + … +? (Sao cho Tn nhỏ nhất lớn hơn 1000)
Sai, kết thúc việc tính tổng
Kí hiệu S là tổng cần tìm và ta có thuật toán như sau:
Bước 1:
S  0, n  0.
Bước 2:
Nếu S≤1000, n  n+1; Ngược lại, chuyển tới bước 4.
Bước 3:
S  S + n và quay lại bước 2.
Bước 4:
In kết quả: S và n là số tự nhiên nhỏ nhất sao cho S>1000. Kết thúc thuật toán.
Các hoạt động lặp với số lần chưa biết trước phụ thuộc vào cái gì và chỉ dừng lại khi nào?
* Có thể diễn tả bài toán trên bằng sơ đồ như sau:
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 ;
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:
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.
* Ý nghĩa: Trong khi <điều kiện> còn đúng thì thực hiên
2. Ví dụ về lệnh lặp với số lần chưa biết trước
VD1: While a<=b do a:=a+1;
Trong đó :  While, do là các từ khóa.
 Điều kiện là a<=b (chứa phép so sánh).
 Câu lệnh là a:=a+1 (câu lệnh đơn).
VD2: While a>b do
Begin write(‘a>b’); a:=a-1; End;
Trong đó :  While, do là các từ khóa.
 Điều kiện là a>b (chứa phép so sánh).
 Câu lệnh là Write(‘a>b’) và a:=a-1 (câu lệnh ghép).
Câu 1: Trong các hoạt động dưới đây, hoạt động nào là hoạt động lặp với số lần chưa biết trước?
B1: Khởi tạo S=0; N:=0;
B2: Nếu S<= 1000 thỡ thực hiện
tang N thêm 1 đơn vị,
ngược lại chuyển tới B4
B3: Cộng N vào S => sang B2
B4: In kết quả: N là số tự nhiên nhỏ nhất sao cho S>1000, Tổng S và kết thúc
S:=0; N:=0;
WHILE S<=1000 DO
Begin
N:=N+1;
S:=S+N;
END;
Writeln(`Số N nhỏ nhất để S>1000`, N)
Writeln(` Tổng đầu tiên >1000`,S);
Thuật toán
Chương trình
Ví dụ :
cho đến khi S>1000. Cho biết N
Tính tổng
Program Bai_toan;
Uses Crt;
Var N:Integer;
S:Real;
BEGIN
Clrscr;
S:=0;N:=0;
WHILE s< = 1000 DO
BEGIN
N:=N+1;
S:=S+N;
END;
Writeln(`So N nho nhat de tong >1000 la`,N);
Writeln(`Gia tri cua tong S =`,S);
Readln;
END.
Hãy hoàn thiện chương trình giải bài toán trên
Hoạt động nhóm
Câu lệnh lặp với số lần chưa biết trước là câu lệnh nào? Điều kiện và câu lệnh tương ứng trong câu lệnh lặp này là gì?
Giải thích ý nghĩa của câu lệnh lăp trong chương trình này?
Uses crt;
Var x: real;
n: integer;
Const sai_so=0.003;
Begin
clrscr
x:=1; n:=1;
while x>= sai_so do begin n:=n+1; x:=1/n end;
Writeln(` So n nho nhat de 1/n <`, sai_so:6:4, `la `,n);
Readln
End.
S:=0;
For i:=1 to 100 do S:=S + 1/i;
Writeln(` S = `, S:7:2);
Dùng lệnh FOR ...DO
Dùng lệnh Whie...Do
S:=0; i:=1;

While i<=100 do
begin
S:=S + 1/i;
i:=i+1;
end;
Writeln(` S = `, S:7:2);
? Có thể sử dụng lệnh While ... do thay cho câu lệnh For...Do
Ví dụ 2 :
Tính tổng
VD: Dùng câu lệnh lặp While … Do để viết chương trình thể hiện thuật toán trong Ví dụ 2 (Sgk)
var S,n: integer;
Begin
S:=0; n:=0;
while S<=1000 do
begin
n:=n+1; S:=S+n ;
end;
write(‘Tong S= ’,S,‘ va ’,n,’ la so tu nhien nho nhat sao cho S>1000’);
Readln;
End.
Tong S= 1035 va 45 la so tu nhien nho nha sao cho S>1000
3. Lặp vô hạn lần – Lỗi lập trình cần tránh
Lưu ý: Khi viết chương trỡnh với câu lệnh lặp, điều kiện phải được thay đổi để chương trỡnh không gặp lỗi lặp vô hạn.
Ví dụ :
Var
a:integer;
Begin
a:=5;
While a<6 do
Write(` Chuong trinh chay mai khong thoat duoc`);
End.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Đặng Vĩnh Thiện
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)