Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_Book_Nizhyn.doc
Скачиваний:
71
Добавлен:
03.12.2018
Размер:
3.4 Mб
Скачать

КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ІМЕНІ ТАРАСА ШЕВЧЕНКА

М.С. Нікітченко

ТЕОРЕТИЧНІ ОСНОВИ ПРОГРАМУВАННЯ

Навчальний посібник

Незавершений чорновий варіант посібника

Прохання не розповсюджувати

УДК 004.4

ББК 22.18я73

Н62

Рецензенти

д-р фіз.-мат. наук Ю.А. Бєлов,

д-р фіз.-мат. наук А.Ю. Дорошенко

Затверджено вченою радою факультету кібернетики

(протокол №5 від 17 січня 2007 року)

Нікітченко М.С.

Н62 Теоретичні основи програмування: Навчальний посібник. – Київ: Видавничо-поліграфічний центр "Київський університет", 2009. – ??? с.

Викладено теоретичні основи програмування. Матеріал подано в семантико-синтаксичному стилі на основі єдиного для програмування, математичної логіки та теорії алгоритмів композиційно-номінативного підходу. Викладення проілюстровано прикладами, у кінці розділів запропоновано питання для самоконтролю та вправи для самостійного розв’язання.

Для студентів спеціальностей “Інформатика”, “Прикладна математика“, “Системний аналіз”.

УДК 004.4

ББК 22.18я73

М.С.Нікітченко, 2009

© Київський національний університет імені Тараса Шевченка,

ВПЦ "Київський університет", 2009

ВСТУП 5

1. Формалізація простої мови програмування 8

1.1 Неформальний опис простої мови програмування 8

1.2 Формальний опис синтаксису мови SIPL 10

1.3 Формальний опис семантики мови SIPL 17

1.4 Властивості програмної алгебри 33

2. Розвиток основних понять програмування 45

2.1 Аналіз словникових визначень поняття програми 46

2.2 Розвиток поняття програми з гносеологічної точки зору 47

2.3 Розвиток основних понять програмування 53

2.3.1 Початкова тріада понять програмування 54

2.3.2 Тріада прагматичності програм 57

2.3.3 Тріада основних понять програмування 59

2.3.4 Пентада основних понять програмування 61

2.4 Розвиток основних програмних понять 63

2.4.1 Тріада основних програмних понять 63

2.4.2 Пентада основних програмних понять 68

2.5 Сутнісні та семіотичні аспекти програм 71

2.6 Програми і мови 75

2.7 Пентада програмних понять процесного типу 76

3. Формалізація програмних понять 80

3.1 Теоретико-функціональна формалізація 80

3.2 Класи функцій 81

3.3 Програмні системи 82

3.4 Рівні конкретизації програмних систем 84

4. Синтактика: формальні мови та граматики 89

4.1 Розвиток понять формальної мови та породжучої граматики 89

4.2 Визначення основних понять формальних мов 99

4.3 Операції над формальними мовами 101

4.3 Породжуючі граматики 103

4.5 Ієрархія граматик Хомського 108

4.6 Автоматні формалізми сприйняття мов 114

4.6.1 Машини Тьюрінга 115

4.6.2 Еквівалентність машин Тьюрінга та породжуючих граматик 118

4.6.3 Лінійно-обмежені автомати 121

4.6.4 Магазинні автомати 122

4.6.5 Скінченні автомати 123

4.7 Методи подання синтаксису мов програмування 125

4.7.1 Нормальні форми Бекуса–Наура 125

4.7.2 Модифіковані нормальні форми Бекуса–Наура 126

4.7.3 Синтаксичні діаграми 127

4.8 Властивості контекстно-вільних граматик 130

4.8.1 Видалення несуттєвих символів 131

4.8.2 Видалення -правил 133

4.8.3 Нормальна форма Хомського 134

4.8.4 Нормальна форма Грейбах 135

4.8.5 Рекурсивні нетермінали 135

4.9 Властивості контекстно-вільних мов 136

4.10 Операції над формальними мовами 137

4.11 Дерева виводу 140

4.12 Однозначні та неоднозначні граматики 142

4.13 Розв’язні та нерозв’язні проблеми КВ-граматик та мов 143

4.14 Рівняння в алгебрах формальних мов 143

5. Теорія рекурсії (теорія найменшої нерухомої точки) 152

5.1 Рекурсивні визначення та рекурсивні рівняння 152

5.2 Частково впорядковані множини, границі ланцюгів та -області 154

5.3 Неперервні відображення 155

5.4 Теореми про нерухомі точки 156

5.5 Конструювання похідних -областей 158

5.6 Властивості оператора найменшої нерухомої точки 163

5.7 Застосування теорії ННТ 165

5.7.1 Уточнення синтаксису мов програмування 165

5.7.2 Семантика мов програмування 168

5.7.3 Рекурсивні розширення мови SIPL 173

ВСТУП

Інформаційні технології застосовуються зараз практично у всіх сферах життя людства. Ці технології корінним чином змінили світ. Значні успіхи в телекомунікаціях, енергетиці, транспорті, медицині, освіті, космічних дослідженнях та інших сферах діяльності людства, досягнуто завдяки використанню інформаційних технологій. Однак таке розширення області їх застосувань має і негативну сторону. Людство стає все більш залежним від надійного і правильного функціонування комп’ютерних систем; помилки в їх роботі часом ведуть до величезних фінансових, а навіть і людських втрат. Дотепер фірми-розробники програмного забезпечення не дають гарантію на програмні продукти, що вони пропонують користувачу. Але такого фактично немає ні в одній іншій області діяльності. Будь-який легальний продавець якогось товару дає гарантії якості і готовий нести (пригадаємо повернення мільйонів автомобілів на заводи виробника у разі виявлення дефектів) фінансову і юридичну відповідальність за поставку недоброякісного продукту.

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

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

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

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

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

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

Місце в структурно-логічній схемі спеціальності. Нормативна навчальна дисципліна "Теорія програмування" є складовою циклу професійної підготовки фахівців освітньо-кваліфікаційного рівня "бакалавр". Курс теорії програмування потрібен для подальшого вивчення нормативних дисциплін "Системне програмування", "Бази даних та інформаційні системи", "Інтелектуальні системи", "Теорія обчислень", "Штучний інтелект", "Формальні методи розробки програмних систем", "Інформаційні технології", "Прикладна логіка", низки спецкурсів відповідного напряму.

Структура курсу:

  • Основні програмні поняття

  • Синтактика

  • Семантика

  • Методи розробки програм

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

Назва курсу «Теорія програмування» складається з двох термінів – «теорія» та «програмування». Перш ніж переходити до розгляду «теорії програмування», розглянемо основні властивості кожного із термінів, які складають назву курсу.

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