Як складати програми?
Дуже просто! Насправді, процес написання програми полягає в запису (кодування) деякого алгоритму з використанням тих чи інших засобів. наданих вам мовою програмування. Тому, для успішного складання програм, потрібно добре знати дві речі: по-перше (і перш за все) - алгоритм, і по-друге - набір засобів (механізмів), за допомогою яких цей алгоритм можна реалізувати на мові програмування.
Отже, перш за все - алгоритм! Що таке алгоритм? - це кінцева послідовність дій (приписів), виконання яких дозволяє досягти заданої мети.
Алгоритм завжди складається для конкретного виконавця. Так, наприклад, кулінарний рецепт приготування якоїсь страви, або інструкція по користуванню праскою - це алгоритми, орієнтовані на людину. Інструкції типу:- Задати А з клавіатури;
- Нехай В дорівнює 10;
- Скласти А і В; результат записати в С;
- Якщо С більше 100 то йти до п.8 інакше до наступного п.
- ...
- ...
- ...
- стоп
- типовий приклад алгоритму, виконавцем якого може бути комп'ютер.
Алгоритми, складені для людини (алгоритми побутової сфери), завжди передбачають певний рівень початкової підготовки виконавця. Наприклад, при описі малюнка в'язки не потрібно пояснювати як тримати спиці, як провязивать петлю або що таке лицьова і виворітного - передбачається, що ці знання вже є у людини.
Системи команд сучасних процесорів налічують сотні подібних операцій. Однак, серед них, Ви ніколи не знайдете такі команди, як, скажімо, "ввести значення з клавіатури", "вивести символ на екран" або, наприклад, "обчислити визначений інтеграл", "відтворити звуковий файл" і т.п. Всі ці дії повинні бути зведені (скорочені) до набору більш простих (елементарних) команд, які доступні процесору.
Незважаючи на вкрай низький інтелектуальний рівень, комп'ютер, проте, володіє величезною електронною пам'яттю, яка дозволяє зберігати інформацію у вигляді послідовності бітів (двійкових цифр). Крім цього, він здатний феноменально швидко оперувати послідовностями електричних сигналів, що представляють деякі цифри. У поєднанні з хорошими програмами, написаними розумними і талановитими людьми, можливості комп'ютерної техніки виявляються воістину безмежні.
На зорі розвитку обчислювальної техніки програми створювалися безпосередньо в вигляді послідовності команд процесора, тобто на машинній мові. Це була дуже трудомістка робота, що вимагає, до того ж, від програміста хороших знань архітектури комп'ютера. Незабаром, виникла ідея створити систему умовних позначень для запису алгоритмів у формі, зрозумілій для людини (тобто алгоритмічний мову програмування) і програму-транслятор, що переводить цей алгоритм на машинну мову. Використання алгоритмічних мов істотно підвищує "початковий рівень знань" комп'ютера. Тепер доступні такі операції як:- розміщення числа або іншого даного в деякій змінній (фактично, в комірці пам'яті);
- будь-які арифметичні операції, а також безліч інших математичних дій, наприклад, зведення в ступінь, витяг квадратного кореня, обчислення значень тригонометричних функцій і т.д .;
- операції порівняння;
- передача управління заданому оператору;
- висновок на екран символів і введення даних з клавіатури;
- формування зображень на екрані монітора;
- і т.п.
При цьому з'являється можливість працювати не тільки з числової, але і з символьної інформацією в явному вигляді.
Зверніть увагу, що такі операції як, наприклад, "знайти корінь нелінійного рівняння", "знайти мінімум і максимум функції", "впорядкувати масив чисел по зростанню" і т.п. не присутні в розглянутому вище списку. Вони повинні бути зведені до більш простим арифметичним і логічним операціям.
Таким чином, набір елементарних дій, які можна реалізувати за допомогою алгоритмічної мови програмування і становить той "початковий рівень знань", на який можна спиратися і враховувати при складанні алгоритмів.
Як складати алгоритми?
На жаль, відповісти на це питання однозначно і скільки-небудь повно, взагалі, навряд чи можливо! Це все одно, що намагатися відповісти на питання: як писати картини або, скажімо, як складати вірші? Вся справа в тому, що процес створення алгоритму та, в кінцевому підсумку, програми - процес творчий. Проте, художник або поет, крім таланту, повинен володіти деякою загальною технікою письма картин або твори віршів. Це також відноситься і до складання алгоритмів.
Далі ми розглянемо кілька прикладів, які дозволять виявити загальні принципи, згідно з якими, будуються алгоритми для комп'ютерів.
Приклад 1. Скласти алгоритм пошуку максимального числа серед заданій послідовності N чисел.
- "А що тут вигадувати - подивився і вибрав!" - Можете вигукнути Ви. Так, ми дійсно можемо подивитися і вибрати, але комп'ютер цього зробити не може. А що може? Може складати, віднімати, ділити, множити, порівнювати числа ...
Позначимо задані числа як а1. А2. ..., а n. Введемо додаткові змінні: max - для максимального числа і i - порядковий номер елемента.
Наведемо словесно можливу послідовність дій:- Ввести числа: n, а1. А2. ..., а n;
- Змінної max привласнити значення a1;
- Змінної i привласнити значення 2;
- Якщо ai> max, тоді змінної max привласнити значення ai;
- Збільшити значення змінної i на одиницю;
- Якщо i> n, тоді вивести на екран max, інакше йти до п.4;
Цей же алгоритм можна представити більш наочно - у вигляді блок-схеми.
Приклад 2. Скласти алгоритм пошуку коренів квадратного рівняння.
В основу алгоритму можна покласти відомі формули:
Залишається тільки передбачити виняткові ситуації, інакше складений алгоритм НЕ буде універсальним (не буде повністю описувати обчислювальний процес). Таких ситуацій три:- а = 0, рівняння вироджується в лінійне bx + c = 0 з коренем x = -c / b;
- a = 0 і b = 0. рівняння втрачає сенс;
- (B 2 -4ac)<0 – уравнение имеет комплексные корни, вещественные и мнимые части которых. соответственно, равны:
Нижче наведена блок-схема можливого алгоритму:
При складанні алгоритму -- можна використовувати тільки такі інструкції, які здатний виконати виконавець (комп'ютер). Отже, необхідно добре знати можливості виконавця і навчитися зводити вирішення конкретного завдання до послідовності цих інструкцій;
- необхідно передбачити (продумати) всі можливі варіанти розвитку обчислювального чи іншого процесу, включаючи дії машини в разі некоректних вихідних даних.
Повертаючись до написання програм.
Після того, як алгоритм складений (на папері або "в голові") його необхідно перекласти на алгоритмічний мову. Відомо (і навіть, доведено), що алгоритм будь-якої складності можна реалізувати за допомогою парочки операторів, наприклад, умовного оператора (IF) і оператора безумовного переходу (GOTO). Для прикладу реалізуємо алгоритм пошуку максимального числа (для стислості розділи опису та процес введення елементів масиву опущені):
Однак писати програми використовуючи тільки два оператора абсолютно не розумно і не ефективно. Тим більше, що в більшості алгоритмічних мов є і інші оператори, які дозволяють реалізувати різні алгоритми більш компактно (з точки зору тексту програми) і більш ефективно (з точки зору її виконання). До таких операторам, зокрема, відносяться оператори організації циклів і оператор множинного вибору. Перепишемо, як приклад, складену вище програму з використанням оператора параметричного циклу FOR:
Погодьтеся, що вона виглядає набагато витонченіше (і, до того ж, коротше).
При складанні програм -- не слід обмежувати себе тільки двома операторами (IF і GOTO). Більш того, слід уникати використання оператора GOTO;
- використання різних операторів, спеціально призначених для реалізації тих чи інших типових алгоритмів, дозволяє зробити програму більш компактною і краще структурованою.