[Pascal] Câu lệnh vòng lặp trong Pascal

Câu lệnh vòng lặp là thứ thiết yếu, rất quan trọng trong khi lập trình. Pascal cũng thế, câu lệnh vòng lặp là lí do con người chọn máy tính để làm những công việc khó khăn và mất thời gian. Có 3 loại vòng lặp:


1. Vòng lặp for...to...do...

Đây là vòng lặp được dùng phổ biến nhất. Đã được dạy trong chương trình Tin học 8. Vòng lặp sẽ lặp với số lần đã biết trước.

Cấu trúc khai báo câu lệnh lặp for...to...do...:
for {tên biến}:= {giá trị đầu} to {giá trị cuối};
Ngoài ra còn có 1 vòng lặp chạy ngược lại:
for {tên biến}:= {giá trị cuối} downto {giá trị đầu};
Mục đích của vòng lặp này là mỗi lần lặp, {tên biến} lại thay đổi giá trị, tức là khi chạy xong hết các câu lệnh có trong vòng lặp thì {tên biến} lại tăng thêm 1 hoặc giảm bớt 1. Và tất nhiên giá trị đầu phải lớn hơn 0 và bé hơn giá trị cuối thì vòng lặp mới chạy được. Ví dụ:

Tăng thêm 1:
n:=5;
for i:=2 to n do write(i);
Trong trường hợp này, sau khi chạy xong chương trình sẽ viết ra màn hình: 2345

Giảm bớt 1:
n:=5;
for i:=n downto 2 do write(i);
Trong trường hợp này, sau khi chạy xong chương trình sẽ viết ra màn hình: 5432

Số lần lặp = {giá trị cuối} - {giá trị đầu} +1 , tuy nhiên các bạn không cần quá bận tâm điều này.

Khi số câu lệnh của vòng lặp lớn hơn 1 thì cần cho tất cả các câu lệnh đó vào begin...end; để chương trình phân biệt được. Ví dụ:
for i:=1 to 5 do
begin
      i:=i+1;
      write(i);
end;

2. Vòng lặp while...do...


Vòng lặp này cũng là vòng lặp được dạy trong chương trình Tin học 8, tuy nhiên rất ít cơ hội để ứng dụng nó bởi vì chỉ riêng vòng lặp for thì các bạn đã phải học "sml" rồi (đùa thôi). Vòng lặp này có công dụng lặp với số lần không được biết trước, tức là lặp cho đến khi không thỏa được điều kiện nhất định do người lập trình đưa ra thì mới kết thúc. Nhưng khi trong các câu lệnh của vòng lặp không có câu lệnh kết thúc điều kiện thì vòng lặp sẽ lặp vô hạn.

Cấu trúc khai báo câu lệnh lặp while... do...:
while {điều kiện} do {câu lệnh};
Ví dụ:
i:=0;
while (i mod 10 <> 0) and (i<=100) do
begin
      i:=i+1;
      write(i);
end;
Ở ví dụ trên theo điều kiện thì vòng lặp sẽ lặp tới khi nào i chia hết cho 10 hoặc i lớn hơn 100, tuy nhiên biến i sẽ không thể tự thay đổi được mà cần có một lệnh biến đổi i trong vòng lặp. Và cũng giống như vòng lặp trên, khi câu lệnh trong vòng lặp nhiều hơn 2 thì cần cho chúng vào begin... end;. Nếu có nhiều hơn 1 điều kiện thì cần cho chúng vào ngoặc đơn và cách nhau bởi 'and' hoặc 'or'.

Điểm đặc biệt ở câu lệnh này là nếu chương trình viết được bằng vòng lặp for thì chắc chắn sẽ viết được bằng vòng lặp while, nhưng, chương trình viết được bằng vòng lặp while chưa chắc sẽ viết được bằng vòng lặp for. Đó là điểm tiện lợi của nó. Minh họa:

Với for:
for i:=1 to 10 do write(i);
Với while:
i:=0;
while i<=10 do
begin
      write(i);
      i:=i+1;
end;
Hai câu lệnh trên được viết bằng 2 vòng lặp khác nhau, nhưng tác dụng của nó vẫn như nhau.

3. Vòng lặp repeat...until...

Vòng lặp này cũng giống với while...do... nhưng ngược lại, cũng lặp với số lần chưa biết nhưng là lặp đến khi nào thỏa điều kiện mới thôi. Điểm cần lưu ý ở đây là các nếu có nhiều hơn 1 câu lệnh ở trong vòng lặp này thì không cần bỏ vào begin...end; nhưng điều kiện thì vẫn phải cho chúng vào ngoặc đơn và cách nhau bởi 'and' hoặc 'or'.

Cấu trúc khai báo của vòng lặp repeat...until...:
repeat {câu lệnh} until {điều kiện};
Ví dụ: 
repeat write('Nhap n: '); readln(n); until (n>300) and (n mod 2 = 0);
Ở ví dụ trên thì câu lệnh sẽ lặp lại hành động nhập vào giá trị n đến khi n lớn hơn 300 và n chẵn (chia hết cho 2).

Thông thường người ta chỉ sử dụng câu lệnh này để kiểm tra giá trị nhập vào mà thôi.

Khi nào thì câu lệnh lặp bị lặp vô hạn?


Câu lệnh bị lặp vô hạn khi trong vòng lặp không có câu lệnh nào làm thay đổi giá trị của điều kiện, làm điều kiện không bao giờ bị sai để có thể kết thúc vòng lặp. Ví dụ:
n:=10;
while n>10 do
n:=n+1;
Lúc này khi bạn chạy chương trình thì sẽ không bao giờ xem được kết quả và bắt buộc phải tắt chương trình để thoát.
Share on Google Plus
Hỗ trợ trực tuyến