Các cấu trúc điều khiển chuẩn là kết quả của những cố gắng lớn trong cuộc cách mạng về lập trình những năm 60. Những nhà tin học có tên tuổi đã đóng góp công sức là Bohm C. và Jacopini G., Dijkstra E.W. và Warier, v.v...
Để đảm bảo tính trong sáng, đơn giản và tự nhiên, người ta khuyên rằng chỉ nên xây dựng chương trình với 3 cấu trúc điều khiển cơ bản là tuần tự, rẽ nhánh
và lặp.
Tuy nhiên, Bohm và Jacopini đã chứng minh được rằng chỉ cần tốïi thiểu hai cấu trúc tuần tự và lặp là đủ.
Định lý Bohm và Jacopini 1986
Với mọi chương trình viết dưới dạng sơ đồ khối P (Flowchart), đều tồn tại một chương trình Q tương đương với P theo nghĩa sau :
Với mọi dữ liệu vào X thuộc miền xác định X, ta có P(x) = Q(x) : P và Q biến đổi những cái vào giống nhau thành các ra giống nhau.
Các thao tác trên các biến của Q là giống như của P.
Các biến của Q cũng là các biến của P, có thể Q chưá thêm một số biến logic. Q sử dụng hai cấu trúc điều khiển duy nhất là tuần tự và vòng lặp while
(SW: Sequence &While).
Sơ đồ chuyển cấu trúc như sau :
Hình 2.4. Chuyển về cấu trúc tuần tự và lặp while (SW)
Sau đây là cách chuyển đổi của các cấu trúc Case, If, For, Repeat và Loop −
Exit : 1. Case→if Case C of C1 : S1 . . . Cn : Sn End {Case} → If C = C1 then S1 else if C = C1 then S2 else if . . . . . . else if C = Cn then Sn 2. if → SW
Dùng hai biến phụ kiểu logic để thực hiện vòng lặp While đúng một lần :
Var p, q : Boolean If C then S → p := C While p do begin S ; p := not p End If C then S1 elseS2 → p :=C ; q := p While p do begin S1 ; p := not p Loop − Exit Repeat For If While Tuần tự Case
Phương pháp lập trình cấu trúc 31
End;
While not q do begin
S2 ; q := not q End
3. Repeat → SW
Repeat S until C → S ; While not C do S
4. For → SW
For I:= GtĐầu to GtCuối
do S → IWhile i <= GtCuối := GtĐầu do
begin
S ; I := Succ (I)
End
For I:= GtĐầu downto
GtCuối
do S
→ IWhile := GtĐầu i >= GtCuối do
begin
S ; I := Pred (I)
End
III.1. Các cấu trúc lồng nhau
Bản thân lệnh S trong mỗi cấu trúc điều khiển cơ bản lại có thể là một cấu trúc điều khiển khác.
Ví dụ 8 ::VVơơïïiiccââúúuuttrruuïcïcđđiiêêuöuö kkiiêêûûnn
If C then S1 else S2
Tại S1 và S2, ta có thể đặt các cấu trúc điều khiển khác, chẳng hạn thế S1 bởi :
While C1 do S3 và thế S2 bởi : Repeat S4 until C2 Ta có : If C then While C1 do S3
Đến lượt S3 và S4 lại có thể thay thế bởi các cấu trúc khác, v.v...
Với cácc phép thế như vậy, cấu trúc của chương trình ngày càng phức tạp và dẫn đến khó hiểu và dễ sai sót. Chính vì vậy mà người ta chú trọng triển khai chương trình từ trên xuống và viết các cấu trúc theo từng khối.
Các khối có thể thụt vòa, thụt ra để phản ánh tính cấu trúc và mức độ lồng nhau của các cấu trúc.
Nguyên tắc : Cấu trúc con được viết lọt vào trong (thụt vào) cấu trúc cha. Điểm vào và điểm ra của mỗi cấu trúc phải nằm trên cùng một hàng dọc.