
- •Модуль реалізації алгоритмів на графах з візуалізацією етапів розробки
- •Анотація
- •1 Призначення та область застосування об’єкту проектування
- •1.1 Призначення та область застосування
- •1.2 Огляд способів та засобів розробки
- •1.2.1 Побудова блок-схем алгоритмів програм.
- •1.2.2 Правила побудови блок-схем
- •1.2.3 Створення блок схем алгоритмів за допомогою fcEditor
- •1.2.4 Огляд fceDitor
- •1.2.5 Створення нового проекту
- •1.2.6 Створення блок-схеми та генерація коду
- •1.2.7 Експорт блок схеми алгоритму
- •1.2.8 Імпорт блок схеми
- •1.3 Огляд програмних та апаратних засобів
- •1.3.1 Псевдо код
- •1.3.2 Мови програмування високого рівня
- •1.4 Постановка задачі на розробку
- •2 Проектування модуля реалізації алгоритмів на графах з візуалізацією етапів розробки
- •2.1 Поняття графа
- •2.1.1 Орієнтований граф
- •2.1.2 Змішаний граф
- •2.2 Цикли та умовний оператор if
- •2.2.1 Безумовні цикли
- •2.2.2 Цикл з передумовою
- •2.2.3 Цикл з післяумовою
- •2.2.4 Цикл з виходом із середини
- •2.2.5 Цикл з лічильником
- •2.2.6 Вкладені цикли
- •2.2.7 Спільний цикл
- •2.2.8 Умовний оператор if
- •2.3 Реалізація модуля побудови алгоритмів на графах з візуалізацією процесу розробки
- •2.4. Реєстр змінних
- •2.5 Алгоритм побудови псевдокоду
- •2.5.1 Генерація псевдокоду лінійного алгоритму
- •2.5.2 Генерація псевдокоду нелінійного алгоритму
- •2.6 Форматування псевдокоду
- •2.7 Аналіз правильності побудови графу
- •2.7.1 Алгоритм аналізу перевірки правильності графу
- •2.8 Вибір технології та мови програмування
- •3 Тестування системи
- •Висновки
- •Список використаних джерел
2.5.1 Генерація псевдокоду лінійного алгоритму
Генерація псевдо коду графу лінійного алгоритму не викликає яких-небудь складнощів, оскільки виконується звичайний обхід графу з записом коду кожної вершини (рис. 15)
|
INPUT a a = a + 12 OUTPUT a |
Рис. 15. Побудова псевдо коду лінійного алгоритму
Як видно з малюнку наведеного вище, елементарний лінійний алгоритм дав можливість побудувати такий кою. Серед особливостей, які слід відзначити, є такі:
при генерації псевдокоду вершини «Введення даних» буде виводиться текст «INPUT <variables list>», де variables list – це список змінних, які були записані при додаванні вершини;
при генерації псевдокоду вершини «Виведення даних» буде виводиться текст «OUTPUT <variables list>», де variables list – це список змінних, які були записані при додаванні вершини.
Таким чином алгоритм побудови псевдокоду лінійного алгоритму складається з перебігу усіх вершин графу у прямому напряму і запису коду вершин, з виконанням відповідних замін, які були наведенні вище. Оскільки алгоритм обходу рекурсивний, то для уникання повторного запису коду вершин, при виході з рекурсії використовується признак проходження вершини. При відвідуванні вершини їй встановлюється статус checked – вершина вже було розглянута і її код був записаний, з даного правила є виключення, яки буде описане нижче.
Рис. 16. Алгоритм генерації коду лінійного алгоритму
2.5.2 Генерація псевдокоду нелінійного алгоритму
Процес генерацій псевдокоду нелінійного алгоритму в значній мірі відрізняється від попередньо описаних дій. Відмінності полягають в процесі обходу графу та заміні коду вершин для кожного з виду підграфів. Таких під графів є три:
підграф вершини умовного оператора IF… ELSE,
підграф циклу WHILE…DO,
підграф циклу 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