Vòng Lặp (tt)

Vòng lặp không xác định
While.....Do
Repeat........Until

Vòng Lặp (tt)
Repeat

until Biểu_thức_Boolean;
Vòng Lặp (tt)
While Biểu_thức_Boolean DO

Vòng Lặp (tt)
REPEAT ... UNTIL...
WHILE ... DO...
So sánh hai vòng lặp
Vòng Lặp (tt)
Tính tổng sau: A = 1 + 2+3+..+N;
Dựng vũng Repeat
PROGRAM TINH_TONG;
VAR
I, N: integer; A: Real;
BEGIN
Write(` N = `); Readln(N);
A := 0; I:=1;
REPEAT
A := A + I;
I := I+1; (* thay đổi giá trị biểu thức Boolean *)
UNTIL I > N;
Writeln(` TONG = `, A :10:2);
END.
Dùng vòng Repeat ở đây ?
Vòng Lặp (tt)
Dùng vòng While
VAR
N, I: integer; A: Real;
BEGIN
Write(` N = `); Readln(N);
A := 0; I:=1;
WHILE I <= N DO
BEGIN
A := A + I;
I := I+1;(*thay đổi giá trị biểu thức Boolean*)
END;
Writeln(` TONG = `, A :10:2);
End.
Dùng vòng While ở đây?
Vòng Lặp (tt)
Có thể dùng For được không?
VAR
N, I: integer; A: Real;
BEGIN
Write(` N = `); Readln(N);
A := 0;
FOR I:=1 TO N DO A:= A + I
Writeln(` TONG = `, A :10:2);
End.
Vòng Lặp (tt)

Tìm UCLN(a,b)

Chú ý:
Nếu a=b thì UCLN(a,b) = a
Nếu a>b thì UCLN(a,b) = UCLN(a-b,b)
Nếu a

Vòng Lặp (tt)
Dùng vòng While
VAR
a, b: integer;
BEGIN
Write(` a = `); Readln(a);
Write(` b = `); Readln(b);
WHILE a<>b DO
BEGIN
If a>b then a:= a-b;
If a END;
Writeln(`UCLN(a,b)= `, a);
End.
Dùng vòng While ở đây?
Vòng Lặp (tt)
Dùng vòng Repeat
VAR
a, b: integer;
BEGIN
Write(` a = `); Readln(a);
Write(` b = `); Readln(b);
Repeat
If a>b then a:= a-b;
If a Until a=b;
Writeln(`UCLN(a,b)= `, a);
End.
Dùng vòng Repeat ở đây?
Vòng Lặp (tt)
Có thể dùng vòng For được không?


Không thể
vì không biết số lần lặp
Vòng Lặp (tt)
Vòng chờ từ bàn phím

VAR
TraLoi : Char;
BEGIN
REPEAT
......
(* Thay đổi điều kiện thử *)
Write(` Có tiep tuc nua không ?(C/K) `);
Readln(TraLoi);
UNTIL (TraLoi = `K`) OR (TraLoi = `k`);
END.
nguon VI OLET