Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+09-Пояснювальна записка.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
973.82 Кб
Скачать

2.5.1 Генерація псевдокоду лінійного алгоритму

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

INPUT a

a = a + 12

OUTPUT a

Рис. 15. Побудова псевдо коду лінійного алгоритму

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

  1. при генерації псевдокоду вершини «Введення даних» буде виводиться текст «INPUT <variables list>», де variables list – це список змінних, які були записані при додаванні вершини;

  2. при генерації псевдокоду вершини «Виведення даних» буде виводиться текст «OUTPUT <variables list>», де variables list – це список змінних, які були записані при додаванні вершини.

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

Рис. 16. Алгоритм генерації коду лінійного алгоритму

2.5.2 Генерація псевдокоду нелінійного алгоритму

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

  1. підграф вершини умовного оператора IF… ELSE,

  2. підграф циклу WHILE…DO,

  3. підграф циклу DO…WHILE.

Кожен із таких підграфів має свій специфічний алгоритм управління обходом і заміни коду вершин, при необхідності.

Розглянемо детальніше кожен з них.

Генерація псевдокоду підграфу умовного оператора IF… ELSE, має дві особливості. Однією з таких особливостей є виділення гілки ELSE, при її наявності, тобто:

IF (умова) THEN

Оператор 1;

Оператор 2;

ELSE

Оператор 1;

Оператор 2;

END IF

Іншою особливістю є виділення вершини закінчення оператора IF (рис. 17), тобто вершини, в якій сходяться шляхи виконання алгоритму, після його розгалуження вершиною умовного оператора (END IF).

Рис. 17. Процес обходу графа при генерації псевдокоду умовного оператора IF… ELSE

В загальному вигляді алгоритм генерації псевдокоду підграфу умовного оператора полягає в обході гілки послідовності операторів при виконанні умови (пряма гілка) і в обході гілки ELSE (Else-гілка), при її наявності. Початок обходу під графу виконується з прямої гілки і продовжується до тих пір, поки не досягне іншої вершини умовного оператора, або буде досягнуто вершини закінчення умовного оператора. Признак, по якому можна розпізнати вершину закінчення умовного оператора полягає в тому, що вершина повинна мати обов’язково дві вхідні гілки, і одну, або дві (якщо це вершина умовного оператора) вихідні гілки. При досягненні вершини закінчення умовного оператора, на рис. 17 позначена червоним кружечком, напрямок обходу змінюється, тобто виконується повернення до вершини умовного оператора, з подальшим обходом по Else-гілці.

Записати код вершини IF

Вибір гілки обходу

так

ні

Записати код вершини

Записати код вершини

Перейти до наступної вершини

Перейти до наступної вершини

так

ні

Псевдо код

Рис. 18. Алгоритм генерацій псевдокоду під графу умовного оператора IF…ELSE

Підграф циклу WHILE…DO, являє собою подібний за структурою підграф умовного оператора IF … ELSE за виключенням того, що код вершини IF (умова) перетворюється в WHILE(умова), та в ньому відсутня вершина закінчення розгалуження, оскільки «пряма гілка» передає наступний крок виконання до вершини умовного оператора, з якого почала свій хід – утворюючи, таким чином, цикл, який закінчиться в тому разі, коли умова перестане виконуватись. Схематично напрямок обходу підграфу при генерації псевдокоду зображено на рис. 18. Для уникнення зациклення алгоритму обходу графу і правильної генерації псевдокоду, кожна вершина має атрибут cheked, який вказує на те, була вершина вже розглянута, чи ні. При проходженні через кожну вершину, атрибут cheked набуває значення true – що відповідає активному стану і сигналізує про те, що вершина вже була розглянута алгоритмом обходу і її код був записаний. При повторному проходженні через цю вершину, вона вже не буде розглядатися і таким чином уникатиметься зациклення. Тобто, при повторному проходженні через вершину умовного оператора, алгоритму не під в напрямку «прямої гілки», а продовжить обхід графу через Else-гілку. Блок схема алгоритму обходу підграфу WHILE…DO зображена на рис.19.

Рис. 19. Схематичне зображення алгоритму обходу підграфу циклу WHILE…DO

Перехід до наступної вершини

ні

так

Записати початок циклу

Помітити вершину як пройдену

Перехід до наступної вершини

ні

так

так

ні

Записати код вершини

Помітити вершину як пройдену

Записати кінць циклу

Псевдо код

Рис.20. Алгоритм обходу під графа циклу WHILE… DO

Останнім видом підграфу, який необхідно розглянути є підграф циклу DO…WHILE, який також базується на вершині умовного оператора IF. Алгоритм обходу даного підграфу подібний до вище описаного алгоритму обходу підграфу циклу WHILE…DO. Відмінностями в цьому підграфі є те, що його обхід починається не обов’язково вершини IF..ELSE, як у під графі циклу WHILE…DO (рис.20), а з будь-якої вершини, що вносить певні складнощі в побудову такого алгоритму. Складність побудови алгоритму генерації псевдокоду підграфу циклу DO…WHILE, полягає в тому, що необхідно, якимось чином відрізнити вершину початку циклу (обведена кружечком на рис. 21) тому, що ця вершина по своїм характеристикам (кількості вхідних і вихідних гілок) подібна до вершини закінчення підграфу умовного оператора IF…ELSE. Ключова відмінність між цими вершинами полягає в тому, з якої вершини в неї входять гілки. Тобто, для того щоб однозначно визначити, що вершина є початком підграфу циклу DO…WHILE, нам необхідно впевнитися в тому, що до вершини ведуть дві гілки, одна з яких, безпосередньо, є «прямою гілкою» вершини умовного оператора IF…ELSE. Напрямок обходу підграфу алгоритмом генерації псевдокоду зображено стрілочками, на рис. 21.

Рис. 21. Схематичне зображення алгоритму обходу підграфу циклу DO…WHILE

Перехід до наступної вершини

ні

так

Записати початок циклу

Помітити вершину як пройдену

Перехід до наступної вершини

ні

так

так

ні

Записати код вершини

Помітити вершину як пройдену

Записати кінць циклу

Псевдо код

Рис.22. Алгоритм обходу підграфа циклу DO… WHILE

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