Nếu đúng thực hiện bước 3, nếu sai thực hiện bước 4.
Bước 3.2: Gán giá trị cho Biến_điều_khiển bởi pred (biến điều khiển ở bước trước)
Bước 3.3: Quay lại bước 2.
END.
6.4. Câu lệnh lặp không xác định WHILE và REPEAT
;
Until <Điều kiện>;
Trong đó:
-
<Điều kiện> là một biểu thức logic, trả về giá trị TRUE hoặc FALSE
-
Có thể là một lệnh hoặc một khối lệnh
6.4.2.2 Sự hoạt động
i) Thực hiện công việc Công_việc
ii) Tính giá trị của biểu thức logic điều_kiện,
iii) Nếu sai, quay về bước i),
iv) Nếu đúng, dừng và kết thúc vòng lặp.
6.4.2.3 Lưu đồ thể hiện sự hoạt động
Hình 6.6. Lưu đồ hoạt động của
câu lệnh Repeat
6.4.2.4 Chú ý
-
đặt giữa 2 từ khoá Repeat và Until có thể là một lệnh hoặc một khối lệnh song không cần phải đặt trong Begin...End;
-
Trong khi thực hiện phải có một lệnh làm thay đổi giá trị của một biến thuộc biểu thức logic <Điều kiện> để làm cho biểu thức logic tiến đến TRUE nhằm kết thúc vòng lặp.
-
được thực hiện trước, <Điều kiện> được kiểm tra sau nên ít nhất cũng được thực hiện một lần, ngay cả khi <Điều kiện> đã có giá trị TRUE.
-
Câu lệnh lặp Repeat ... Until cũng dùng được trong trường hợp đã biết trước số lần lặp.
6.4.2.5 Ví dụ
Ví dụ 6.9: Tính tổng S=1+1/2+1/3+...+1/n . Biết rằng n là một số nguyên dương được đọc vào từ bàn phím.
Program VIDU_6_9;
Uses Crt;
Var i, n: Integer;
s: Real;
BEGIN
ClrScr;
Write('Nhap n= '); ReadLn(n);
s:=0; i:=1;
Repeat
s:=s+1/i;
i:=i+1;
Until i>n;
WriteLn('Tong S= ',s:8:3);
ReadLn;
END.
6.4.2.6 Ứng dụng của câu lệnh lặp Repeat ... Until
a) Mẫu 1: dùng để lặp lại việc nhập dữ liệu cho đến khi dữ liệu nhập là hợp lý.
.....
{ Nhập dữ liệu }
Repeat
ClrScr;
Write('Nhap diem thi mon Tin hoc dai cuong DIEM= ');
ReadLn(DIEM);
If (DIEM<0) or (DIEM>10) then
Begin
WriteLn(#7,'Du lieu sai, moi nhap lai');
ReadLn;
End;
Until (DIEM>=0) or (DIEM<=10);
....
b) Mẫu 2: dùng để quay vòng một đoạn hoặc cả một chương trình theo ý muốn.
...
Var
...
TL: Char;
BEGIN
Repeat
ClrScr;
{ Nhập dữ liệu }
....
{ Xử lý }
...
{ In kết quả }
Write('Co thuc hien chuong trinh lan nua khong (C/K)? ');
ReadLn(TL);
Until (TL='k') or (TL='K');
END.
Ví dụ 6.10: Viết chương trình giải phương trình bậc nhất ax+b=0 với các hệ số a, b nhập từ bàn phím có quay vòng.
Program VIDU_6_10;
Uses Crt;
Var a, b, x: Real;
TL: Char;
BEGIN
Repeat
ClrScr;
Write('Nhap he so a= '); ReadLn(a);
Write('Nhap he so b= '); ReadLn(b);
If a<>0 then
Begin
x:=-b/a;
WriteLn('Phuong trinh co nghiem x= ',x:8:3);
End
Else
If b=0 then WriteLn('Phuong trinh co vo so nghiem')
Else WriteLn('Phuong trinh vo nghiem ');
{hoi de lap lai chuong trinh}
Write(’Co thuc hien chuong trinh lan nua khong (C/K)? ’);
ReadLn(TL);
Until (TL=’k’) or (TL=’K’);
END.
c) Mẫu 3: Để xây dựng chương trình điều khiển bảng chọn
Ví dụ 6.11: viết chương trình nhập vào ba số a, b, c cho đến khi chúng thỏa mãn là độ dài của ba cạnh trong một tam giác. Xây dựng menu chọn công việc thực hiên
Công việc 1: tính chu vi tam giác
Công việc 2: tính diện tích tam giác
Program vidu_6_11;
Var a, b, c, S, CV: real;
ch:char;
Begin
Repeat
Write(‘ Nhap ba so a, b, c : ‘);readln(a,b,c);
Until (a+b>c)and(a+c>b)and(b+c>a)and(a>0)and(b>0)and(c>0);
Repeat
Writeln(‘ Cac lua chon: ‘);
Writeln(‘ 0: Thoat khoi chuong trinh!’);
Writeln(‘ 1: Tinh chu vi tam giac, ’);
Writeln(‘ 2: Tinh dien tich tam giac,’);
Write(‘ Lua chon cua ban la : ’);readln(ch);
Case ch of
‘0’: readln;
‘1’: begin
CV:=a+b+c;
Writeln(‘ Chu vi tam giac la CV = ‘,CV:8:2);
end;
‘2’: begin
p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
Writeln(‘ dien tich tam giac la S =’, S:8:2);
end;
Until (ch:=’0’);
End.
Chia sẻ với bạn bè của bạn: