
- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни Рекомендовано Міністерством освіти України
- •Алгоритмізація і програмування процедур обробки інформації Навчально-методичний посібник для самостійного вивчення дисципліни
- •Тема 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. Запитання для самоконтролю засвоєння теми
Тема 7. Визначення та короткий огляд мов програмування
7.1. Методичні вказівки до самостійного вивчення теми
7.1.1. Визначення мови програмування
Щоб використати ЕОМ для розв’язання задач, необхідно представити алгоритм у такому вигляді, в якому він може бути сприйнятий ЕОМ, тобто описаний на мові, зрозумілій ЕОМ. Цим описом є програма дій для ЕОМ, а процесом опису — програмування. Зараз у поняття «програмування» вкладають більш широкий зміст.
Для подальшого успішного використання ЕОМ необхідно, щоб мова опису була зрозуміла й людям. Природну мову для цього не можна використовувати, бо її фрази мають багатозначний зміст, і можуть бути нарізно інтерпретовані, що не є можливим для алгоритму. Звідси випливає необхідність розробки спеціальних формальних мов програмування.
Формальна мова будується за принципами будь-якої природної мови на базі певної граматики. Як і всі інші мови, вона складається з чотирьох структурних елементів: алфавіт мови, слова, вирази, оператори (речення). Щоб описати мову, треба перелічити припустимі символи алфавіту; сформулювати правила утворення слів (мінімальних структур мови, які мають зміст), правила побудови та опису припустимих у мові виразів (груп слів, пов’язаних між собою); перелічити всі типи й сформулювати правила побудови операторів (мінімальних структур, що висловлюють закінчену думку або дію).
Опис мови містить синтаксичні визначення, семантичні пояснення та граматичні форми.
Синтаксис мови — це сукупність усіх сформульованих правил побудови припустимих структур, створюваних із символів алфавіту.
Семантичні пояснення, або семантика мови, надають кожній структурі певного змісту.
Граматичні форми описують класи операторів та зв’язки між ними.
Формальна мова програмування має позитивні якості машинних та природних мов і у той самий час суттєво відрізняється від них:
— будь-яка синтаксично правильна структура мови має зміст;
— кожний вираз і кожний оператор має тільки один зміст і, отже, завжди однозначно інтерпретується;
— формальна мова має лаконічність машинних мов та наочність природних.
7.1.2. Вимоги до мов програмування
До формальної мови висувається ціла низка вимог та умов, які вона повинна задовольняти, якщо є алгоритмічною. Мова повинна бути:
1. Наочною, отже, має використовувати загальновідому математичну символіку та інші зображувальні засоби, що легко та звично сприймаються.
2. Єдиною, кількість зображувальних засобів не може бути завеликою, одні й ті самі засоби мають застосовуватись для виразу одних і тих самих або поріднених понять у різних частинах запису алгоритму. Це полегшує вивчення мови та її використання.
3. Гнучкою, будь-який поширений метод обчислювальної математики має описуватись без зайвого ускладнення.
4. Багатоступінчастою, тобто дозволяти описувати дуже складні алгоритми у вигляді сполучення порівняно невеликої кількості більш простих алгоритмів, що описуються окремо, можливо, через інші, ще більш прості алгоритми.
5. Однозначною, тобто зберігати якість визначеності алгоритму. Для цього повинна мати місце однозначна відповідність між текстами (текст—алгоритм, записаний мовою) та змістами (зміст або сенс — мета алгоритму). Тут немає взаємно однозначної відповідності, оскільки задачі можна розв’язувати різними способами і, отже, одному змісту може відповідати декілька текстів. (Але не навпаки.)
6. Незалежною від конкретних особливостей ЕОМ, для яких створюється програма. У той самий час мова повинна будуватись так, щоб можна було сформулювати правила, які б дозволили перетворити алгоритм, описаний за допомогою алгоритмічної мови, у програму для конкретної ЕОМ.
Якщо алгоритмічна мова задовольняє усі ці умови, вона може виконувати різні функції:
може бути засобом мислення. Логічна недосконалість методу розв’язання задачі визначається у процесі запису цього методу засобами алгоритмічної мови;
є засобом спілкування між людьми, бо опис обчислювального процесу, зроблений однією людиною, доступний іншим;
є посередником між різними ЕОМ.
Алгоритм, описаний такою мовою, матиме властивість масовості. Вона зручна для зберігання алгоритмів.
Алгоритмічна мова є породженням алгоритмічних систем -формальних граматик. У свою чергу, алгоритмічна мова є алгоритмічною системою, у межах якої будуються алгоритми обробки інформації.
Слід зазначити, що будь-яка мова програмування перебуває у постійному розвитку. Вона має три рівня представлення: еталонний (офіційне повідомлення робочої групи, тобто документ опису мови та її можливостей), рівень публікацій (довільний опис можливостей мови, порівняння з іншими, переваги та недоліки, тлумачення і т.ін.), робочий рівень (рівень використання, тобто робочий варіант або версія).
Крім того, майже всі сучасні мови програмування мають модульну структуру. Тобто в окремі модулі, що не перетинаються і не залежать один від одного, зібрано засоби обробки інформації певного типу чи певної організації. Якщо для роз-в’язання задач якогось класу використовуються лише деякі модулі, то можна завантажити тільки ці модулі, тобто створити робочу версію мови.
Якщо у мові програмування відсутні якісь можливості, то можна розширити її за рахунок включення нових засобів обробки інформації, або за рахунок втілення нових засобів спілкування з користувачем чи розробником програм, або за рахунок знешкодження помилок, виявлених у процесі користування. Так з’являються нові версії мови — більш досконалі, більш ефективні, пристосовані до нових інформаційних технологій.
7.1.3. Класифікація мов програмування та напрямки їх розвитку
Перші спроби створення мов програмування полягали в тому, щоб зробити більш наочною машинну програму. Для цього замість цифрових кодів операцій записували мнемокоди, а замість реальних адрес полів пам’яті ЕОМ писали умовні адреси. Таке програмування називали адресним. Така адресна команда наочно відображала специфіку машинної команди і для кожного типу ЕОМ створювалась своя система символічного кодування (ССК). Програма не ставала коротшою, але набувала наочності, кількість помилок при її розробці зменшувалась. Це були мови програмування першого покоління або першої генерації (Generation Language) — 1 GL.
Наступним етапом розвитку програмування стало програмування на мовах, близьких до машинних, але вони використовували оператори замість команд. Кожному оператору відповідала одна або декілька машинних команд. Ці мови мали назву автокодів, вони відображали особливості ЕОМ, які реалізували ці програми. Програма на автокоді була більш компактною, більш наочною, що полегшувало візуальний контроль. Однак для успішного програмування необхідно знати, як реалізується той чи інший оператор на відповідній ЕОМ. Це мови типу Assembler або мови другої генерації — 2 GL.
Для успішного розвитку теорії програмування, для обміну досвідом між програмістами, для можливості використання досягнень у засобах та методах програмування розробляють мови, які не залежать від можливостей та особливостей окремих ЕОМ, які можна використовувати, програмуючи для різних типів ЕОМ. Ці мови містять засоби для опису певних типів інформації, тобто відображають особливості алгоритмів окремих класів задач або проблем. Такі мови отримали спільну назву: проблемно орієнтовані або алгоритмічні. Їх відносять до мов програмування третього покоління 3GL. Використання таких мов відкрило можливості широкого обміну програмами, створення фондів алгоритмів та програм на рівні ОЦ, країни.
Програма, написана алгоритмічною мовою, є наочною, компактною, її можна реалізувати на ЕОМ будь-якого типу.
Серед таких мов можна виділити ті, що найчастіше використовувались:
— для розв’язання науково-технічних задач — ALGOL-60, FORTRAN та інші, побудовані на їх основі. Вони мають засоби для обробки числової інформації за складними алгоритмами;
— для розв’язання задач обробки спискових структур — LISP, SLIP, COMIT. Тип інформації тут не має значення, головною є специфіка організації даних у вигляді списків. Тому ці мови мають засоби побудови ланцюжків-списків та послідовної обробки його ланок; вони описують алгоритми, побудовані у межах таких алгоритмічних систем, як рекурсивні функції;
— при розв’язанні задач обробки символьної інформації перш за все використовують такі операції, як порівняння, пошук потрібного слова, вибірка тексту, перетворення тексту, контроль та коригування тексту. Тут використовуються логічні операції і найпростіші арифметичні вирази для індексації слів. Арифметичних перетворень інформації немає. Незважаючи на простоту використовуваних операцій, алгоритми розв’язання цих задач можуть бути достатньо складними і вимагають певних навичок та винахідливості в алгоритмізації. У цих випадках використовуються такі мови, як EPSILON, SNOBOL;
— найбільш зручним засобом для представлення алгоритмів моделювання є абстрактні автомати. Для опису таких алгоритмів широко застосовні такі мови, як SIMULA, SIMSCRIPT, і будь-які мови, що мають засоби об’єктно орієнтованої обробки даних;
— для опису алгоритмів задач обробки економічної інформації — COBOL, АЛГЕК, SIMULA. Ці мови програмування мають засоби для опису та представлення будь-якої складної соціально-економічної інформації;
— до машинно-незалежних мов належать також універсальні мови програмування. Вони призначені для опису алгоритмів будь-яких класів задач і містять засоби обробки інформації всіх типів та способів агрегування. Всі вони мають модульну структуру, причому всі модулі незалежні, кожний із них містить засоби обробки інформації певного типу. До таких мов належать PL/I, PASCAL, C, ADA, IPL, Smalltalk.
Попереднє покоління західних програмістів з усіх мов програмування та їх версій (а їх майже 300) для обробки економічної інформації обрало COBOL (Common Business Oriented Language). Зараз весь комп’ютерний світ шукає вирішення «проблеми 2000 року», і проводить ревізію програмного забезпечення. Це дозволило з’ясувати, що 80 % програм (240 млрд. рядків вихідного тексту) написано саме на COBOL. Найдивніше у цьому те, що вони коригувалися багато разів різними програмістами, але досі працюють (КО 31/98).
Якщо ви добре знаєтесь на якійсь мові програмування й у змозі створювати довговічні, надійні, спадкоємні, самодокументовані, керовані, параметризовані, економічні, швидкодійні, платформено незалежні програми, то така мова має право на довговічне життя.
Майже кожна мова має свою нішу. Зовсім не обов’язково кожного року переходити на нову — модну — мову програмування або на її нову версію без крайньої потреби.
Коли народилась ідея баз даних, то, природно, виникли проблеми розвитку мов, які використовуються в системах управління БД, а саме — мов трьох типів: мови опису (визначення) даних, мови маніпулювання даними та мови запитів. Хоча є мови (наприклад, SQL), які містять засоби та виконують функції всіх цих мов.
Необхідно зазначити, що мови та системи програмування, використовувані у СУБД, базуються на відомих мовах програмування. Наприклад, мова PL/I має засоби, що реалізують операції над масивами будь-якої розмірності, а також над перетинами масивів (перетин — виділення будь-якої частини масиву-рядка, стовпчика, площини...). Ці можливості цілком перенесено в табличні мови програмування. Необхідно визначити, що дані в БД можуть бути подані у вигляді таблиць і всі оператори використовують за операнди імена таблиць та умови вибору із них (перетин) рядків та стовпчиків. Вихідна інформація (результати обробки запитів) також подається у вигляді таблиць. Однак треба взяти до уваги, що тут поняття «таблиця» дещо узагальнене.
Робота із СУБД дала новий поштовх розвитку інтерактивних мов програмування — мовам користувачів, основною складовою частиною яких є засоби ведення та реалізації діалогу «людина — комп’ютер», що передбачають можливість втручання користувача у процес розробки та виконання прикладних програм, внесення до них змін і т.ін.
Другий напрямок розвитку мов програмування — це розширення можливостей мов за рахунок засобів об’єктно орієнтованого програмування, засобів мультимедіа, графіки, обробки звукових сигналів і т.ін. Тим самим початково різні за своїми можливостями мови програмування виходять на один рівень вимог користувачів.
Третій напрямок розвитку мов програмування — це перерозподіл функцій між програмними та апаратними засобами, тоді як раніше перерозподіл функцій йшов між програмістами та ЕОМ (через ПЗ). Так з’явились видавничі системи, ЕОМ-транслятори, тобто те, що раніше називали спеціалізованими ЕОМ, аналоговими ЕОМ. Отже, з’явились програмно-апаратні комплекси. Мови, що створюються та розвиваються у перелічених напрямках, відносять до четвертого та п’ятого поколінь, але межа між ними визначена недостатньо чітко, ще й досі спричиняє суперечки між спеціалістами, хоча це, взагалі кажучи, не є суттєвим.
7.1.4. Питання стандартизації мов програмування та мобільності програмних продуктів
Враховуючи, що поява, розвиток та вдосконалення інформаційних технологій, апаратних і програмних засобів тісно пов’язані між собою (шляхи їх можуть йти паралельно або перетинатись), а кількість цих засобів — сотні й тисячі виробників, на перше місце висуваються проблеми стандартизації та сумісності, мобільності програмного забезпечення (ПЗ). Навіть поняття мобільності ПЗ змінило свою сутність: якщо раніше це була просто можливість перенесення ПЗ з одного типу ЕОМ на інший, то тепер під мобільністю ПЗ розуміють його здатність до адаптації у новому середовищі використання.
Звичайно, вимоги стандартів, їх розробка для окремих елементів продуктів індустрії інформації йдуть, так би мовити, навздогін розробкам самих елементів, а потім вже нові аналогічні вироби пристосовуються до них, тобто відповідають цим вимогам.
Будь-яка мова програмування — це настільки складна система, яка може стандартизуватися по багатьох параметрах, що жодна з мов не може вважатися цілком стандартизованою. Є тільки один виняток з цієї множини — це мова програмування ADA (на ім’я першої програмістки Ади Байрон), створена та використовувана у Міністерстві оборони США та держав НАТО. Стандартизація як головна вимога до всіх прикладних додатків, оболонок, трансляторів і т.ін., закладена первісно, щорічно контрольована, на неї витрачаються мільярди доларів. Рішення щодо розробки мови (за всіма вимогами) та її використання, прийняте до неухильного виконання, дозволило розробити її кращими програмістами найвідоміших компаній. З огляду на специфіку пріоритетів вимог до мови, вона відрізняється від інших зручністю використання, швидкістю, можливістю обробки інформації, отриманої від різноманітних джерел та пристроїв, надійністю, механізмом обробки переривань, неприпустимістю зупинки системи обробки, а також нехтуванням зручностей розробників ПЗ. Використання цієї мови зняло проблему сумісності ПЗ у повністю комп’ютеризованій системі оборони, значно підвищило її надійність.
За прогнозами фахівців, мова ADA інтенсивно використовуватиметься десь до 2005 року, а потім поступиться промисловому синтезу таких самих надійних програм.
Важко прогнозувати долю мови ADA в Україні, бо поки що нею користуються окремі ентузіасти. В той самий час в інших країнах ADA використовується у різних галузях, окрім військової.