- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни Рекомендовано Міністерством освіти України
- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни
- •Тема 1. Введення в теорію алгоритмів 6
- •Тема 2. Форми та засоби представлення алгоритмів 14
- •Тема 8. Технологія програмування 133
- •Тема 3. Алгоритмічні системи 23
- •Тема 4. Класифікація задач і процесів обробки інформації 44
- •Тема 5. Типи алгоритмічних процесів та принципи їх побудови 49
- •Тема 6. Алгоритми обробки соціально- економічної інформації 88
- •Тема 7. Визначення та короткий огляд мов програмування 123
- •Типова програма
- •Дисципліни «Алгоритмізація і програмування
- •Процедур обробки інформації»
- •Частина і
- •Тема 4. Класифікація задач і процесів обробки інформації
- •Тема 5. Типи алгоритмічних процесів та принципи їх побудови
- •Тема 6. Алгоритми обробки соціально-економічної інформації
- •Тема 7. Визначення та короткий огляд мов програмування
- •Тема 8. Технологія програмування
- •Навчально-методичне забезпечення
- •1.1. Методичні вказівки до вивчення теми
- •1.1.1. Визначення та властивості алгоритму
- •1.1.2. Алфавітні оператори
- •1.1.3. Характеристики алгоритму
- •1.2. Практичне заняття
- •1.3. Термінологічний словник
- •1.4. Завдання для перевірки знань
- •Тема 2. Форми та засоби представлення алгоритмів
- •2.1.1. Словесна форма
- •2.1.2. Словесно-формульна форма
- •2.1.3. Граф-схеми
- •2.1.4. Блок-схеми
- •2.1.5. Операторні схеми
- •2.1.6. Ніро-схеми
- •2.1.7. Таблиці рішень
- •2.2. Термінологічний словник
- •2.3. Практичні заняття
- •2.4. Задачі
- •3.1. Методичні вказівки до самостійного вивчення теми
- •3.1.1. Визначення алгоритмічної системи
- •3.1.2. Рекурсивні функції
- •3.1.3. Нормальні алгоритми Маркова
- •3.1.4. Машини Поста
- •3.1.5. Машини Тьюринга
- •3.1.6. Абстрактні автомати
- •3.1.7. Формальні граматики
- •3.1.8. Алгоритмічні основи еом
- •3.2. Термінологічний словник
- •3.3. Навчальні завдання
- •3.4. Завдання для перевірки знань
- •Тема 4. Класифікація задач і процесів обробки інформації
- •4.1. Методичні вказівки до самостійного вивчення теми
- •Науково-технічні задачі
- •Задачі обробки спискових структур
- •Задачі обробки символьної інформації
- •Інформаційно-пошукові задачі
- •Задачі моделювання та ділові ігри
- •Економічні задачі
- •4.2. Питання для перевірки знань
- •Тема 5. Типи алгоритмічних процесів та принципи їх побудови
- •5.1. Методичні вказівки до вивчення теми
- •5.1.1. Лінійні алгоритми (5.1)
- •5.1.2. Розгалужені алгоритми (5.2)
- •5.1.3. Прості циклічні процеси з параметром (5.5)
- •5.1.4. Ітераційні циклічні процеси ( 5.6 )
- •5.1.5. Складні циклічні процеси (5.7)
- •5.2. Термінологічний словник
- •5.3. Плани практичних занять
- •Запитання для перевірки знань
- •Запитання для перевірки знань
- •Приклади задач
- •Запитання для перевірки знань
- •Приклади задач
- •Запитання для перевірки знань
- •Приклади задач
- •Запитання для перевірки знань
- •5.4. Навчальні завдання Завдання до 1-го заняття
- •Завдання до 2-го заняття
- •Завдання до 3-го заняття
- •Завдання до 4-го заняття
- •Завдання до 5-го заняття
- •5.5. Завдання для перевірки знань
- •Тема 6. Алгоритми обробки соціально-економічної інформації
- •6.1. Методичні вказівки до вивчення теми
- •6.1.1. Створення та контроль наборів даних (6.1)
- •6.1.2. Коригування наборів даних (6.2)
- •6.1.3. Сортування наборів даних (6.3)
- •6.1.4. Розрахунки підсумків на основі окремого запису (6.4)
- •Список працюючих жінок
- •6.1.5. Розрахунки підсумків на основі всіх записів (6.5)
- •Про середню заробітну плату
- •6.1.6. Розрахунки проміжних підсумків на основі частини записів (6.6)
- •6.1.7. Обробка запитів з використанням довідників (6.7)
- •Список підприємств
- •6.1.8. Розрахунки підсумків на основі багатьох запитів з використанням декількох вхідних файлів (6.8)
- •6.2. Плани практичних занять Заняття 1.
- •Запитання для перевірки знань:
- •Заняття 2
- •Запитання для перевірки знань
- •Наявна кількість матеріалу____________
- •Поділ працівників за статтю
- •Поділ працівників за неперервним стажем роботи
- •Поділ заробітної плати за розрядами робіт
- •Списки робітників, молодших за 20 років
- •Запитання для перевірки знань:
- •Список підприємств, що замовили
- •Перелік матеріалів
- •Справка про попит / пропозицію на
- •Сума затрат на матеріали
- •Результат обліку матеріалів на складах
- •Перелік матеріалів на складах
- •6.3. Термінологічний словник
- •6.4. Навчальні завдання
- •Тема 7. Визначення та короткий огляд мов програмування
- •7.1. Методичні вказівки до самостійного вивчення теми
- •7.1.1. Визначення мови програмування
- •7.1.2. Вимоги до мов програмування
- •7.1.5. Програмні інтерфейси та інструментальні засоби розробки програмних продуктів
- •7.2. Термінологічний словник
- •7.3. Запитання для самоконтролю засвоєння теми
- •Тема 8. Технологія програмування
- •8.1. Методичні вказівки до самостійного вивчення теми
- •8.1.1. Способи розробки програм
- •8.1.2. Основні технологічні етапи розробки програм
- •8.1.4. Розробка проекту програми
- •8.1.5. Написання програми
- •8.1.6. Налагодження програми
- •8.1.8. Супроводження програми
- •8.2. Запитання для самоконтролю засвоєння теми
3.1. Методичні вказівки до самостійного вивчення теми
Структурну схему понять, що визначають алгоритмічні системи, зображено на рис. 3.1
3.1.1. Визначення алгоритмічної системи
Розглядаючи алгоритми, ми торкалися питань вибору алфавіту для представлення інформації, а також визначення елементарних припустимих операцій для її перетворення. Ці два вибори пов’язані між собою і тому повинні розглядатися разом.
Абстрактний алфавіт та скінченна сукупність припустимих операцій складають алгоритмічну систему.
У різних алгоритмічних системах застосовують різні сукупності об’єктів (символів або станів), різні сукупності припустимих операцій та різні правила їх виконання. Одні й ті самі дані можуть бути представлені у різних алфавітах, а алгоритм роз-в’язання однієї й тієї самої задачі можна представити послідовностями різних припустимих операцій. Отже, одна й та сама задача може бути розв’язана у межах різних алгоритмічних систем. Складність алгоритму та простота його реалізації залежатимуть від того, наскільки вдало було обрано алгоритмічну систему для розв’язання конкретної задачі.
Доведено можливість та правомірність переходу з однієї алгоритмічної системи до іншої у процесі побудови та реалізації алгоритму розв’язання задачі (тобто виконання еквівалентних перетворень алгоритму).
У будь-якій алгоритмічній системі розрізняють два типи припустимих операцій: операції дії та операції розпізнавання. За допомогою операції дії здійснюється перехід з одного стану інформації про задачу до іншого.
Операції розпізнавання використовуються для встановлення тих чи інших особливостей стану інформації для визначення операцій дій.
У теорії алгоритмів розроблені та використовуються різні алгоритмічні системи, кожну з яких призначено для побудови алгоритмів розв’язання задач певного класу. Це такі системи, як рекурсивні функції, нормальні алгоритми Маркова, машини Поста та Тьюринга, абстрактні автомати, формальні граматики та інші.
3.1.2. Рекурсивні функції
Історично першою алгоритмічною системою була система, заснована на використанні конструктивно визначених арифметичних (цілочисельних) функцій, які назвали рекурсивними. Значення такої функції Y для будь-якого довільного значення аргумента х (з області визначення функції) знаходиться через значення цієї функції від аргумента х – 1. Тобто можна побудувати рекурентні співвідношення, які визначають, як саме залежить f(x) від f(x – 1).
Застосування рекурсивних функцій у теорії алгоритмів засновано на ідеї нумерації слів у довільному алфавіті послідовними натуральними числами.
Наприклад, таку нумерацію можна здійснити, розміщуючи слова у порядку зростання їх довжини, а слова, що мають однакову довжину, — у довільному лексикографічному порядку.
Після нумерації вхідних та вихідних слів будь-який алфавітний оператор перетворюється на функцію y = f(x), де х та у приймають цілі невід’ємні значення. Причому функція f(x) може бути визначена тільки для тих х, що належать області визначення цієї функції.
Подібні частково визначені цілочисельні функції називають арифметичними. При побудові алгоритмів використовується деякий набір елементарних арифметичних функцій, таких як:
1) функції, тотожньо рівні 0: f(x) = 0; для всіх х;
2) функції, тотожньо рівні аргументу: f(x) = x;
3) функції безпосереднього слідування: f(x) = x + 1.
Із цих елементарних арифметичних функцій за допомогою невеликої кількості операцій будують більш складні функції, що не виходять за межі класу рекурсних функцій. До них належать такі операції: суперпозиції, примітивної рекурсії, найменшого кореня.
Операція суперпозиції полягає у підстановці одних арифметичних функцій замість аргументів інших функцій.
Наприклад, нехай є
f(x) = 0;
g(x) = x + 1;
h(x) = g(f(x)).
Тоді:
h(0) = g(0) = 0 + 1 = 1;
h(x) = g(0) = 0 + 1 = 1.
Тобто отримали функцію, яка тотожньо дорівнює 1.
Якщо h(x) = g(g(x)), то h(x) = g(x + 1) = x + 1 + 1 = 2 і т.д.
Операція примітивної рекурсії дозволяє побудувати функцію, залежну від n + 1 аргумента, якщо відомі дві функції — одна від n аргументів, друга — від n + 2 аргументів.
Наприклад, побудуємо двомісну функцію додавання f(x, y) = x + y, якщо є одномісна g(x) = x; та тримісна h(x, y, z) = z +1. (Кількість аргументів можна збільшувати як завгодно.)
Завдяки операції примітивної рекурсії здійснимо побудову функції. Нехай
f(x, 0) = g(x);
f(x, y + 1) = h(x, y, f(x, y)); f(x, 0) = g(x) = x;
f(x, 1) = h(x, 0, f(x, 0)) = h(x, 0, x) = x + 1;
f(x, 2) = h(x, 1, f(x, 1)) = h(x, 1, x + 1) = x + 2;
. . .
f(x, y – 1) = h(x, y – 2, f(x, y – 2)) = h(x, y – 2, x + y – 2) = x + y – 1;
f(x, y) = h(x, y – 1, f(x, y – 1)) = h(x, y – 1, x + y – 1) = x + y.
Таким чином побудовано функцію, залежну від двох аргументів, значення якої обчислюються для будь-якого значення х, коли у змінюється від 0 до будь-якого цілого.
Функції, які можна побудувати з елементарних арифметичних функцій за допомогою операцій суперпозиції та примітивної рекурсії, називають примітивно рекурсивними.
Операція найменшого кореня, або операція мінімізації, дозволяє побудувати функцію f від n аргументів, якщо відома функція g, залежна від n + 1 аргумента, тобто зменшити кількість аргументів функції.
Нехай маємо функцію від n + 1 аргумента g(x1, x2 ... xn, y).
Побудуємо функцію від n аргументів f(x1, x2 ... xn).
Задамо значення для n аргументів функції g:
x1 = a1 ; x2 = a2 ... xn = an.
Підставимо ці значення у формулу, що визначає функцію g, отримаємо: g(а1, а2 ... аn, у).
Дорівняємо цей вираз до нуля і розв’яжемо рівняння відносно у:
g(a1, a2 ... an, y) = 0.
Нехай отримали y = a.
Вважатимемо це значення у за значення функції f від тих самих значень х1 ... хn :
f(a1 ... an) = a.
Діючи так, ми можемо визначити функцію f від будь-яких значень її аргументів. Отже, функцію f побудовано.
Наприклад:
g(x, y, z) = x + y +z f(x, y) = ?
g(0, 0, z) = 0 + 0 + z = 0 z = 0 f(0, 0) = 0
g(1, 0, z) = 1 + 0 + z = 0 z = –1 f(1, 0) = –1
g(0, 1, z) = 0 + 1 + z = 0 z = –1 f(0, 1) = –1
. . .
g(5, 2, z) = 5 + 2 + z = 0 z = -7 f(5, 2) = –7
g(–6,
1, z)
= –6 + 1 + z
= 0 z
= 5 f(–6, 1) = 5
f(x, y) = –x – y
