равила утворює нове безліч цілей для узгодження. Отримуємо цільове дерево:
В
Потім Пролог буде шукати факти, що відповідають новим підцілей. Останнє результуюче дерево:
В
Розглянемо ще один приклад.
Програма 114
любить (оля, читання).
любить (світла, бадмінтон).
любить (для, бадмінтон).
любить (лена, плавання).
любить (лена, читання).
? - любить (X, читання), любить (X, плавання).
Запит означає: чи є люди, яким подобається і читання, і плавання? Спочатку Пролог шукає факт, зіставний з першою частиною питання: любить (Х, читання). Підходить перший же факт програми
любить (оля, читання).
і мінлива Х зв'язується значенням В«оляВ». У той же час Пролог фіксує в списку фактів покажчик, що показує стан процедури пошуку. Далі Пролог намагається погодити другу частину запиту за умови Х = оля, тобто шукає з самого початку програми факт В«любить (оля, плавання)В». Такого факту в програмі немає, і пошук закінчується неуспішно. Тоді Пролог повертається до первои частини запиту: любнт (Х, читання), В«розв'язуєВ» змінну Х і продовжує пошук відповідних фактів, починаючи з раніше встановленого в списку фактів покажчика Підходить факт В«любить (лена, читання)В», мінлива Х конкретизується значенням В« лена В», і далі друга частина питання успішно узгоджується з фактомВ« любить (лена, плавання) В». Пролог виконав в даному прикладі пошук з поверненням. p align="justify"> Графічно процес виконання програми представляється у вигляді обходу бінарного дерева - дерева виведення, типу зображеного на рис.3.16. Вершини дерева позначають питання, а ребра показують можливі шляхи виведення, причому для кожного ребра характерні свої правила і уніфікуються підстановка значень змінних.
В
рис.3.16. Дерево виведення програми на Пролозі
Обхід дерева починається з руху від вершини (запиту) по самій лівій гілці вниз до кінця (abed), при цьому запам'ятовуються всі крапки розгалуження (точки повернення). При досягненні кінця гілки рішення буде або знайдено, або ні. В обох випадках Пролог продовжує подальший пошук рішень. Виконується повернення в останню крапку розгалуження с. При цьому конкретні значення, присвоєні змінним при русі вниз на сегменті cd. скасовуються, і рух вниз триває по розташованій праворуч гілки з-е до кінця дерева вниз. Потім відбудеться повернення у попередню точку розгалуження b і рух продовжиться по гілки bfg, і так до тих пір, поки все дерево висновку не буде пройдено. br/>
Лекція № 8. Технології розробки програмного забезпечення
8.1 Класифікація методів проектування програмних продуктів
Проектування алгоритмів і програм - найбільш відповідальний етап життєвого циклу програмних продуктів, що визначає, наскільки створювана програма відповідає специфікаціям і вимогам з боку кінцевих користувачів. Витрати на створення, супровід та експлуатацію програмних продуктів, науково-технічний рівень розробки, час морального старіння та багато іншого - все це також залежить від проектних рішень. p align="justify"> Перехід до графічної середовищі роботи кінцевого користувача типу Windows або Macintosh потребуватиме створення користувацького інтерфейсу з елементами управління у вигляді піктограм, кнопок, випадаючих меню, обов'язкового застосування маніпулятора миша та ін Відсутність в програмному продукті вже стали стандартом подібних елементів свідчить про те, що в майбутньому будуть потрібні значні витрати на модифікацію цього продукту, інакше буде падати його конкурентоспроможність і привабливість для кінцевого користувача.
Методи проектування алгоритмів і програм дуже різноманітні, їх можна класифікувати за різними ознаками, найважливішими з яких є:
ступінь автоматизації проектних робіт;
схвалена методологія процесу розробки.
За ступенем автоматизації проектування алгоритмів і програм можна виділити:
методи традиційного (неавтоматизированного) проектування;
методи автоматизованого проектування (CASE-технологія і її елементи).
неавтоматизованих проектування алгоритмів і програм переважно використовується при розробці невеликих за трудомісткості і структурної складності програмних продуктів...