Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

1. Алгоритми

1.1. Змістовне поняття алгоритму

Уявіть собі, що Вам необхідно пояснити учневі 6-го класу, як додавати дроби. Оскільки викладати математичну теорію питання не хочеться, Ви вирішуєте представити метод розв’язання задачі у виді послідовності дій над числами, які він повинен виконувати, не вникаючи в суть справи. Це і є алгоритм рішення задачі.

Термін «алгоритм» уперше був використаний середньовічними вченими, що переводили на латинь твори узбецького вченого Аль Хорезми. Алгоритмами вони називали правила арифметичних дій над багаторозрядними числами.

Такий метод викладення способу рішення задач широко розповсюджений. У виді алгоритмів викладають кулінарні рецепти, правила користування побутовими приладами, службові інструкції і т.д. В інформатиці алгоритми використовуються для опису способу рішення задач по перетворенню інформації.

Точне математичне визначення алгоритму і вивчення цього поняття - предмет спеціальної математичної дисципліни - теорії алгоритмів, що, у свою чергу, спирається на апарат математичної логіки.

Зараз ми розглянемо на змістовному (неформальному) рівні характерні основні риси цього поняття.

А лгоритм – це деяке правило перетворення інформації, застосування якого до заданої (вихідної) інформації приводить до результату – нової інформації.

Так, наприклад, застосування правила додавання дробів до 1/2 і 2/3 приводить до результату 7/6.

Особливу увагу в теорії і практиці алгоритмізації приділяють методам завдання (опису, конструювання) алгоритмів. Один з основних підходів до опису алгоритмів – так званий імперативний підхід полягає в уточненні способу опису алгоритму як послідовності кроків, на кожному з яких виконується одна з команд (інструкцій, операторів).

Алгоритм це скінчена послідовність інструкцій (команд), виконання яких приводить до результату. Кожна команда алгоритму містить точний опис деякої елементарної дії (операції), а також, у явному або неявному виді, вказівку на команду, яку необхідно виконати наступною.

Н а рис. 1.2 зображена послідовність команд C1, C2, …, Ck по перетворенню інформації, з яких складено алгоритм.

Згадаємо стародавню задачу-головоломку про вовка, козу і капусту, які на чолі з людиною вийшли до річки і мають переправитися на інший берег. У розпорядженні цієї веселої компанії є човен, що вміщує разом з людиною ще тільки одного її члена – або вовка, або козу, або капусту. Якщо вовк виявиться наодинці з козою, він її з'їсть. Якщо коза виявиться наодинці з капустою, вона її (капусту) з'їсть. Потрібно скласти такий план перевезень, при якому наша компанія перебереться на інший берег у цілості і схоронності. Цей план і є алгоритм. Опишемо його:

Алгоритм Перевезення:

  1. Перевезти козу.

  1. Повернутися.

  1. Перевезти вовка.

  2. Перевезти козу.

  3. Перевезти капусту.

  4. Повернутися.

  5. Перевезти козу.

Зверніть увагу на наступні обставини. Для того, щоб знайти цей план-алгоритм, потрібно трохи подумати (на те вона і головоломка). Потрібно також обґрунтувати правильність цього плану, інакше кого-небудь з'їдять. Нарешті, потрібно так оформити рішення, щоб його зміг зрозуміти і виконати перевізник – тобто виконавець алгоритму.

Це і є ті основні проблеми, з якими постійно має справу програміст, розробляючи програми для комп'ютерів.

Алгоритм додавання дробів можна задати наступною послідовністю команд:

Приклад 1.1 Алгоритм додавання дробів.

Алгоритм Сума;

Вихідна інформація A, B, C, D; {скласти A/B і C/D}

Результат E,F; {E/F = A/B + C/D}

1. Обчислити Y = B*D; {Перейти до наступної команди}

2. Обчислити X1 = A*D; {Перейти до наступної команди}

3. Обчислити X2 = B*C; {Перейти до наступної команди}

4. Обчислити X = X1+X2; {Перейти до наступної команди}

5. Обчислити Z = НОД(X,Y); {Перейти до наступної команди}

6. Обчислити Е = X div Z; {Перейти до наступної команди}

7. Обчислити F = Y div Z. {Закінчити роботу}.

Вихідна інформація цього алгоритму представлена чотирма цілими числами A, B, C, D. Це – чисельники і знаменники доданків. Результат роботи алгоритму – числа E і F – чисельник і знаменник суми.

Інформацію, вихідну для алгоритму, прийнято називати його входом, а результат виконання – виходом.

Знати, яку саме задачу вирішує алгоритм, необхідно тільки тому, хто хоче використовувати цей алгоритм для своїх цілей. Таким чином, перші два рядки приклада 1 містять інформацію, необхідну користувачеві алгоритму. Виконавець алгоритму нічого не знає і не повинен знати про те, яку саме задачу він вирішує. У цьому і полягає властивість формальності виконання алгоритму.

Власне алгоритм складається з 7-ми команд, кожна з яких містить команду – виконати одну з арифметичних дій над цілими числами: додавання, множення, обчислення НОД і div (обчислення неповної частки). Крім виконання арифметичної дії, кожна команда запам'ятовує результат як значення величини, зазначеної в лівій частині рівності, що входить у команду. Нарешті, кожна команда (у неявному виді) містить указівку на наступну виконувану команду – перейти до виконання команди з наступним номером.

Таким чином, алгоритм описує деталізований по кроках процес перетворення інформації. Виконавець алгоритму не тільки виконує дії, але і запам'ятовує їхні результати. Для відображення цього факту в записі алгоритму ми використовуємо літерні позначення даних. Ці позначення називають іменами, а самі дані – величинами.

Для позначення величин в алгоритмах використовуються імена.

Послідовний порядок виконання команд необхідний тільки для того, щоб результати виконання попередніх команд можна було б використовувати як вихідні дані у виконуваній команді.

У нашому прикладі команди 1, 2, 3 обчислення величин X1, Х2, Y можна виконувати або паралельно (у три руки), або змінювати порядок їхнього виконання. Від цього результат алгоритму не зміниться. Це ж можна сказати про команди 6 і 7. Відповідь на питання про те, чи представляють ці варіанти запису алгоритму той самий алгоритм, чи ні, залежить від точного визначення поняття алгоритму. Істотною є та обставина, що дві форми запису можуть представляти алгоритми, що дають той самий результат.

Відзначимо ще одну важливу властивість алгоритму – він розрахований на виконавця, який розуміє і уміє виконувати команди алгоритму.

Учень 6-го класу, швидше за все, уміє складати, множити і ділити куточком цілі числа. Однак не всі діти вміють знаходити НСД – найбільший спільний дільник двох цілих чисел. Це означає, що вони не зможуть виконати Ваш алгоритм.

Рівень деталізації опису алгоритму визначається набором допустимих команд. Цей набір називають набором команд Виконавця або Інтерпретатора.