Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекція_3_2_2_парадигми_пр.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.16 Mб
Скачать

Теорема про структурне програмування:

Будь-яку схему алгоритму можна представити у вигляді композиції вкладених блоків begin і end, умовних операторів if, then, else, циклів із предумовою (while) і можливо додаткових логічних змінних (прапорів).

Правила зв'язку програмних модулів по керуванню:

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

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

  • Модулі нижчих рівнів чи одного рівня ієрархії можуть викликатись для виконання лише модулями вищих рівнів, тобто модулі нижчих рівнів не можуть викликати модулі вищих рівнів, а модулі одного рівня - викликати один одного.

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

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

Правила зв'язку програмних модулів по інформації:

  • Інформація зон глобальних змінних доступна для використання будь-яким модулям із складу комплекса програм (КП) або групи програм згідно до області дії зони глобальних змінних. Тобто глобальні змінні можуть бути доступні не для всього КП, а лише для зазначеної в описі групи модулів.

  • Локальні змінні доступні лише в межах того модуля, у якому вони визначені або оголошені.

  • Для міжмодульної взаємодії створюються зони обмінних змінних, інформація з яких доступна лише модулям, безпосередньо зв'язаним по керуванню.

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

  • Інформація, наявна в регістрах модуля виклику, має бути збережена на період виконання викликуваного модуля і відновлена при поверненні у модуль виклику. Регістри можуть зберігати як модуль виклику, так і викликуваний модуль, однак прийнята угода повинна бути єдиною для всіх викликів модулів.

Принципи структурного програмування були реалізовані в мові Алгол, але найбільшу популярність завоювала мова Паскаль, створена в 1970 році швейцарським ученим Н. Віртом. Вона може вважатись зразковою мовою програмування, найбільш популярною і зараз (наприклад, у версії Delphi фірми Imprise).

Деякі позитивні якості структурного програмування:

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

  2. У структурованих програмах логічно зв'язані оператори перебувають візуально ближче, а слабко зв'язані — далі, що дозволяє обходитись без блок-схем і інших графічних форм зображення алгоритмів (по суті, сама програма є власною блок-схемою).

  3. Сильно спрощується процес тестування і налагодження структурованих програм.

Як основний формалізм для представлення структур програм використовуються Бекусо-Наурови форми та розширені БНФ (РБНФ).

Опис структури в РБНФ є набір правил, що визначають відношення між терміналами і нетерміналами.

Термінали - елементи структури, що не мають власної структури. У РБНФ термінали - це або визначені поза РБНФ ідентифікатори (імена, що вважаються заданими для даного опису структури), або ланцюжки - послідовності символів у лапках або апострофах.

Нетермінали - елементи структури, що мають власні імена й структуру. Кожне ім'я є рядок символів, а структура визначається правилами, що фіксують його залежність від одного або більше терміналів й/або нетерміналів.

Правило в РБНФ має вигляд:

ідентифікатор = вираз.

де ідентифікатор - ім'я нетермінального символу, а вираз - комбінація терміналів і нетерміналів, об’єднаних спеціальними знаками синтаксису правил РБНФ. Крапка наприкінці - символ, що вказує на завершення правила.

Семантика правила РБНФ: нетермінал, заданий ідентифікатором ліворуч від знака "=", визначається деяким відношенням терміналів і нетерміналів.

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

Набір можливих конструкцій РБНФ: конкатенація, альтернативний вибір, умовне входження й ітерація.

Конкатенація визначається послідовним записом символів виразу, що розділяються одним або більше пробільними символами. Правило виду A = B C. позначає, що нетермінал A складається із двох символів - B і C. Наприклад,

Присвоювання = Змінна ":=" Вираз.

- тут нетермінал Присвоювання визначений як конкатенація термів Змінна, ":=" і Вираз.

Альтернативний вибір позначається вертикальною рискою. Правило A = B|C|D. позначає, що нетермінал A може складатись або з B, або з C, або з D.

Умовне входження. Квадратні дужки виділяють необов'язковий елемент виразу. Правило A = [B]. позначає, що нетермінал A або є порожнім, або складається із символу B.

Ітерація. Фігурні дужки позначають конкатенацію будь-якого числа (включаючи нуль) записаних у ній елементів. Правило виду A = {B}. позначає, що A - або порожній, або є конкатенація деякого числа символів B.

Крім основних операцій, у РБНФ можуть використатися звичайні круглі дужки для групування елементів при формуванні складних виразів. Наприклад, правило A = (B|C)(D|E). позначає, що A складається із двох символів, першим з яких є або B, або C, другим - або D, або E, тобто A може бути одним з ланцюжків BD, BE, CD, CE.

Вочевидь, окремим випадком структурного програмування є атрибутні граматики, запропоновані Д. Кнутом для формального опису семантики мов програмування. Атрибутні трансляційні граматики є узагальненням КС-граматики за рахунок приєднання до синтаксичних правил граматики функцій, що обчислюють, так звані, "атрибути" вузлів дерева виводу й, тим самим, "значення" твердження КС-мови. Для цієї ж мети, у свій час, були розроблені й застосовувались і інші формальні системи такі, як W-Граматики, Віденська метамова. Атрибутні трансляційні граматики, як формалізм опису систем, використовують і зараз.

Задачі ШІ вимагають роботи з даними й знаннями у вигляді символьних структур. В обробці символьної інформації важлива не лише форма розглянутих знань, але і їх зміст і значення.

Причиною виникнення наприкінці 1950-х років програмних засобів символьної обробки є нездатність процедурних мов у вигляді чисел і масивів відображати природно об'єкти і ситуації дійсності. Цей недолік, зокрема, утруднював реалізацію евристичних методів, застосовуваних у розв'язку задач ШІ.

В основі ДЕКЛАРАТИВНИХ мов лежить формалізована людська логіка: