Ví dụ câu lệnh lặp với số lần chưa biết trước

I. Kiểm tra bài cũCâu 1: Em hãy nêu một vài ví dụ về hoạt động lặp với số lần chưa biết trước trong cuộc sống hàng ngày của chúng ta?Trả lời: - Tập lái xe đến khi biết lái - Học thuộc lòng một bài thơ cho tới khi bố mẹ kiểm tra là đã thuộc thì mới kết thúc, nếu không thì phải học lại… I. Kiểm tra bài cũCâu 2: Em hãy trình bày cú pháp của câu lệnh lặp với số lần chưa biết trước? Nêu hoạt động của câu lệnh?Trả lời: Cú pháp: 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:(1) Kiểm tra điều kiện: (2) Nếu điều kiện SAI, câu lệnh sẽ bị bỏ qua và chuyển sang câu lệnh tiếp theo trong chương trình. Nếu điều kiện ĐÚNG, thực hiện câu lệnh và quay lại bước (1 ) Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC( Tiết 2)II. 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ủa lệnh lặp với số lần chưa biết trước while do trong Pascal Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚCIII. Nội dung1. Các hoạt động lặp với số lần chưa biết trước2. Ví dụ về lệnh lặp với số lần chưa biết trước Ví dụ 4: ( Đọc ví dụ 2 trong SGK) Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC2. Ví dụ về lệnh lặp với số lần chưa biết trước Ví dụ 5: Viết chương trình tính tổng1 1 11 2 3 100T = + + + +? Bài toán này lặp với số lần biết trước hay chưa biết trước Bài toán lặp với số lần biết trước Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC* Giải bài toán bằng câu lệnh lặp với số lần biết trướcProgram vidu5_1;Var i: integer; T: real;Begin T:=0; For i:=1 to 100 do T:=T+1/i; Writeln (T);End. Program vidu5_2;Var i: integer; T: real;Begin T:=0; i:=1; while i<=100 do begin T:=T+1/i; i:=i+1; end;end. * Giải bài toán bằng câu lệnh lặp với số lần chưa biết trướcTiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC Kết quả 2 chương trình trên bằng nhau * Lưu ý:- Chúng ta có thể sử dụng câu lệnh while…do thay cho câu lệnh for…do. - Tùy trường hợp mà chúng ta sử dụng câu lệnh for…do… thay cho câu lệnh while…do… vì lệnh lặp while…do… chỉ phù hợp cho lệnh lặp với số lần chưa biết trước còn câu lệnh for…do phù hợp lệnh lặp với số lần biết trước. Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC 3. Lặp vô hạn lần – lỗi lập trình cần tránhVar a:Integer;Begin a:=5; While a < 6 do Writeln(‘A’);End.Var a:Integer;Begin a:=5; While a < 6 do Begin Writeln(‘A’); a:=a+1; End;End.Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC  Khi thực hiện vòng lặp, điều kiện trong câu lệnh phải được thay đổi để sớm hay muộn giá trị của điều kiện được chuyển từ Đúng sang Sai. - Chỉ như thế chương trình mới không "rơi" vào những "vòng lặp vô tận". Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC3. Lặp vô hạn lần – lỗi lập trình cần tránh GHI NHỚ:1. Ngoài cấu trúc lặp với số lần lặp biết trước, các ngôn ngữlập trình còn có các câu lệnh lặp với số lần chưa biết trước.2. While…do là câu lệnh lặp với số lần chưa biết trước trongpascal.Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚCIV. Củng cốCâu hỏi 1: Hãy nêu cú pháp câu lệnh lặp với số lần chưa biết trước ? Cho ví dụ minh họa Câu hỏi 2: Chương trình sau đây tính tổng 10 số tự nhiên đầu tiên. Hãy nhìn vào chương trình sau và phát hiện lỗi sai của chương trình:Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC Tiết 50 – Bài 8LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚCChương trình đúng như sau: V. Dặn dò- Về nhà chạy lại chương trình trong các ví dụ 2, 3, 4, 5 SGK. - Trả lời các câu hỏi và bài tập trang 71 SGK.- Chú ý cú pháp và các bài tập về câu lệnh lặp với số lần chưa biết trước để tiết sau thực hành Tiết 50 – Bài 8LẶ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

1. Các hoạt động lặp với số lần chưa biết trước

