Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lek_1_prog.doc
Скачиваний:
4
Добавлен:
28.04.2019
Размер:
296.45 Кб
Скачать

1.3. Методи структурування програм

Методи низхідного проектування та модульного програмування регла­ментують процес побудови архітектури програм на макрорівні. Методи струк­турування, навпаки, працюють на мікрорівні, регламентуючи процес створення програмного коду. В основу методів структурування програм покладено тео­рему про структурування, що її у 1965 році сформулював Бом і Джакопіні. Згідно з цією теоремою будь-яку програму можна побудувати з використанням лише трьох керуючих структур: послідовності, вибору та розгалудження.

Метою структурування є перетворення неструктурованої програми на еквівалентну їй структуровану, тобто таку, що складається з обмеженого набо­ру керуючих алгоритмічних структур. Методи структурування ґрунтуються на поняттях функціонального вузла, а також на поняттях простої, елементарної і складеної програм [14].

Функціональним вузлом називається частина алгоритму, що має один вхід та один вихід. Прикладом функціонального вузла є окремий оператор – присвоєння, виклик процедури та інше.

Програма називається простою, якщо вона має один вхід, один вихід і через кожен її функціональний вузол проходить деякий шлях від входу до ви­ходу. Пр0ста програма може містити прості підпрограми. Вся проста програма може розглядатись, як один функціональний вузол.

Елементарна програма – це проста програма, що не містить підпрограм, які складаються більше ніж з одного вузла. Зазначимо, що існує лише обмежена кількість елементарних програм, з яких основними є три програми, які зобра­жені на рис.1.

Якщо функціональний вузол елементарної програми замінити елемента­р­ною програмою, утвориться складена програма. Якщо вузол складеної програ­ми замінити елементарною програмою, знову утвориться складена програма. В такий спосіб із будь-якої множини елементарних програм утворюється пев­ний клас складених програм. Так, множина {послідовність, if…else} формує програ­му без циклів, а множина {if…else, while} приводить до утворення класу прог­рам, які містять цикли. Отже, будь-яка підмножина множини елементарних програм є базисною множиною для певного класу складених програм. Складе­на програма, побудована з певної множини елементарних програм, називається структурованою.

Позначимо літерою S клас складених програм, базисна множина якого містить елементарні програми, як послідовність (рис. 1.1 а), вибір (if...else, рис. 1.1. б) і цикл з передумовою (while, рис. 1.1 в). Теорема про структурування стверджує, що будь-яку просту програму шляхом покрокового перетворення можливо замінити функціонально еквівалентною структурованою програмою, що належить означеному вище класу S. Згадане покрокове перетворення здійс­нюється за переліченими нижче правилами.

  1. Правило простоти: створення програми слід починати із простої програми;

  2. Правило пакетування: кожну дію можливо замінити двома послідов­ими діями;

  3. Правило вкладання: кожну дію можливо замінити будь-якою струк­тур­ою керування;

  4. Правило 2 і 3 можна застосовувати у будь-якій послідовності необ­межену кількість разів.

Принцип застосування правил пакетування та вкладання до простої програми продемонстровано на рис. 1.2.

Для перетворення неструктурованої програми у структуровану викорис­товуються такі методи: дублювання кодів, введення змінної стану і метод буле­вих ознак [11].

Метод дублювання кодів застосовується для перетворення неструктуро­ваних програм, що не містять циклів, у які можна увійти з декількох точок.

Р озглянемо неструктуровану програму, блок-схема якої зображена на рис. 1.3. Блоки позначені ідентифікаторами модулів.

Із блок-схеми видно, що модуль М5 не може розпочати своєї роботи доти, доки не стануть відомі результати роботи модулів М2 і М3. Як правило, в модулі М5 міститься фрагмент коду, що активізується під час виклику цього модуля з модуля М2, а також інший фрагмент коду, що активізується під час виклику модуля М5 з модуля М3.

Перетворимо зображену на рис. 1.3. неструктуровану програму, застосо­вуючи правила пакетування та вкладання. Зобразимо початкову програму як просту, що складається з елементарних програм типу вибору (if...else). Користу­ючись правилом вкладання, розширимо блоки МХ і МY, замінивши їх елемен­тарними програмами типу if...else. У результаті заміни модуль М5 продублює­ться (рис. 1.4).

М етод введення змінної стану [11] застосовується до неструктурованих програм, що містять цикли. Процес перетворення неструктурованої програми у структуровану складається з таких кроків:

    • у програму вводиться змінна стану, що її значення дорівнює номеру блоку, на який буде передане керування після виконання поточних дій;

    • функціональні блоки неструктурованої програми замінюються функ­ціональними блоками, що виконують такі самі дії та надають змінній стану значення, що ідентифікує номер блоку, на який передається уп­равління.

Розглянемо блок-схему неструктурованої програми, що містить цикли (рис. 1.5). Кожному блоку приписано довільний номер.

У програму вводиться нова змінна і . Цій змінній присвоюється номер блоку, на який потрібно передати керування. Зокрема, якщо істинна умова А, тоцій змінній присвоюється номер блоку В, тобто 2, якщо істинна умова С, то змінній і присвоюється 1 – номер блоку А.

Логічні блоки неструктурованої блок-схеми замінюються елементарни­ми програмами типу if...else, що послідовно перевіряють значення змінної ста­ну. Гілки «Так» програм типу if...else мають містити оператори присвоєння но­вих значень змінній стану і оператори перевірки певних умов початкової прог­рами.

Б лок-схему неструктурованої програми зображено на рис. 1.5., а блок-схему відповідної структурованої програми – на рис. 1.6.

Метод булевої ознаки використовується для перетворення неструкту­ро­ваних програм, що містять цикли. В програму вводиться додаткова змінна, яка набуває значень true чи false. Доки змінна доки змінна ознаки зберігає це зна­чення, виконання циклу триває. Значення змінної ознаки в середині циклу мо­ди­фікується лише за певних умов.

Р озглянемо блок-схему неструктурованого циклу, що має одну точку вхо­ду та дві точки виходу (рис. 1.7). У програму вводиться змінна flag, що іні­ціалізується нулем (false). Якщо істинною є умова Р або Q , змінна flag набуває значення 1 (true), що приводить до виходу з циклу. В такий спосіб неструктуро­ваний цикл із двома виходами перетворюється на структурований з одним ви­хо­дом (рис. 1.8).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]