Khởi đầu biến i được gán gía trị 1 (dòng {9}). Trong vòng lặp WHILE,
sau mỗi lệnh S:=S*i; biến i được tăng lên 1 đơn vị bằng lệnh i:= i+1; (dòng
{13}). Khi i=N+1 thì điều kiện i<=N bị sai và lúc đó vòng lặp kết thúc, kết
qủa là lệnh S:=S*i; được thực hiện đúng N lầ? ứng với i=1, 2, 3, ., N.
7 trang |
Chia sẻ: maiphuongdc | Lượt xem: 6942 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Pascal - Câu lệnh while, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CÂU LỆNH WHILE
9.2.1. Cú pháp, lưu đồ, cách thức hoạt động :
Cú pháp:
WHILE Ðiềukiện DO LệnhP ;
Ý nghĩa : Chừng nào Ðiềukiện còn đúng thì cứ làm LệnhP , cho đến khi
Ðiềukiện sai thì không làm LệnhP nữa mà chuyển sang lệnh kế tiếp ở phía
dưới.
Cách thức hoạt động của WHILE:
Bước 1: Nếu Ðiềukiện sai thì chuyển ngay sang lệnh kế tiếp sau LệnhP,
ngược lại, nếu Ðiềukiện đúng thì làm LệnhP, rồi quay lại bước 1.
Lệnh P được gọi là thân của vòng lặp WHILE.
Nếu Ðiềukiện không bao giờ sai thì LệnhP sẽ phải làm hoài, lúc đó ta có
vòng lặp vô hạn. Trong trường hợp này, để dừng chương trình, hãy gõ đồng
thời hai phím Ctrl và Pause ( viết tắt là ^Pause).
Ðể tránh các vòng lặp vô hạn, trong thân của vòng WHILE cần có ít nhất
một lệnh có tác dụng làm biến đổi các đại lượng tham gia trong Ðiềukiện để
đến một lúc nào đó thì Ðiềukiện sẽ sai và do đó vòng lặp sẽ kết thúc.
9.2.2. Các ví dụ về lệnh While :
Ví dụ 9.10 : Nhập số tự nhiên N, dùng lệnh WHILE tính S=N!:
PROGRAM VIDU910;
{ Tinh S=N! bằng lệnh WHILE..}
Var
N, i : Integer;
S : LongInt;
Begin
Write(‘ Nhập N > 0 : ‘ );
Readln(N);
S:=1;
i :=1; {9}
While i<= N do
begin
S:=S*i;
i:=i+1; {13}
end;
Writeln(‘ Giai thua = ‘, S);
Readln;
End.
Chạy
Chép file nguồn
Khởi đầu biến i được gán gía trị 1 (dòng {9}). Trong vòng lặp WHILE,
sau mỗi lệnh S:=S*i; biến i được tăng lên 1 đơn vị bằng lệnh i:=i+1; (dòng
{13}). Khi i=N+1 thì điều kiện i<=N bị sai và lúc đó vòng lặp kết thúc, kết
qủa là lệnh S:=S*i; được thực hiện đúng N lầ? ứng với i=1, 2, 3, ..., N.
Trong chương trình trên, nếu không có dòng lệnh {13}:
i:=i+1;
thì i luôn luôn bằng 1 nên điều kiện i<=N luôn luôn đúng (vì N 1), và do
đó vòng lặp sẽ vô hạn .
Sự khác nhau của lệnh WHILE so với FOR là ở chỗ: trong lệnh FOR,
biến i được tự động gán gía trị ban đầu và sau mỗi bước lặp được tự động
tăng lên, còn trong WHILE thì không, ta phải viết các lệnh đó.
Tất cả các bài toán giải quyết được bằng lệnh FOR thì đều giải quyết được
bằng lệnh WHILE. Ðặc điểm chung của các bài toán dạng này là số lần lặp
của các vòng lặp đã được biết trước.
Lệnh WHILE đặc biệt thích hợp với các vòng lặp có số lần lặp chưa biết
trước, trong khi lệnh FOR không giải quyết được. Ðây chính là điểm mạnh
của lệnh WHILE. Hãy xem ví dụ sau.
Ví dụ 9.11: Trở lại bài toán tính tiền gửi ngân hàng có tiền lãi hàng
tháng gộp vào vốn (ví dụ 9.9). Câu hỏi bây giờ là: cần gửi tối thiểu là bao
nhiêu tháng để có được số tiền S cho trước.
Giả sử tiền vốn là 100, lãi suất hàng tháng là 2%, số tiền cần có là S=108.
Ta tính số tiền có được sau mỗi tháng gửi:
Sau 1 tháng gửi: Số tiền=100 + 100*0.02 = 102
Sau 2 tháng gửi: Số tiền=102 + 102*0.02 = 104.04
Sau 3 tháng gửi: Số tiền=104.04 + 104.04*0.02 = 106.1208
Sau 4 tháng gửi: Số tiền=106.1208 + 106.1208*0.02 = 108.2432
Vậy chỉ cần gửi N=4 tháng, số tiền sẽ có là 108.2431.
Qúa trình lặp kết thúc khi tới tháng đầu tiên có Số tiền S.
Chương trình như sau:
PROGRAM VIDU911;
{ Tính số tháng gửi ngân hàng để có số tiền S }
Var
Tienvon, Laisuat, Sotien, S : Real;
N : Byte;
Begin
Write(‘ Nhập tiền vốn, lãi suất và số tiền S cần có: ‘);
Readln(Tienvon, Laisuat, S);
Sotien:=Tienvon;
N:=0; { N là số tháng gửi }
While Sotien< S do
begin
N:=N+1;
Sotien:= Tienvon + Tienvon*Laisuat ;
Tienvon:=Sotien;
end;
Writeln(‘ Cần gửi ‘, N , ‘ tháng ‘);
Writeln(‘ Số tiền sẽ có = ‘ , Sotien:6:2);
Readln;
End.
Chạy
Chép file nguồn
Số lần lặp của lệnh: While Sotien < S do . . . không phải do ta ấn định từ
trước mà tùy thuộc vào biểu thức Sotien < S là mau bị sai hay chậm bị sai.
Số lần lặp ít hay nhiều phụ thuộc vào gía trị S nhỏ hay lớn và vào tốc độ
tăng nhanh hay chậm của số tiền.
Các file đính kèm theo tài liệu này:
- cau_lenh_while_1696.pdf