a. 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ả:

  • T1 = 1
  • T2 = 1 + 2 
  • T3 = 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?

- Phân tích bài toán:

   n   

 Tổng Tn

 Điều kiện Tn ≤ 1000

1

Tn = 1

Đúng

2

Tn = 1 + 2

Đúng

3

Tn = 1 + 2 + 3

Đúng

...

...

Đúng

?

 Tn = 1 + 2 + 3 + ... + ?

Sao cho Tn nhỏ nhất >1000 

 Sai,

Kết thúc việc tính tổng. 

- 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:

  • Bước 1. S \(\leftarrow\) 0, n \(\leftarrow\) 0.
  • Bước 2. Nếu S ≤ 1000, n \(\leftarrow\) n + 1; ngược lại chuyển tới bước 4.
  • Bước 3. S \(\leftarrow\) 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.

- Ta có sơ đồ khối :

Ví dụ câu lệnh lặp với số lần chưa biết trước

- 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 đó:

  • Đ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.

Ví dụ 3: 

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). 

Ví dụ 4: 

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ặp 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). 

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.

Khách

Hãy nhập câu hỏi của bạn vào đây

Những câu hỏi liên quan

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

a. 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ả:

  • T1 = 1
  • T2 = 1 + 2 
  • T3 = 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?

- Phân tích bài toán:

   n   

 Tổng Tn

 Điều kiện Tn ≤ 1000

1

Tn = 1

Đúng

2

Tn = 1 + 2

Đúng

3

Tn = 1 + 2 + 3

Đúng

...

...

Đúng

?

 Tn = 1 + 2 + 3 + ... + ?

Sao cho Tn nhỏ nhất >1000 

 Sai,

Kết thúc việc tính tổng. 

- 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:

  • Bước 1. S \[\leftarrow\] 0, n \[\leftarrow\] 0.
  • Bước 2. Nếu S ≤ 1000, n \[\leftarrow\] n + 1; ngược lại chuyển tới bước 4.
  • Bước 3. S \[\leftarrow\] 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.

- 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 đó:

  • Đ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.

Ví dụ 3: 

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]. 

Ví dụ 4: 

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ặp 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]. 

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.

Bài 8: Lặp với số lần chưa biết trước – Câu 1 trang 70 SGK tin học 8. Em hãy nêu một vài ví dụ về hoạt động lặp với số lần chưa biết trước

Em hãy nêu một vài ví dụ về hoạt động lặp với số lần chưa biết trước

Lời giải : 

– Tập lái xe đến khi biết lái

– Học thuộc lòng một bài thơ cho tới khi bố mẹ kiểm tra là đã thuộc thì mới kết thúc, nếu không thì phải học lại…

1.1. Các hoạt động lặp với số lần chưa biết trước

Ví 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ê:

  • Bước 1. S \[\leftarrow\] 0, n \[\leftarrow\] 0
  • Bước 2. Nếu S ≤ 1000, n \[\leftarrow\] n + 1; ngược lại chuyển tới Bước 4
  • Bước 3. S \[\leftarrow\] 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

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:

  • Việc lặp lại một nhóm hoạt động với số lần chưa xác định trước phụ thuộc vào một điều kiện cụ thể được thỏa mãn và chỉ dừng lại khi điều kiện không thỏa mãn.
  • Để chỉ dẫn máy tính thực hiện các hoạt động lặp 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

1.​2. Ví dụ về lệnh lặp với số lần chưa biết trước

Cú pháp:

While < Điều kiện > do < Câu lệnh >;

Trong đó:

  • While, do: là các từ khóa
  • Đ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

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 câu 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

​Ví dụ 3: 

While a<=b>

  • While, do là các từ khóa
  • Điều kiện là a<=b>
  • Câu lệnh là a:=a+1 [câu lệnh đơn]

Ví dụ 4: 

While a>b do

Begin 

write['a>b'];

a:=a-1;

End;​

  • 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]

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á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. 

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.

  • Trong chương trình trên, giá trị của biến a luôn luôn bằng 5, điều kiện a<6>writeln['A']; luôn được thực hiện.
  • Do vậy, khi thực hiện vòng lặp, điều kiện trong câu lệnh phải được thay đổi để sớm hay muộn giá trị của điều kiện được chuyển từ đúng sang sai. Chỉ như thế chương trình mới không "rơi" vào những "vòng lặp vô tận".

Video liên quan