Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на модуль 1 ОП.docx
Скачиваний:
8
Добавлен:
24.11.2019
Размер:
926.17 Кб
Скачать

25) Структурні оператори

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

Читаючи програму на операторному рівні, необхідно знати тільки результати виконання операторів і необов'язково з'ясовувати порядок виконання операцій у них. Вірогідну інформацію можна дістати у строго визначені моменти часу у процесі виконання програми, наприклад, після закінчення виконання відповідного оператора.

З цієї точки зору на операторному рівні інкапсуляції програміст-читач має справу з фіксованим набором точок, що відповідають завершенню операторів програми. Усі доступні результати він може вивести із результатів, здобутих у цих точках. Тому, якщо програміст, який пише програму, зацікавлений у деякому конкретному результаті, він має так скласти програму, щоб цей результат входив з виконання якогось оператора або послідовності операторів програми.

Зазначений фіксований набір точок у програмі зазвичай характеризується множиною імен програмних об'єктів та відповідними станами значень їхнього вмісту. Ця відповідність називається вектором стану програми.

Дії операторів, які виробляють деякий результат (як і результат всієї програми), можна подати перетвореннями вектора стану програми. Отже, виконання оператора починається з початкового значення вектора стану і приводить до кінцевого значення стану.

Передбачається три типи структурних операторів, яких достатньо для створення будь-яких програм: послідовність, оператор вибору та оператор повторення. Дуже важливими операторами, які не є управляючими, але які описують обробку значень є перетворювальні оператори.

Якщо в послідовності операторів S S оператор S – це безпосередній наступник оператора S і якщо S змінює значення вектора стану, переданого S , то S називатиметься перетворювальним оператором. Таким оператором, наприклад, є оператор присвоювання.

Перетворювальні оператори за допомогою оператора послідовного виконання, яким є оператор позначення «;» утворюють у програмі послідовності.

Наприклад, у мові Pascal такі перетворювальні оператори утворюють послідовність:

nA := nA + 1;

nB := (nB + nA) - 20;

nC := nA + nB;

Наприклад, в мові С послідовність перетворювальних операторів:

nA = nA + 1;

nB = (nB + nA) - 20;

nC = nA + nB;

Текстуально в послідовності входять і управляючі оператори, з’єднуючись відповідними входами та вихідами.

26) Оператори вибору

Часто послідовність виконання перетворювальних операторів доводиться порушувати, а вибір наступного виконуваного оператора залежатиме від деякої умови. Така ситуація, що виникає при виконанні програм, називається програмною, а деякі з програмних ситуацій, які обробляються у спеціальний спосіб, називаються винятковими ситуаціями, або винятками [24].

Умова, від якої залежить вибір наступного виконуваного оператора, зазвичай описується виразом, що виробляє значення логічного типу, котре подається у векторі стану програми. При цьому результатом обробки програмної ситуації є зміна вектора стану програми, отриманого тим перетворювальним оператором, який виконується залежно від значення, виробленого виразом, що описує умову. Опис умови та «близько розташованих» операторів створює оператор вибору (selection statement).

Відомо три форми оператора вибору – умовна, альтернативна та охоронна.

Умовна форма (if-then)

Тобто оператор має умову, від стану якої залежить, чи буде виконуватися перетворювальний оператор.

Альтернативна форма (IF-THEN-EISF)

В залежності від стану умови виконується оператор 1, або оператор 2.

Умовна форма використовується для опису коригувальних дій. Альтернативна форма використовується тоді, коли в програмній ситуації існують два різні результати, а вираз відношення (умови) добирається так, що він характеризує вибір одиного з них.

Охоронна форма оператора вибору (CASE)

У мовах програмування існує форма оператора вибору, яка є узагальненням його альтернативної форми, являючи собою власне оператор вибору. Вона має такий вигляд:

– вибір I із S , S ... S ,

де I = {i} - множина значень виразу І, котрі, як правило, належать перелічуваному типу; {S | k = 1..n} – перетворювальні оператори.

Ця форма оператора вибору ще називається охоронювальним оператором (guard statement) або контрольованим, розбором випадків, оскільки перед кожним перетворювальним оператором Sk (k = 1...n) ставиться значення g  {i}, яке називається охоронцем (guarder).

Виконання оператора починається з обчислення значення виразу I (за успадкованим вектором стану), а далі за обчисленим значенням I та відповідним значенням охоронця і  {1…n} (gі) для виконання вибирається оператор Si. Вектор стану в момент закінчення виконання оператора вибору інтерпретується як вектор, що передається оператору – спадкоємцю.

У формі передбачено гілку else ( в деяких мовах - default), що використовується, коли обчисленому значенню виразa I не відповідає значення жодного охоронця, тобто обчислення g  {1…n}.

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

Наприклад, у мові Pascal:

var nI : integer;

. . .

case nI

of

0, 1, 2 : nA := nB;

3, 4, 5 : nB := nA;

else

nA := 0;

end;.

Тут nI – вираз, а мітки 0, 1, 2, 3, 4, 5 перед відповідними опереторами – охоронці. Тобто, якщо, наприклад, значення виразу nI дорівнює 2, то для виконання обирається оператор nA:= n B.

Синтаксис охоронної фрми оператора вибору в мові С такий (дод. В):

Наприклад, у мові С:

char cA;

switch (cA)

{

case 'A' : nI = 65; break;

case 'B' : nI = 66; break;

default : nI = 0; break;

}

Літерами «А», «В» позначено охоронців, «default» відповідає в ціеї формі гілкі else.

У мові С кожний case в операторові вибору має закінчуватися оператором break.

Вважається, що у використанні охоронної форми оператора вибору немає потреби, оскільки для неї характерні такі особливості:

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

  • при аналізі оператора не можна дістати жодних вказівок на те, за яких обставин слід виконувати кожний S .

  • тільки погано структурована специфікація програми «спонукає» програміста до використання цієї форми оператора вибору.