ÐIỀU KHIỂN TUẦN TỰ GIỮA CÁC LỆNH

Một phần của tài liệu Giáo trình ngôn ngữ lập trình (Trang 80 - 83)

7.4.1 Các lệnh cơ bản

Lệnh cơ bản là lệnh mà trong đó không chứa các lệnh khác. Các lệnh cơ bản bao gồm lệnh gán, lời gọi chương trình con, các lệnh nhập, xuất, lệnh nhảy goto. Trong một lệnh cơ bản có thể chứa các biểu thức mà cấu trúc điều khiển đã được trình bày ở phần trên.

Các cấu trúc trong chương trình thường có là: hợp thành, lựa chọn và lặp lại. Các ngôn ngữ khác nhau cài đặt các cấu trúc này một cáh khác nhau.

7.4.2 Điều khiển tuần tự dùng nhãn lệnh và lệnh GOTO

Cơ chế ban đầu của điều khiển tuần tự trong hầu hết các ngôn ngữ là ghi nhãn lệnh và chuyển điều khiển tới lệnh có nhãn từ chỗ này sang chỗ khác trong chương trình. Việc chuyển điều khiển thường được thực hiện bằng lệnh GOTO. Có hai dạng của lệnh GOTO là:

1/ GOTO không điều kiện. Trong một chuỗi các lệnh, một lệnh GOTO không điều kiện như GOTO NEXT chuyển điều khiển tới lệnh có nhãn là NEXT. Lệnh đứng sau GOTO sẽ không được thực hiện.

2/ GOTO có điều kiện. Trong một chuỗi lệnh, một lệnh GOTO có điều kiện như IF A = 0 then GOTO NEXT chuyển điều khiển tới lệnh có nhãn là NEXT chỉ khi điều kiện sau IF đúng.

Sử dụng hai dạng GOTO này, chúng ta dễ dàng biểu diễn các dạng điều khiển cơ bản như sau

Lệnh hợp thành Lệnh lựa chọn Lệnh lặp lại S0 S0 S0

GOTO L1 IF A=0 THEN GOTO

L1 L1: IF A=0 THEN GOTO L2 L2: S2 S1 S1

GOTO L3 GOTO L2 GOTO L1

L1: S1 L1: S2 L2: S2

GOTO L2 L2: S3 L3 : S3

Chuỗi lệnh thực hiện Chuỗi lệnh thực hiện Chuỗi lệnh thực hiện S0 S1 S2 S3 S0 S1 S3 S0 S2

Hoặc S0 S2 S3 Hoặc S0 S1 S2

Hoặc S0 S1 S1 S2

Hoặc S0 S1 S1 S1 S2

Lệnh GOTO có thuận tiện là dễ dùng, và có hiệu quả trong thực hiện vì nó phản ánh cấu trúc cơ bản của máy tính quy ước (conventional computers), trong đó mỗi một từ lệnh hoặc byte lệnh đều có địa chỉ, và trong phần cứng có các lệnh nhảy được xây dựng để chuyển điều kkhiển đến địa chỉ được chỉ định. Lệnh GOTO biểu thị một cấu trúc điều khiển tự nhiên để người lập trình chuyển ngôn ngữ cấp cao sang hợp ngữ. Hầu hết các ngôn ngữ cũ đều có cả lệnh GOTO cơ bản và nhiều dạng cải tiến đặt nền móng cho việc dùng nhãn như là dữ liệu. Trong các ngôn ngữ mới như Pascal điều khiển tuần tự trên cơ sở lệnh GOTO ít quan trong hơn mặc dù vẫn còn lệnh đó.

Trong một số ngôn ngữ mới, lệnh GOTO đã bị loại bỏ hoàn toàn. Vì sử dụng nhãn và lệnh GOTO thì chương trình trở nên rất khó đọc vì không có cấu trúc tổng thể và thứ tự các lệnh trong văn bản chương trình nguồn không tương ứng với thứ tự các lệnh khi thực hiện. 7.4.3 Các lệnh cấu trúc Một lệnh có cấu trúc là một lệnh chứa các lệnh khác. Các lệnh thành phần của một lệnh có cấu trúc có thể là một lệnh cơ bản hoặc một lệnh có cấu trúc. Hầu hết ngôn ngữ cung cấp một tập hợp các lệnh có cấu trúc biểu thị các dạng điều khiển cơ bản ( hợp thành, lựa chọn và lặp lại) mà không cần dùng lệnh GOTO. Lệnh hợp thành (Compound Statements)

