Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
ÔN LẠI KIẾN THỨC
Cú pháp của câu lệnh lặp với số lần chưa biết trước.

   while <điều kiện> do ;
Trong đó:
- While, do là từ khoá của Pascal.
 - Đ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.

Trong trường hợp câu lệnh ghép:
While < điều kiện> do
Begin
Câu lệnh 1;
Câu lệnh 2;
....
End.
*Hoạt động câu lệnh lặp như sau:
Bước 1: Kiểm tra <điều kiện>.
Bước 2: Nếu điều kiện sai thì câu lệnh sẽ bị bỏ qua và lệnh lặp kết thúc. Nếu <điều kiện> có giá trị đúng thì thực hiện lệnh cần lặp và quay lại bước 1.
Chừng nào điều kiện còn đúng thì câu lệnh còn thực hiện.
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
II. Nội dung
1. Các hoạt độ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
Ví dụ 1: Với giá trị nào của n thì 1/n < 0.003? Viết chương trình tính số n nhỏ nhất để 1/n nhỏ hơn một sai số cho trước.
Với n (n>0) càng lớn thì 1/n càng nhỏ, nhưng luôn luôn lớn hơn 0

Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
2. Ví dụ về lệnh lặp với số lần chưa biết trước
Phân tích bài toán:
x=1/n
1
X1=1/1
Đúng
2
X2=1/2
Đúng
…..
………………
…………….
m
Xm=1/m ( Đk 1/m<0.003)
Sai,kết thúc quá trình lặp
n
Điều kiện x>0.003
Quan sát chương trình
* Lần lượt thay điều kiện sai_so bằng các giá trị 0.005; 0.002; 0.001, ta nhận các kết quả khác nhau.
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
2. Ví dụ về lệnh lặp với số lần chưa biết trước
Ví dụ 2: Viết chương trình tính tổng
Yêu cầu:
Viết chương trình theo hai dạng cấu trúc:
Lặp với số lần biết trước: For .. Do
Lặp với số lần chưa biết trước : While.. do
Tìm input và output của bài toán:
Input: 1+1/2+1/3+…+1/100
Output: Tổng T.
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
Program vidu5_1;
Uses crt;
Var i: integer;
T: real;
Begin
Clrscr;
T:=0;
For i:=1 to 100 do T:=T+1/i;
Writeln (T:4:2);
Readln;
End.
Program vidu5_2;
Uses crt;
Var i: integer;
T: real;
Begin
Clrscr;
T:=0;
i:=1;
while i<=100 do
begin
T:=T+1/i;
i:=i+1;
end;
Writeln(T:4:2);
Readln;
end.
Chương trình sử dụng lệnh lặp
với số lần biết trước
Chương trình sử dụng câu lệnh lặp
với số lần chưa biết trước:
Kết quả hai chương trình như nhau.
* Lưu ý:
- Chúng ta có thể sử dụng câu lệnh while…do thay cho câu lệnh for…to…do.
- Tùy trường hợp mà chúng ta sử dụng câu lệnh while…do… thay cho câu lệnh for…to…do… Vì lệnh lặp while…do… phù hợp cho bài toán với số lần lặp chưa biết trước còn câu lệnh for…to…do phù hợp với bài toán có số lần lặp biết trước.
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
3. Lặp vô hạn lần – lỗi lập trình cần tránh
Var a:Integer;
Begin
a:=5;
While a < 6 do
Writeln(‘A’);
End.
?Tại sao chương trình này lại rơi vào vòng lặp vô tận?
Trả lời: giá trị ban đầu của a được gán bằng 5. điều kiện đặt ra là: nếu a<6
thì thực hiện: in ra màn hình số a ,điều kiện này luôn đúng (5<6)
nên câu lệnh được thực hiện lặp đi lặp lại không ngừng
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC(t2)
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”
?vậy với chương trình trên ta thay đổi điều kiện như thế nào để chương
trình không là chương trình với vòng lặp vô tận nữa?
Chương trình sau khi thay đổi điều kiện:
Var a:integer;
Begin
a:=5;
While a<6 do
Begin
Writeln(‘A’);
A:=a+1;
End;
End.
Để thoát khỏi vòng lặp vô hạn ta dùng tổ hợp
phím ctrl+break sau đó gõ phím F9
2.Để ngắt chương trình pascal đang chạy ta thực hiện:
nhấn tổ hợp phím Ctrl+Alt+Delete
Cách sử lý khi chương trình bị rơi vào vòng lặp vô hạn
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (T2)
GHI NHỚ:
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 trong
pascal.
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (T2)
Bài tẬp(sgk-71)

Bài 5: Hãy chỉ ra lỗi trong các câu lệnh sau đây:
a, X:=10; while X:=10 do X:=X+5;
Đáp án: điều kiện thường là phép so sánh không thể là phép gán
b, X:=10; while X=10 do X=X+5;
Đáp án:câu lệnh là phép gán không phải là phép so sánh
c, S:=0; n:=0; while S<=10 do n:=n+1; S:=S+n;
Đáp án: câu lệnh ghép phải được đặt trong cặp từ khoá begin…end;
Ý tưởng: Sử dụng một biến đếm và lệnh lặp While…do để nhập và cộng dần các số vào một biến kiểu số thực cho đến khi nhập đủ n số.
Thuật toán: Sử dụng biến n và biến dem kiểu số nguyên, biến x và biến TB kiểu số thực.
B1: dem  0 , TB  0;
B2: Nhập giá trị cho biến n;
B3: Nếu dem >=n chuyển đến B5;
B4: dem  dem + 1, nhập giá trị cho biến x, TB TB+x, chuyển đến B3;
B5: TB  TB / n , thông báo giá trị trung bình, kết thúc.
Bài tập:Viết chương trình sử dụng lệnh lặp while…do để tính trung bình n số thực x1, x2, x3,…, xn, các số n và x1, x2, x3,…, xn được nhập từ bàn phím.
a./ Gõ chương trình sau và lưu với tên Tinh_TB:
b./ Tìm hiểu ý nghĩa các lệnh, dịch, sửa lỗi. chạy chương trình
c./ Viết lại chương trình sử dụng lệnh For..do thay lệnh While …do.
Bài 8
LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC
III. Dặn dò
- Trả lời các câu hỏi và bài tập còn lại 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.
CẢM ƠN THẦY CÔ VÀ CÁC EM ĐÃ LẮNG NGHE
nguon VI OLET