2. 2.Tìm hiểu ví dụ về lệnh lặp với số lần chưa biết
trước.
Câu lệnh lặp không biết trước trong Pascal có dạng:
While <điều kiện> do<câu lênh>;
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 được thực hiện như sau:
- B1. Kiểm tra điều kiện.
- B2. 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 B1.
3. Ví dụ 3: tính số n nhỏ nhất sao cho 1/n nhỏ hơn 0.003
Điều kiện ( x=1/n)>=0.003
Mô tả thuật toán và xác định điều kiện cho bài toán
x=1/n
n=n+1
Chương trình
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.
4. Ta đã tìm hiểu thuật toán tính tổng n số trong ví dụ 2, thuật toán đó được thể
hiện bằng ngôn ngữ Pascal như thế nào các em qua ví dụ 4.
Ví dụ 4: Tính S=1+2+3+... sao cho tổng nhỏ nhất lớn hơn 1000.
Mô tả thuật toán tính tổng xác định điều kiện và câu lệnh cho bài
toán
Tính S=1+2+… >1000
S0
S S+1
S S+2
S S+3
………..
Điều kiện S<=1000.
Câu lệnh S:= S+n; n:= n+1;
Var S,n: integer;
Begin
S:=0; n:=1;
While S<=1000 do
Begin S:= S+n; n:= n+1 end;
Writeln ( ‘so n nho nhat de tong >1000 la’,n);
Writeln (‘Tong dau tien >1000 la’,S);
Readln
End.
Chương trình
5. Trong Pascal có những chương trình ngoài việc sử dụng câu lệnh
For...do... Ta cũng có thể sử dụng câu lệnh While...do.... thay cho câu lệnh
For...do... mà vẫn cho cùng một kết quả.
Ví dụ 5: Viết chương trình tính tổng
T= 1+1/2+1/3+… +1/100
T0
T T+1/1
T T+1/2
T T+1/3
…
T T+1/100
Thuật toán và điều kiệncho chương trình
Giá trị đầu: 1
Giá trị cuối: 100
Câu lệnh: T := T + 1/i;
Program vidu5_1;
Var i: integer;
T: real;
Begin
T:=0;
For i:=1 to 100 do T:=T+1/i;
Writeln (T);
End.
chương trình tính tổng với vòng lập for...do
6. chương trình tính tổng với vòng lập while…do
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.
Qua ví dụ này cho ta thấy rằng chúng ta có thể sử dụng câu lệnh
While...do...thay cho câu lệnh for… do. Nhưng 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.
Điều kiện i<=100 và dừng lại khi i>100.
Nếu sử dụng lệnh while…do, thi đoạn chương trình củng cho cùng một kết quả.
7. 3. Lặp vô hạn lần – lỗi lập trình cần tránh.
Khi 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. Đó được gọi là lặp vô hạn lần. Vậy thế nào là lặp vô hạn lần?
Var a: integer;
Begin
a:=5;
while a<6 do writeln (‘A’);
end.
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.
Lưu ý: Khi thực hiện vòng lặp, While ….do cần xác định được điều kiện trong câu
lệnh sau một số lần sẽ chuyển từ đúng sang sai để thoát khỏi vòng lặp. Không rơi
vào những “Vòng lặp vô tận”
- Trong vòng lặp While...do điều kiện được kiểm tra trước khi thực hiện cậu lệnh, do
đó có thể có trường hợp câu lệnh không được thực hiện một lần nào.
8. Củng cố:
Nêu cú pháp những dạng câu lệnh lặp mà em đã được học?
Lập với số lần biết trước
For <biến đếm> := <giá trị đầu> To <giá trị cuối> Do <câu lệnh>;
Lập với số lần chưa biết trước
While <điều kiện> do<câu lênh>;
Câu lệnh lập for…do có thể thay thế cho câu lệnh while…do không? Tại sao?
Không vì câu lệnh câu lệnh for…do chỉ sử dụng được với số lần lập đã biết trước
Trong vòng lập while…do giữa điều kiện và câu lệnh thì câu lệnh được thực hiện
trước hay điều kiện được kiểm tra trước?
Trong vòng lặp While...do điều kiện được kiểm tra trước khi thực hiện cậu lệnh