- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни Рекомендовано Міністерством освіти України
- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни
- •Тема 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. Запитання для самоконтролю засвоєння теми
8.1.6. Налагодження програми
Налагодження програми — найбільш трудомісткий та найменш придатний до формалізації елемент роботи програміста. Особливість його полягає в тому, що необхідність налагодження виникає в незапланованих випадкових подіях, тому неможливо розробити єдину конструктивну методику налагодження. Забезпечити правильність програми можна двома шляхами: профілактичними заходами на всіх етапах розробки програми для зменшення ймовірності появи помилок у тексті програми, а також теоретичною та експериментальною перевіркою створеного тексту програми.
Проаналізуємо джерела помилок:
1) Неправильність або неоднозначність вхідного опису. Звинувачувати у цих помилках можна постановника задачі, а виправляти їх змушений буде програміст (може, аж на етапі супроводження).
2) Неправильність тлумачення вхідного опису або помилки проектування.
Перелічені помилки мають змістовний характер, тому спричиняють помилки алгоритму обробки інформації.
3) Помилки етапу кодування можуть бути змістовного характеру та синтаксичні, яких припускається програміст при написанні тексту програми, або при трансляції отримується програма, не адекватна вхідному модулю.
Звичайно ж, краще запобігти таким помилкам, ніж знайти їх та виправити. Треба вжити всіх технологічних заходів, щоб не припуститися помилок або виявити їх на етапах, що передують кодуванню. Отже, якщо доведено коректність постановки задачі, тобто відповідність результативної інформації загальним специфікаціям, то тестування складеного алгоритму перевірить, наскільки він забезпечує деталізовані специфікації окремими модулями програми. Тестування програми — це перевірка її шляхом створення середовища, еквівалентного реальному, в якому повинна функціонувати програма. Це середовище має дві складові: програмну та інформаційну. Програмну ми обговоримо пізніше. Інформаційна складова містить вхідну оброблювану інформацію, вхідну управлінську інформацію задачі та вихідні дані. Перевірка здійснюється в умовах такої різноманітності середовища, коли перевіряється кожна можлива послідовність операторів, що з’єднує початок і кінець програми. Підмножину середовища, необхідну і достатню для повної перевірки програми, назвемо повним тестом програми. Якщо не виконується умова необхідності, то при тестуванні повторюватимемо окремі шляхи кілька зайвих разів. Якщо не виконується умова достатності, деякі шляхи залишаться неперевіреними. Це дуже складна і важлива задача — знайти повний тест, щоб користуватись ним упродовж усього життєвого циклу програми, і розв’язується вона за допомогою копіткого аналізу тексту програми чи проекту або аналізу середовища (може використовуватись змішаний варіант). Однак аналіз програми не гарантує виявлення помилок, припущених на етапах створення вихідних описів та проектування. Тому найчастіше тест складають на основі аналізу середовища та функції обробки, які разом визначають клас задач.
Принципове значення має послідовність перевірки модулів: від верху до низу або від низу до верху.
Якщо перевірка здійснюється від низу до верху, то відбувається локальне тестування окремих модулів найнижчого рівня, потім сумісне тестування груп модулів, інформаційно пов’язаних між собою, потім комплексне тестування всієї програми. На другому й третьому етапах тестування використовується інформація, отримана на першому етапі, та інформація, що імітує зв’язки між модулями, — саме вона і є програмною складовою середовища тестування.
При перевірці програми від верху до низу спочатку перевіряється модуль найвищого рівня, а потім до нього послідовно підключаються модулі більш низьких рівнів — аж до найнижчого. Складають дані для перевірки всієї програми в цілому, а для перевірки кожного окремого модуля імітують частину середовища, що відображає зв’язок з модулями нижчих рівнів.
Так чи інакше помилки виявляються, локалізуються, діагностуються та виправляються. Отримавши після тестування правильну програму, ми можемо бути впевненими не в абсолютній безпомилковості програми, а в її правильності відносно обраного тесту. Деякі помилки можуть бути виявлені на етапах використання та супроводження.
Для полегшення процесу налагодження розроблено велику кількість різноманітних засобів: вбудована в транслятор діагностика синтаксичних помилок, програми трасировки, спеціальні програми, використовувані у кожній технології програмування.
8.1.7. Використання інтерактивних методів у розробці та налагодженні програм
Значно підвищити оперативність праці програміста можна за рахунок застосування інтерактивних методів, що забезпечують активну взаємодію програміста та ЕОМ. Існує велика кількість різних розвинутих систем інтерактивної роботи, але кожна має набір таких елементарних дій: коригування текстів, написаних вихідною мовою, видалення та дозапис рядків тексту, їх нумерація, об’єднання різних програмних текстів, виділення частин, перейменування розділів, де зберігаються тексти, створення копій і т.ін. Це дозволяє коригувати та використовувати типові програмні заготівки, виконувати деякі обслуговуючі функції тощо. Рівень автоматизації виконання перелічених дій у різних інтерактивних системах різний. Але всі вони мають і спільні риси. Отже, можна сформулювати їх, а також надати прості поради (на рівні здорового глузду), як готуватись до діалогу з ЕОМ та працювати в інтерактивному режимі.
Перш за все перелічимо типи діалогу, які використовуються в діалоговій системі (окремо чи в комбінації):
меню;
запити, що потребують відповіді ТАК / НІ;
шаблон;
простий запит;
команда;
взаємодія природною мовою.
Кожний із них має свої переваги та недоліки, особливості реалізації, аналіз яких дозволяє в кожному конкретному випадку обрати потрібний тип для ефективного ведення діалогу.
Діалог ЛЮДИНА – ЕОМ — це різновид діалогу взагалі. Суб’єкти діалогу: людина та діалогова система (ДC). Здійснюється обмін інформацією в інтерактивному режимі згідно з мовою та формою спілкування.
До початку сеансу необхідно з’ясувати:
назву ДC, її функціональні можливості, режим роботи;
до кого слід звернутися у випадку виникнення організаційних, технологічних та інших ускладнень; який прийнято порядок консультації;
чи придатна ця ДC для розв’язання конкретної задачі;
які ще ДC доступні для використання;
до освоєння ДC краще її не критикувати, бо можна опинитись у незручному становищі;
як виходити з тупикових ситуацій.
Тільки після вивчення ДC, підготувавши всі вихідні матеріали до 1-го сеансу роботи, можна замовляти машинний час та інші ресурси й братися до роботи.
Під час роботи з ДC:
треба пам’ятати, що ДC є захищеною від помилкових дій користувача, які можуть її зруйнувати або пошкодити користувачеві (хоча, якщо ДC все ж таки зруйновано, то це погана ДC);
якщо виникає незрозуміла ситуація, то необхідно викликати функції допомоги, які є у кожній ДC;
слід пам’ятати, що ДC допомагає тільки в рутинній частині роботи, а творча частина та прийняття рішень залишаються користувачеві;
дуже зручно, що користувач може задавати одне й те саме питання скільки завгодно разів, як правило, на стан діалогу це не вплине;
не змагайтесь з ДC у швидкості роботи, працюйте у своєму звичному темпі;
нові повідомлення ДC треба вивчити, виділити ті, що впливають на подальший хід діалогу;
якщо невдача неодноразова, то необхідно переформувати запит до ДC, підійти з іншого боку, або розбити запит на декілька більш простих запитів;
якщо знайдено вдалу послідовність дій в якомусь режимі, зробіть її аналогію в інших режимах у схожих ситуаціях;
якщо ви все ж таки опинились у глухому куті, то доцільно припинити марні спроби, щоб не зіпсувати отримані результати;
не треба вирішувати всі проблеми, сидячи перед екраном, це малоефективно; краще роздрукувати результати, стани задачі (текст, проміжні результати, результати тестування і т.ін.);
після закінчення роботи з ДC необхідно проаналізувати результати, хід діалогу (особливо якщо результат негативний), знайти помилки, накреслити шляхи їх усунення, більш детально ознайомитись із ДC, проконсультуватися зі спеціалістами, розробити нову стратегію діалогу та підготуватись до наступного сеансу.