Lệnh hợp thành là một chuỗi các lệnh được đặt vào trong một cặp ký hiệu thể hiện sự mởđầu và kết thúc của chuỗi đó. Chẳng hạn trong Pascal, lệnh hợp thành là chuỗi các lệnh được đặt trong cặp tữ khóa begin và end như sau:

Begin

Lênh 2; ...

Lệnh n End

Cấu trúc lệnh hợp thành cho phép một tập hợp các lênh được trừu tượng hóa thành một lệnh đơn.

Lệnh hợp thành được cài đặt trong máy tính ảo bằng cách thiết lập một khối các mã lệnh có thể thực hiện được biểu diễn cho mỗi một lệnh của chuỗi lệnh trong bộ nhớ. Thứ tự mà chúng xuất hiện trong bộ nhớ xác định thứ tự trong đó chúng được thực hiện.

Lệnh điều kiện (Conditional Statements)

Lệnh điều kiện là một lệnh biểu thị sự lựa chọn của hai hoặc nhiều lệnh. Việc lưạ chọn được điều khiển bằng cách kiểm tra một sốđiều kiện thường được viết trong dạng biểu thức của các phép toán quan hệ và logic. Các lệnh điều kiện phổ biến là lệnh IF và lệnh CASE.

Lệnh IF được cụ thể hóa thành các dạng IF một nhánh, IF hai nhánh và IF đa nhánh. Chọn thực hiện một lệnh được biểu thị là IF một nhánh: IF <điều kiện> THEN <Lệnh> ENDIF

Chọn một trong hai dùng IF hai nhánh: IF <điều kiện> THEN <Lệnh1> ELSE <Lệnh2> ENDIF

Chọn một trong nhiều dùng các IF nối tiếp nhau hoặc dùng IF đa nhánh: IF <điều kiện1> THEN <Lệnh1> ELSIF<điều kiện2> THEN <Lệnh2> . . . ELSIF <điều kiệnN> THEN <LệnhN> ELSE <LệnhN+1> ENDIF Lệnh CASE (adsbygoogle = window.adsbygoogle || []).push({});

Ðiều kiện trong lệnh If đa nhánh thường phải lặp lại việc kiểm tra giá trị của một biến, ví dụ:

IF TAG = 0 THEN <Lệnh 0>

ELSIF TAG = 1 THEN <Lệnh 1>

ELSIF TAG = 2 THEN <Lệnh 2>

ELSE

<Lệnh 3> ENDIF

Cấu trúc phổ biến này được biểu diễn một cách súc tích hơn bằng lệnh CASE CASE TAG OF

1: <Lệnh 1> 2: <Lệnh 2> OTHERS: <Lệnh3> ENDCASE Cài đặt lệnh điều kiện Lệnh IF được cài đặt bằng cách dùng lệnh rẽ nhánh và lệnh nhảy có điều kiện hoặc không có điều kiện trong phần cứng. Kết quả tương tự nhưđã mô tả trong phần 7.3.2.

Lệnh lặp (Interation Statements)

Lặp lại đơn, kiểu đơn giản nhất của lệnh lặp xác định phần thân (của lệnh) được thực hiện một số cốđịnh lần. Lệnh PERFORM của COBOL là một điển hình: PERFORM <thân> k TIMES

Lặp lại khi điều kiện đúng: WHILE < test > DO <thân>

Lặp lại trong khi tăng một sựđếm: FOR i:=1 STEP 2 UNTIL 30 DO <thân>

Lặp không xác định, trong đó điều kiện để thoát khỏi vòng lặp không đặt tại đầu vòng, như trong Ada: LOOP ... EXIT WHEN <điều kiện> ... END LOOP;

Hoặc trong Pascal sử dụng vòng lặp WHILE với điều kiện luôn luôn đúng: WHILE true DO BEGIN .... END;

Cài đặt các lệnh lặp dùng các chỉ thị rẽ nhánh/ nhảy của phần cứng.

Một phần của tài liệu Giáo trình ngôn ngữ lập trình (Trang 80 - 83)