
- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни Рекомендовано Міністерством освіти України
- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни
- •Тема 1. Введення в теорію алгоритмів 6
- •Тема 2. Форми та засоби представлення алгоритмів 14
- •Тема 3. Алгоритмічні системи 23
- •Тема 4. Класифікація задач і процесів обробки інформації 44
- •Тема 5. Типи алгоритмічних процесів та принципи їх побудови 49
- •Тема 6. Алгоритми обробки соціально- економічної інформації 88
- •Тема 7. Визначення та короткий огляд мов програмування 123
- •Тема 8. Технологія програмування 133
- •Типова програма
- •Дисципліни «Алгоритмізація і програмування
- •Процедур обробки інформації»
- •Частина і
- •Тема 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. Запитання для самоконтролю засвоєння теми
1.1.2. Алфавітні оператори
Алфавітним оператором (або відображенням) називають будь-яку відповідність (функцію), яка зіставляє слова в тому самому або в іншому алфавіті.
Алфавітні оператори мають різні особливості залежно від того, які вихідні слова вони зіставляють із вхідним.
Якщо алфавітний оператор зіставляє із вхідним словом лише одне вихідне, він є однозначним.
Саме такі оператори використовуються в алгоритмах, бо тільки вони забезпечують їм властивість визначеності, тобто один єдиний результат кожної операції та алгоритму в цілому.
Якщо алфавітний оператор не зіставляє із вхідним словом жодного вихідного, то говорять, що оператор невизначений на цьому слові. У самому визначенні слова закладено можливість вважати словом і один символ і будь-який текст. Тому існують оператори різної складності реалізації.
Найпростіші відображення — це посимвольні (політерні), тобто такі, що зіставляють символи двох різних алфавітів.
Потім ідуть відображення, які зіставляють із символом вхідного алфавіту слово вихідного алфавіту. До них належать так звані кодуючі відображення, застосування яких називають кодуванням. При кодуванні кожний символ аi вхідного алфавіту А зіставляється із послідовністю bi1, bi2 ... biк символів алфавіту В, тобто словом в алфавіті В. Це слово можна назвати кодом символу аi, якщо
1) кожному символу відповідає тільки одне слово;
2) різним символам алфавіту А відповідають різні слова в алфавіті В;
3) код будь-якого символу алфавіту А не збігається з жодним початковим відрізком кодів інших символів цього алфавіту.
Дотримання цих умов дозволяє однозначно виконати зворотній процес — декодування. Наприклад, нехай є два алфавіти А = {a, b, c, ..., z} та В = {, , , ..., }, а також відображення а ; b ; с ;... Нехай ми маємо вихідне слово . Яким було вхідне слово? аbа чи са? Неоднозначність випливає з того, що код символу а збігається з початковим відрізком коду с. Отже, ці відображення не є кодуючими.
Таких складностей можна уникнути, якщо прийняти, що коди мають однакову довжину, отже, умова 3 буде дотримуватись автоматично.
Кодування дозволяє звести вивчення довільних алфавітних відображень у якомусь стандартному алфавіті, наприклад у двійковому. При цьому можна визначити мінімальну довжину кода, якщо відомі кількості літер вхідного та вихідного алфавітів.
Нехай А — довільний алфавіт, що має n літер; В — стандартний алфавіт, що має m літер. То завжди можна знайти число k таке, щоб задовольнити нерівність mk>n, де mk — кількість різних слів довжини k в алфавіті, що складається з m букв. Якщо алфавіт В двійковий, алфавіт А — латинський (26 літер), то 2k >26, виконується для k>5. Тобто всі літери алфавіту А можна закодувати словами алфавіту В довжиною 5 літер: 00001, 00010 ... 11010.
Існує теорема, за якою кожному алфавітному оператору в алфавіті А відповідає алфавітний оператор в алфавіті В, спряжений з ним. Це дуже важлива теорема, бо вона дозволяє будь-яку послідовність оператора перетворення інформації в одному алфавіті (А) замінити послідовністю операторів перетворення інформації в іншому алфавіті (В) з попереднім кодуванням вхідної інформації (А В), а потім декодуванням вихідної інформації (В А).
З цього випливає, що поняття алфавітного відображення є найбільш загальним, і в нього вкладається будь-який процес перетворення інформації.
Однак є важливий момент. Алфавітний оператор тільки вказує, яке вихідне слово ставиться у відповідність деякому вхідному. А от як це вихідне слово отримати, алфавітний оператор не говорить, тобто це свого роду позначення Y = f(х). За якими правилами визначити оце f(х), — невідомо. Так от:
Алфавітні оператори, що задаються за допомогою системи правил, називають алгоритмами.
Наприклад, можна систему правил задати як таблицю відповідності (словники, шрифти ...), як формулу (Y = Х2, тобто Х ХХ, Х = 1, 2, ..., n) або просто перелічити правила гри у шахи, якими можна скористатися, щоб від початкового положення фігур на дошці прийти до такого, коли супротивник втрачає короля, тобто програє.
Отже, на відміну от алфавітного оператора, для якого головним є встановлення відповідності між вхідними і вихідними словами, для алгоритму головним є спосіб, за яким ця відповідність встановлюється.
Таким чином, алгоритмом є алфавітний оператор разом із правилами, які встановлюють його дії.
Згідно зі сказаним два алфавітних оператори вважаються рівними, якщо вони мають одну й ту саму область визначення і кожному слову з цієї області ставлять у відповідність однакові вихідні слова.
Два алгоритми вважаються еквівалентними, якщо у них збігаються алфавітні оператори, а способи їх завдання (реалізації) не збігаються (наприклад, розв’язання задач різними способами).
Самозмінювані алгоритми — це такі, що в процесі реалізації не тільки змінюють інформацію, а й змінюються самі. Це вже перетворення алгоритмів.