
- •Програмування
- •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. Заключне зауваження: переходимо до об’єктів
1.2. Виконавець алгоритмів і його система команд
При складанні алгоритму треба мати на увазі, що його буде виконувати Виконавець (Інтерпретатор) – деякий фізичний або абстрактний пристрій, що однозначно розпізнає і точно виконує (інтерпретує) кожну команду алгоритму.
Для виконання алгоритму додавання дробів Виконавець повинен вміти оперувати з цілими числами. Крім того, виконавець повинен уміти запам'ятовувати результати виконання операцій як значення відповідних змінних і переходити до виконання наступної команди.
Уявимо собі, що в нашому розпорядженні є Виконавець, що інтерпретує команди – операції арифметики цілих чисел – додавання, віднімання, множення, обчислення неповної частки (div) і залишку (mod), обчислення НСД і НСК із запам'ятовуванням результатів і умінням переходити до наступної команди. Тоді для цього Виконавця можна складати різноманітні алгоритми арифметичних обчислень – тобто обчислень, заданих формулами типу
X = НСД((A + B) div 100, (A*B - 7) mod 10),
використовуючи команди, аналогічні командам алгоритму з приклада 1.1. Для цього необхідно, з огляду на пріоритети арифметичних операцій, правильно визначити послідовність виконання арифметичних дій і записати її у виді послідовності команд.
Приклад 1.2 Алгоритм поділу відрізка навпіл за допомогою циркуля і лінійки.
Алгоритм Середина відрізку;
Вхід Точки A, B – кінці відрізка АВ;
Вихід Точка Е - середина відрізка AB.
Побудувати коло O1 з центром A і радіусом AB;
Побудувати коло O2 з центром B і радіусом AB;
Знайти точки С і D перетину кіл O1 і O2;
Побудувати пряму l1 через точки C, D;
Побудувати пряму l2 через точки A, В;
Знайти точку E перетину прямих l1 , l2.
У прикладі 1.2 Виконавець має систему команд, за допомогою яких можна вирішувати геометричні задачі на побудови за допомогою циркуля і лінійки. Назвемо цього Виконавця Геометром. Виконання алгоритму полягає в послідовному виконанні кожної побудови і переході до наступної команди. Тому нумерувати команди алгоритму не потрібно. Перелічимо команди Геометра:
Побудувати відрізок s з кінцями в точках A, В:
Вхід: точки А, В.
Вихід: відрізок s з кінцями в точках A, В.
Побудувати пряму l через точки A, B:
Вхід: точки А, В.
Вихід: пряма l, що проходить через точки A, В.
Побудувати коло O з центром A і радіусом ВC:
Вхід: точки А, B, C.
Вихід: коло O з центром A і радіусом BC.
Знайти точку А перетину прямих l1 і l2 :
Вхід: прямі l1, l2.
Вихід: точка A перетину l1 і l2.
Знайти точки А і В перетину кола O і прямої l;
Вхід: коло О, пряма l.
Вихід: точки A і В перетину кола О і прямої l.
Знайти точки А і В перетину кіл O1 і O2;
Вхід: кола О1, О2.
Вихід: точки A і В перетину кіл О1 і О2.
На відміну від приклада 1.1, у прикладі 1.2 величинами є найпростіші геометричні фігури – точки, прямі, кола. Вони служать і вихідними даними, і результатами команд. Кожна з команд виконавця Геометр виконує одну з дій, які можна виконати за допомогою циркуля або лінійки.
Таким чином, набір команд виконавця Геометр орієнтований на рішення точно визначеного класу задач – геометричних задач на побудови за допомогою циркуля і лінійки.
Опис кожної команди містить у собі:
точний «зовнішній вигляд»,
вхідні величини,
вихідні величини,
зв'язок між вхідними і вихідними величинами.
Сукупність величин, розглянута разом з набором припустимих перетворень, утворює предметну область.
Виконавець алгоритмів уміє виконувати команди, кожна з яких визначає одне з припустимих перетворень. Алгоритм є послідовністю цих команд. Тому виконавець призначений для виконання будь-якого алгоритму над даною предметною областю.
Наведемо ще кілька прикладів предметних областей.
1. Шахи. Ця предметна область являє собою шахівницю, на якій розташовані білі і чорні шахові фігури. Кожна з фігур описується сукупністю своїх припустимих ходів і правилами взаємодії з іншими фігурами. Тому в шахах можливі постановки алгоритмічних задач.
Наприклад: Побудувати алгоритм, що переводить коня з поля a1 на поле h8. Інших фігур на шахівниці немає.
2. Дороги міста. Ця предметна область представлена картою міста, на якій позначені вулиці і перехрестя, а також списком видів транспортних засобів, які їздять містом. Визначені правила руху уздовж кожної вулиці, що дозволяють або забороняють рух уздовж вулиці в даному напрямку тому або іншому видові транспорту, а також аналогічні правила проїзду через перехрестя. В цій ситуації можливі постановки алгоритмічних задач.
Наприклад: Проїхати на легковому автомобілі від одного перехрестя до іншого через мінімально можливе число проміжних перехресть.
3. Черепашка. Алгоритмічна мова Лого, призначена для навчання основам алгоритмізації молодших школярів, виконавцем алгоритмів пропонує Черепашку. Черепашка вміє рухатися в різних напрямках, що задаються в командах, малювати хвостом лінії уздовж напрямку свого руху. Програміст має можливість описувати алгоритми малювання простих картинок.
Наприклад: Намалювати будиночок з дахом, одними дверима і двома вікнами.