CẤU TRÚC TỐI THIỂU

Một phần của tài liệu Giáo trình công nghệ phần mềm docx (Trang 30 - 33)

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

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, RepeatLoop

Exit : 1. Caseif 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 (adsbygoogle = window.adsbygoogle || []).push({});

→ 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.

Một phần của tài liệu Giáo trình công nghệ phần mềm docx (Trang 30 - 33)