Ví dụ về lặp với số lần chưa biết trước
BÀI 8: LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC Show
1. Các hoạt động lặp với số lần chưa biết trướca. Ví dụ 1:- Một ngày, 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. => Chưa thể biết trước được số lần lặp tối đa. Điều kiện để kết thúc hoạt động lặp đó là có người nhấc máy. b. 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ả:
=> Cần cộng bao nhiêu số tự nhiên đầu tiên để ta nhận được tổng Tn nhỏ nhất lớn hơn 1000? - Phân tích bài toán:
- Mô tả thuật toán: Kí hiệu S là tổng cần tìm và ta có thuật toán như sau:
- Ta có sơ đồ khối :
- Nhận xét: Để viết chương trình chỉ dẫn máy tính thực hiện các hoạt động lặp như trong các ví dụ trên, ta có thể sử dụng câu lệnh có dạng lặp với số lần chưa biết trước. 2. Ví dụ về lệnh lặp với số lần chưa biết trước- Trong Pascal 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 đó:
- Câu lệnh lặp này được thực hiện như sau:
Ví dụ 3:While a<=b do a:=a+1; - Trong đó:
Ví dụ 4:While a>b do Begin write(‘a>b’); a:=a-1; End; - Trong đó:
Ví dụ 5:- Yêu cầu: 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 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. Ví dụ 6:- Yêu cầu: Với giá trị nào của n (n>0) thì \(\frac{1}{n}\) nhỏ hơn 1 sai số cho trước ví dụ: \(\frac{1}{n}< 0,005\) hoặc \(\frac{1}{n}< 0,003\)? 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:5:4, 'la ',n); readln; end. 3. Lặp vô hạn lần – Lỗi lập trình cần tránh- Khi viết chương trình sử dụng cấu trúc lặp cần chú ý tránh tạo nên vòng lặp không bao giờ kết thúc. - Ví dụ 1 chương trình lặp vô hạn như sau: var a:integer; begin a:=5; while a<6 do writeln('A'); end.
Nêu vài ví dụ về hoạt động vòng lặp với số lần biết trước và chưa biết trước Các câu hỏi tương tự
Hoạt động nào sau đây lặp với số lần lặp chưa biết trước? A. Ngày tắm hai lần B. Học bài cho tới khi thuộc bài C. Mỗi tuần đi nhà sách một lần D. Ngày đánh răng 2 lần
Hoạt động nào sau đây là lặp với số lần chưa biết trước: A. Rửa tay B. Múc nước cho C. Lau bảng D. Chạy quanh sân cho đến khi mệt
Hoạt động nào sau đây là lặp với số lần chưa biết trước: A. Rửa tay cho đến khi sạch B. Múc nước C. Lau bảng D. Chạy quanh sân
Hoạt động nào sau đây là lặp với số lần chưa biết trước: A. Rửa tay B. Múc nước C. Chạy quanh sân D. Lau bảng cho đến khi hết bụi
Hoạt động nào sau đây là lặp với số lần chưa biết trước: A. Rửa tay B. Múc nước cho đến khi đầy thùng C. Lau bảng D. Chạy quanh sân
1.1. Các hoạt động lặp với số lần chưa biết trướcVí dụ 1: Một ngày chủ nhật Long gọi điện cho Trang. Không có ai nhấc máy. Long quyết định gọi lại thêm 1 lần nữa. Như vậy Long đã biết trước là mình sẽ lặp lại gọi điện thêm 2 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 có người bắt máy. Điều kiện: Có người nhấc máy thì kết thúc hoạt động lặp. Ví dụ 2: Nếu cộng lần lượt n số tự nhiên đầu tiên (n = 1, 2, 3,...), cần cộng bao nhiêu số tự nhiên đầu tiên để ta nhận được tổng Tn nhỏ nhất lớn hơn 1000? Đ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 Mô tả thuật toán bằng liệt kê:
Mô tả thuật toán bằng sơ đồ khối: Hình 1. Mô tả thuật toán bằng sơ đồ khối KẾT LUẬN:
1.2. Ví dụ về lệnh lặp với số lần chưa biết trướcCú pháp: While < Điều kiện > do < Câu lệnh >; Trong đó:
Hoạt động:
Ví dụ 3: While a<=b>
Ví dụ 4: While a>b do Begin write('a>b'); a:=a-1; End;
Ví dụ 5: Viết câu lệnh in ra 5 số tự nhiên liên tiếp bắt đầu bằng số 1. Gợi ý giải: Sử dụng lệnh lặp với số lần lặp chưa biết trước while…do Đoạn chương trình mẫu: n:=1 while n<=5> begin writeln(n); n:=n+1; end; 1.3. Lặp vô hạn - Lỗi lập trình cần tránhKhi viết chương trình sử dụng cấu trúc lặp cần chú ý tránh tạo nên vòng lặp không bao giờ kết thúc. Chẳng hạn, chương trình dưới đây sẽ lặp lại vô tận: var a:integer; begin a:=5; while a<6> writeln('A'); end.
|