Bài 10: Cấu trúc lặp

Nội dung lý thuyết

BÀI 10. CẤU TRÚC LẶP

- Trong cuộc sống, có những hành động được gọi là lặp đi lặp lặp lại nhiều lần như:

  • Đánh răng mỗi ngày hai lần, học Tin học mỗi tuần 2 tiết, mỗi ngày tắm một lần...
  • Học cho đến khi thuộc bài, rửa tách trà cho đến khi sạch...

- Trong Pascal, cách mô tả công việc (hoạt động) được lặp lại nhiều lần gọi là cấu trúc lặp. Có 3 loại cấu trúc vòng lặp như sau:

  • Cấu trúc for
  • Cấu trúc while do
  • Cấu trúc repeat

1. Cấu trúc FOR

- Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh mà số lần lặp lại đã biết trước.

- Phát biểu FOR có 2 dạng: 

  • Dạng tiến (đếm lên): FOR ..... TO ..... DO
  • Dạng lùi (đếm xuống): FOR ..... DOWNTO ..... DO

- Cú pháp tổng quát:       

FOR <biến đếm> := <giá trị đầu> TO/DOWNTO <giá trị cuối>  DO <Công việc>;

 

- Sơ đồ khối:

 

 

- Hoạt động: 

 

 

  • Bước 1: Thực hiện biểu thức 1 (gán giá trị khởi đầu)
  • Bước 2: Kiểm tra điều kiện lặp:
    • Nếu điều kiện lặp có giá trị ‘sai’ thì ra khỏi vòng lặp.
    • Ngược lại, nếu điều kiện lặp có giá trị ‘đúng’ thì chuyển tới bước 3.
  • Bước 3: Thực hiện khối lệnh sau for (thân của for), chuyển tới bước 4.
  • Bước 4: Thực hiện biểu thức 3 (tăng/ giảm biến đếm), rồi quay về bước 2.

 

* Chú ý: 

  • Giá trị đầu, giá trị cuối là các biến hoặc hằng;
  • Biến đếm phải là kiểu rời rạc.

 

 

- Ví dụ 1: Chương trình in một dãy số từ 0 đến 9

PROGRAM Day_So;
VAR i: Integer;
BEGIN
     FOR i := 0 TO 9 DO 
          Write (i);
     Readln;
END.

 

2. Câu lệnh While …Do

- Cấu trúc:

WHILE <điều kiện> DO <lệnh cần lặp>;

- Sơ đồ khối:

* Lưu ý: Trong khối các lệnh lặp bắt buộc phải có lệnh thay đổi biến chỉ số (để thay đổi giá trị <điều kiện>)

- Hoạt động:

  • Bước 1: Kiểm tra điều kiện lặp:
    • Nếu điều kiện lặp sai thì thoát khỏi vòng lặp, chuyển sang lệnh tiếp theo.
    • Nếu điều kiện lặp đúng thì chuyển sang bước 2.
  • Bước 2: Thực hiện khối  các lệnh lặp.
  • Bước 3: Quay lại bước 1.

- Ví dụ 2: Chương trình tính trung bình n số:  x1 + x2 + x3 + ... + xn

Program Trung_binh_Day_So;
VAR  n, count: Integer;
     x, sum, average: real;
BEGIN
     count := 1;
     sum := 0;
     Writeln('Nhập n = '); readln (n);
     WHILE  count  < n+1  DO
     BEGIN
          Writeln('Nhập giá trị thứ' , count,' của x = '); readln (x);
          sum := sum + x;
          count := count + 1;
     END;
     average :=  sum/n;
     Writeln('Trung bình là =' , average : 10 : 3 );
     Readln;
END.