
- •Програмування
- •1. Алгоритми 12
- •2. Комп’ютери і програми 47
- •3. Мова програмування паскаль 56
- •4. Прості типи даних. Лінійні програми 61
- •5. Процедурне програмування 73
- •6. Програмування розгалужень 79
- •7. Оператори повторення з параметром. Масиви 99
- •7.13. Задачі і вправи 114
- •8. Ітераційні цикли 116
- •8.6. Задачі і вправи 124
- •9. Рекурсія 126
- •9.4. Задачі і вправи 135
- •10. Швидкі алгоритми сортування і пошуку 137
- •10.8. Задачі і вправи 148
- •11. Складні типи даних: записи і файли 150
- •11.11. Задачі і вправи 169
- •12. Множини 172
- •12.5. Задачі і вправи 175
- •13. Динамічні структури даних 176
- •14. Методологія структурного програмування: підсумки 192
- •1. Алгоритми
- •1.1. Змістовне поняття алгоритму
- •1.2. Виконавець алгоритмів і його система команд
- •1.3. Основні властивості алгоритмів
- •1.4. Величини
- •1.5. Типи величин
- •1.6. Цілі числа
- •1.7. Дійсні числа
- •1.8. Рядкові величини
- •У слові w знайти слово p і замінити його словом q.
- •1.9. Форми запису алгоритмів
- •1:Кінець.
- •X2 присвоїти значення x1
- •1:Кінець.
- •1.10. Команди управління
- •1.11. Блок - схеми
- •1.12. Допоміжні алгоритми
- •1.13. Базові структури управління
- •1.14. Абстракція даних
- •Приклад 1.7. Атд Планіметрія (виконавець Геометр)
- •1.15. Структурне програмування
- •1.16. Парадигма процедурного програмування
- •2. Комп’ютери і програми
- •2.1. Комп’ютер як універсальний Виконавець
- •2.1.1. Зовнішні пристрої комп’ютера
- •2.1.2. Центральні пристрої комп’ютера
- •2.1.3. Поняття про машинну мову
- •2.2. Мови програмування високого рівня
- •2.2.1. Коротка історія розвитку мов програмування
- •2.2.2. Про історію розвитку методів проектування програм
- •2.3. Основні етапи проектування програми
- •2.4. Технологія трансляції програм
- •2.5. Поняття про систему програмування
- •3. Мова програмування паскаль
- •3.1. Алфавіт мови
- •3.2. Концепція даних
- •3.3. Імена та їх застосування
- •3.4. Структура Pascal-програми
- •3.5. Поняття про лексику, прагматику, синтаксис і семантику мови програмування
- •3.6. Синтаксичні діаграми як засіб визначення мови програмування
- •4. Прості типи даних. Лінійні програми
- •4.1. Заголовок програми
- •4.2. Константи і їх використання. Розділ констант
- •4.3. Змінні програми. Розділ змінних
- •4.4. Стандартні прості типи даних
- •4.5. Тип даних Integer
- •4.6. Тип даних Real
- •4.7. Тип даних Сhar
- •4.8. Поняття виразу. Значення виразу. Тип виразу
- •4.9. Розділ операторів. Оператор присвоювання
- •4.10. Оператори введення - виведення
- •4.11. Приклад лінійної програми
- •4.12. Поняття складності виразу. Оптимізація обчислень
- •4.13. Оптимізація лінійних програм
- •4.14. Задачі і вправи
- •5. Процедурне програмування
- •5.1. Опис процедури
- •5.2. Формальні параметри. Локальні і глобальні об’єкти
- •5.3. Оператор процедури. Фактичні параметри
- •5.4. Функції
- •5.5. Приклади
- •6. Програмування розгалужень
- •6.1. Поняття умови. Тип даних Boolean (логічний)
- •6.2. Складений оператор
- •6.3. Оператори вибору: умовний оператор
- •6.4. Приклади
- •6.5. Задачі вибору й упорядкування
- •6.5.1. Задачі вибору
- •6.5.2. Дерево розв’язувань задачі вибору
- •6.5.3. Задачі на зважування
- •6.5.4. Ефективність алгоритму як кількість його кроків
- •6.5.5. Вибір даного елемента
- •6.6. Задачі упорядкування
- •6.6.1. Упорядкування елементів
- •6.6.2. Порівняння, перестановки і пересилання
- •6.7. Оптимізація розгалужень
- •6.8. Розділ типів. Перелічуваний тип
- •6.9. Оператори вибору: оператор варіанта
- •6.10. Вправи
- •7. Оператори повторення з параметром. Масиви
- •7.1. Оператор циклу з параметром
- •7.2. Циклічні програми. Складність циклічної програми. Оптимізація циклічних програм
- •7.3. Обмежені типи
- •7.4. Складні (складені) типи
- •7.5. Регулярний тип. Масиви
- •7.6. Пошук елемента в масиві
- •7.7. Ефективність алгоритму за часом
- •7.8. Мітки. Оператор переходу. Застосування оператора переходу для дострокового виходу з циклу
- •7.9. Постановка задачі сортування
- •7.10. Сортування масивів
- •7.10.1. Прості алгоритми сортування
- •7.11 Сортування обмінами
- •7.12. Сортування вибором
- •7.13. Задачі і вправи
- •8. Ітераційні цикли
- •8.1. Оператори повторення While і Repeat
- •8.2. Алгоритми пошуку і сортування. Лінійний пошук у масиві
- •8.3. Поліпшений алгоритм сортування обмінами
- •8.4. Бінарний пошук в упорядкованому масиві
- •8.5. Алгоритми сортування масивів (продовження). Сортування вставками
- •8.5.1 * Ефективність алгоритму
- •8.6. Задачі і вправи
- •9. Рекурсія
- •9.1. Рекурсивно-визначені процедури і функції
- •9.2. Приклади рекурсивних описів процедур і функцій
- •I стержень j стержень 6-I-j стержень
- •I стержень j стержень 6-I-j стержень
- •I стержень j стержень 6-I-j стержень
- •9.3. Переваги і недоліки рекурсивних алгоритмів
- •9.4. Задачі і вправи
- •10. Швидкі алгоритми сортування і пошуку
- •10.1. Нижня оцінка часу задачі сортування масиву за числом порівнянь
- •10.2. Швидкі алгоритми сортування: Сортування деревом
- •10.2.1. *Аналіз складності алгоритму
- •10.3. Пірамідальне сортування
- •10.3.1.*Аналіз складності алгоритму
- •10.4. Швидке сортування Хоара
- •10.5. Пошук k-того в масиві. Пошук медіани масиву
- •10.6.* Метод “розділяй і володій”
- •10.7.* Метод цифрового сортування
- •10.8. Задачі і вправи
- •11. Складні типи даних: записи і файли
- •11.1. Складні типи даних у мові Pascal
- •11.2. Записи
- •11.3. Записи з варіантами
- •11.4. Оператор приєднання
- •11.5. Рядки і засоби їх обробки
- •Процедури і функції типу String.
- •11.7. Файли. Управління файлами
- •11.8. Основні задачі обробки файлів
- •11.9. Сортування файлів
- •11.9.1. Алгоритм сортування злиттям
- •11.9.2. Аналіз складності алгоритму
- •11.10. Задача корегування файла
- •11.11. Задачі і вправи
- •12. Множини
- •12.1. Множинний тип
- •12.2. Конструктор множини
- •12.3. Операції і відношення над множинами
- •12.4. Застосування множин у програмуванні
- •12.5. Задачі і вправи
- •13. Динамічні структури даних
- •13.1. Стандартні динамічні структури
- •13.2. Посилальний тип даних. Посилання
- •13.3. Програмування динамічних структур даних
- •13.4. Стеки, списки, черги
- •13.5. Задачі
- •13.6. Дерева
- •13.7. Бінарні дерева
- •13.8. Задачі
- •14. Методологія структурного програмування: підсумки
- •14.1. Основні структури управління
- •14.2. Основні структури даних
- •14.3. Методологія програмування “зверху-вниз”
- •14.4. Приклад: Система лінійних рівнянь
- •14.5. Проектування модулів. Модуль rat
- •14.6. Реалізація модуля
- •14.7. Висновки (модульне програмування)
- •14.8. Заключне зауваження: переходимо до об’єктів
11.11. Задачі і вправи 169
12. Множини 172
12.1. Множинний тип 172
12.2. Конструктор множини 172
12.3. Операції і відношення над множинами 173
12.4. Застосування множин у програмуванні 173
12.5. Задачі і вправи 175
13. Динамічні структури даних 176
13.1. Стандартні динамічні структури 177
13.2. Посилальний тип даних. Посилання 179
13.3. Програмування динамічних структур даних 181
13.4. Стеки, списки, черги 183
13.5. Задачі 186
13.6. Дерева 187
13.7. Бінарні дерева 188
13.8. Задачі 192
14. Методологія структурного програмування: підсумки 192
14.1. Основні структури управління 193
14.2. Основні структури даних 196
14.3. Методологія програмування “зверху-вниз” 197
14.4. Приклад: Система лінійних рівнянь 198
14.5. Проектування модулів. Модуль RAT 207
14.6. Реалізація модуля 210
14.7. Висновки (модульне програмування) 212
14.8. Заключне зауваження: переходимо до об’єктів 213
ЧАСТИНА ІІ
ОСНОВИ ОБ’ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ
ВСТУП
Як відомо, однією з базових дисциплін, що формують фахівця з програмування, є дисципліна «Основи алгоритмізації і програмування» (ОАП). Саме ця дисципліна формує знання, уміння і навички складання алгоритмів, їхнього опису структурною алгоритмічною мовою і реалізації в системі програмування у вигляді комп'ютерної програми. Основна увага при цьому приділяється проблемам правильності й ефективності алгоритмів, організації структур даних і управління.
Як правило, навчальними мовами програмування обираються мови Паскаль, Бейсик, С і відповідні системи програмування. В результаті учні (або студенти) опановують елементи структурного програмування. Вони оволодівають технікою процедурного програмування «у малому», тобто здобувають той комплекс знань, умінь і навичок, що дозволяє створювати невеликі за розміром програми, що вирішують конкретні задачі опрацювання інформації. Структура таких програм, як правило є досить простою «введення – обчислення – виведення».
Разом з тим є очевидним, що цих знань явно недостатньо для написання «великих» прикладних програм, тобто програм, які можна порівнювати з комерційними програмними продуктами. Виявляється, що існує великий якісний розрив між тими комп'ютерними програмами, що учні або студенти пишуть самі, і тими, якими вони користуються на практиці, працюючи за сучасним комп'ютером. Ще кілька років назад цей розрив можна було усунути, використовуючи методи модульного програмування і стандартні модулі (такі, як Turbo Vision).
Сьогодні, у результаті переходу до сучасних об’єктно-орієнтованих операційних систем типу Windows і до відповідних об’єктно-орієнтованих технологій, цей розрив уже не можна ліквідувати, залишаючись у рамках старих методів і технологій програмування. Сучасна комп'ютерна програма під Windows у принципі не може бути «малою», тобто мати структуру типу «введення – обчислення – виведення». Вона завжди використовує, як мінімум, стандартні об'єкти Windows, і, саме головне, має об'єктно-орієнтовану архітектуру. Для створення такої програми володіння структурним стилем програмування і знання процедурних технологій у принципі недостатньо.
Для того, щоб мати представлення про методи проектування сучасних програмних систем, майбутній спеціаліст повинен вивчити і теоретичні основи сучасної методології объектно-орієнтованого програмування (ООП), і оволодіти практичними навичками програмування в об'єктах. При цьому він має побачити, що об’єктно-орієнтоване програмування – логічне продовження і розвиток процедурного програмування, наступний ступінь в його освіті, пов'язаний з переходом до програмування «у великому».
Розподіл обов'язків між ОАП і ООП виявляється наступним: в ОАП вивчаються методи реалізації поведінки окремих об'єктів, а в ООП – методи реалізації їхньої взаємодії в процесі функціонування програмної системи.
Таким чином, друга частина книги «Основи об’єктно-орієнтованого програмування» є необхідним і логічним продовженням першої - «Основи алгоритмізації і структурного програмування». Вона продовжує спеціальну теоретичну підготовку майбутнього спеціаліста з програмування, закладаючи фундамент для вивчення конкретних технологій програмування під Windows.
ЧАСТИНА І
ОСНОВИ АЛГОРИТМІЗАЦІЇ ТА СТРУКТУРНОГО ПРОГРАМУВАННЯ