Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекція_Мови програмування_Алгоритми

.doc
Скачиваний:
14
Добавлен:
05.02.2016
Размер:
179.2 Кб
Скачать

Розв'язування задачі за допомогою комп'ютера можна подати у вигляді такої послідовності етапів:

  • Математична постановка задачі (формалізація задачі).

  • Вибір методу розв'язання задачі (побудова інформаційної моделі).

  • Створення алгоритму розв'язання задачі.

  • Написання програми, її налагодження та тестування (побудова комп'ютерної моделі).

  • Проведення комп'ютерного експерименту.

1. Математична постановка задачі та її формалізація полягають у визначенні й уточненні умов і мети задачі. На цьому етапі вирішуються такі питання:

  • окреслюються предмет задачі, умови, яким він задовольняє, бажаний результат розв'язання задачі;

  • уточнюється мета розв'язання задачі; визначається, які дані потрібні для її вирішення, а які є несуттєвими; встановлюється, які саме результати та у якому вигляді мають бути здобутими;

  • з'ясовується, чи є обмеження на вхідні дані задачі; при яких умовах можна отримати результат, а при яких — ні; які результати вважатимуться правильними.

2. Вибір чи розробка методу розв'язання тісно пов'язані з етапом формалізації, оскільки мета полягає у зведенні задачі до деякої математичної моделі, для якої відомий метод розв'язання.

3. Розробка алгоритму.

Алгоритмце опис послідовності дій, які потрібно виконати для досягнення поставленої мети або здобуття заданого результату.

Докладніше алгоритми будуть описані нижче.

4. Написання програми, її налагодження та тестування. Мета цього етапу — запис алгоритму обраною мовою програмування за допомогою комп'ютера. На цьому етапі вирішуються такі питання:

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

  • реалізація алгоритму засобами вибраного програмного середовища, тобто переведення алгоритму у таку форму, яка робить його придатним для виконання комп'ютером;

  • тестування та налагодження програми, тобто перевірка правильності роботи програми за допомогою тестів (спеціально підібраних вхідних даних, для яких результат виконання програми є відомим) і вилучення виявлених помилок. Звичайно на налагодження програміст витрачає від 20 до 40 % часу, що відводиться на розробку програми.

5. Проведення комп'ютерного експерименту.

Цей етап складається з таких дій:

  • розробка плану проведення експерименту;

  • випробовування комп'ютерної моделі;

  • аналіз отриманих результатів.

Моделі можна класифікувати за різними ознаками.

За застосування розрізняють:

  • навчальні моделі (засоби наочності, навчаючі програми, тренажери);

  • дослідні моделі (зменшені чи збільшені копії об'єкта проектування);

  • науково-технічні моделі (пристрої, що створюються для дослідження явищ і процесів, 8212 наприклад, системи );

  • імітаційні моделі (такі моделі застосовуються для вивчення та оцінювання можливих наслідків певних дій; наприклад, перед тим, як ввести у дію новий лікарняний препарат, здійснюють імітаційний експеримент — випробують препарат на мишах).

За галуззю знань, де застосовується модель, виділяють біологічні, фізичні, соціологічні та інші моделі.

За фактором часу розрізняють статичні і динамічні моделі. Статична модель відбиває стан об'єкта у певний фіксований момент часу. Динамічна модель відтворює зміни об'єкта, які відбуваються з часом, або особливості функціонування об'єкта, тому динамічні моделі називають також функціональними.

За способом подання моделі поділяються на дві великі групи: матеріальні та інформаційні.

Матеріальні моделі можна назвати також предметними, натурними, фізичними. Вони завжди мають реальне втілення. Прикладами матеріальних моделей є дитяча іграшка, чучело птаха, макет ракети.

Інформаційні моделі є сукупністю інформації, що характеризує властивості та стан об'єкта і його взаємозв'язки з зовнішнім світом. Такі моделі називають також уявними (тому що вони не мають матеріального втілення), іноді — логічними. Прикладами інформаційних моделей є усний або письмовий опис, математичні формули, які відбивають взаємозалежності параметрів об'єкта.

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

  • інтуїтивні моделі, які є уявленнями про об'єкт, отриманими в результаті роздумів;

  • образні моделі, які виражають властивості оригіналу засобами усної мови або образотворчими засобами;

  • образно-знакові моделі, які використовують знакові образи — схеми, графіки, плани, креслення і т.ін.;

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

За інструментами реалізації інформаційні моделі поділяються на комп'ютерні і некомп'ютерні моделі.

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

Алгоритмце опис послідовності дій, які потрібно виконати для досягнення поставленої мети або здобуття заданого результату.

Назва "алгоритм" походить від імені видатного вченого Мухамеда аль-Хорезмі (Мухамеда з Хорезму), якому належить значний внесок у розвиток математики. 825 року він написав "Книгу про індійську арифметику", де було вперше систематично викладено арифметику, засновану на десятковій системі числення із застосуванням нуля, тобто ту арифметику, яка сьогодні є звичайною та природною. Арифметика виникла в Індії і тому раніше називалася індійською. В перекладі на латинську «Книги про індійську арифметику» ім'я її автора було написано як «Алгоритми». «Так казав Алгоритми» — починали європейські вчені, посилаючись на викладені в книзі правила виконання арифметичних дій. Ці правила і отримали назву алгоритмів. Тільки у столітті, у зв'язку зі становленням та розвитком теорії алгоритмів, поняття алгоритму стало застосовуватися в більш широкому значенні.

Існують задачі, для розв'язання яких немає алгоритмів. Тоді для кожного конкретного випадку необхідно шукати свій метод розв'язання, який може бути використаний тільки для конкретної задачі і буде не придатним для інших задач. Наприклад, немає алгоритму, що дозволяє для будь-якого n = 1,2,3... визначити, чи має рівняння          xn + yn = zn цілочисельні розв'язки, у той час, як для n = 2 такий розв'язок відомий (наприклад, x = 3k, y = 4k, z = 5k, де k —довільне число). Для n = 3 доведено, що рівняння не має цілочисельних розв'язків.

Кожна дія алгоритму задається окремою вказівкою (або командою). Їх кількість у запису алгоритму не визначає кількості кроків, які треба зробити для розв'язування задачі за цим алгоритмом. Іноді доводиться робити кроків більше, іноді — менше, ніж команд в опису алгоритму, тому що залежно від поставлених умов деякі команди потрібно виконувати повторно, а деякі — не виконувати зовсім.

Будь-який алгоритм складається у відповідності з тим, який саме виконавець здатний зрозуміти та виконати кожну з команд алгоритму. Кожний виконавець має свій перелік команд, які він розуміє і може виконати. Цей перелік називається системою команд виконавця.

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

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

Алгоритми застосовуються до розв'язання найрізноманітніших задач — обчислювальних і побутових, логічних і дослідницьких, навчальних та ігрових тощо. Але незважаючи на все різноманіття світу алгоритмів, в них можна знайти багато спільного. Спільні риси алгоритмів називають їх властивостями.

Будь-який алгоритм подає процес розв'язування задачі як послідовність відокремлених простих дій. Дії виконуються почергово, одна за одною, в усталеному порядку. Тільки після виконання однієї дії можна перейти до наступної. Ця властивість алгоритму називається дискретністю (від лат. «discretus» — розділений, переривчастий).

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

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

Алгоритм разом із заданою сукупністю вхідних даних повністтю визначає дії виконавця та їх послідовність під час розв'язання задачі. Кожна команда алгоритму однозначно встановлює, що необхідно робити на даному кроці та до якої команди перейти на наступному. Будь-які розбіжності в тлумаченні дій, приписуваних командою, виключаються. Не може виникнути й потреби у будь-якій додатковій інформації зовні або у прийнятті рішень самим виконавцем. Цю властивість алгоритму називають визначеністю, або детермінованістю (від лат. «determinare» — визначати).

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

З урахуванням перелічених властивостей можна запропонувати уточнене визначення поняття алгоритму:

Алгоритмце зрозумілий і точний припис виконавцеві про здійснення скінченної послідовності певних дій для розв'язання задачі певного типу або для досягнення поставленої мети.

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

У повсякденному житті найчастіше застосовується словесний спосіб. У такий спосіб алгоритм подається як послідовність окремих занумерованих пунктів, кожний з яких містить команду на виконання певної дії. Команди записуються словами. Пункти виконуються один за одним у порядку зростання їх номерів, якщо немає спеціальної вказівки на перехід до виконання іншого пункту, номер якого задається.

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

Поширеним способом наочного подання алгоритму є також блок-схема.

Блок-схема складається з геометричних фігур, які з'єднані напрямленими лініями. Вміст дій описується всередині геометричних фігур. Порядок виконання дій задається лініями.

Для подання основних структур алгоритму застосовуються геометричні фігури двох видів: прямокутники та ромби. У прямокутниках записують дії, які мають виконуватися, в ромбах — умови, які необхідно перевіряти. Перевірка умов потрібна для вибору тих чи інших подальших дій. Якщо прямокутник має один вхід і один вихід, то у ромба вхід один, а виходів — два. Коли перевіряється умова, записана в ромбі, то існує два можливі варіанти: умова або виконується, або ні. На ці випадки («так» і «ні») і є два виходи з ромба, які спрямовують подальші дії виконавця алгоритму залежно від результату перевірки умови.

Для того, щоб алгоритми, подані блок-схемами, було зручно читати та виконувати, введено допоміжні елементи: прямокутники з округленими вершинами, які застосовуються для позначення початку або кінця алгоритму, та паралелограми — для введення або виведення даних.

Види алгоритмів розрізняють звичайно не за складністю виконуваних дій, не за їхньою кількістю, а за складністю організації алгоритмічного процесу

Алгоритми найпростішого виду — лінійні. Це такі алгоритми, в яких дії виконуються послідовно, одна за одною. Кожна дія лінійного алгоритму обов'язково виконується, і виконується тільки один раз:

Наведена базова алгоритмічна конструкція називається слідуванням. Ця конструкція є замкненою в тому значенні, що у неї є один вхід і один вихід, і інші можливості ввійти всередину конструкцій чи вийти з неї виключені.

Складнішими за організацією є алгоритми, в яких треба не просто виконувати всі підряд задані дії, а приймати рішення, які саме дії виконувати.

Алгоритм, який приписує здійснення тієї чи іншої дії в залежності від виконання заданої умови, називається алгоритмом з розгалуженням. Розрізняють повну і коротку форму розгалуження. В короткій формі при невиконанні умови ніякі дії не передбачаються. Повну форму розгалуження можна прочитати так:

«якщо умова виконується, то виконати дію 1, інакше виконати дію 2»,

а коротку — так:

«якщо умова виконується, то виконати дію»

Наведена базова алгоритмічна конструкція називається розгалуженням.

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

Розрізняють два основні типи циклів: цикли, де умова перевіряється до виконання тіла циклу (цикли з передумовою), і цикли, де перевірка умови здійснюється після виконання тіла циклу (цикли з післяумовою):

Наведена базова алгоритмічна конструкція називається повторенням.

Тіло циклу з післяумовою, на відміну від циклу з передумовою, обов'язково виконується хоча б один раз — до першої перевірки умови.

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

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

Структурний підхід грунтується на трьох основних принципах:

  • проектування алгоритму методом «зверху вниз»;

  • організація алгоритму у вигляді відносно незалежних частин — модулів;

  • конструювання алгоритму з уніфікованих базових алгоритмічних структур (слідування, розгалуження, повторення).

Структурне програмуванняце метод складання програм на засадах структурного підходу до побудови алгоритмів.

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

Проектування алгоритму має ієрархічну структуру і розпочинається з вершини ієрархії. Спочатку аналізують мету задачі і визначають основні етапи її розв'язку, тобто встановлюють загальну структуру алгоритму. Далі кожний етап, який у свою чергу також є задачею, піддають подібному аналізу: виявляють його основні функції і структуру і т.д. Таким чином, крок за кроком задача розбивається на все більш дрібні підзадачі, її структура уточнюється, деталізується, доки одержані врешті-решт підзадачі не виявляться настільки простими, що подальше уточнення виявляється непотрібним.

Таку структуру алгоритму називають також модульною, тому що кожна його підзадача становить собою модуль.

Модульце логічна частина алгоритму, яка є відносно незалежною, має певне цільове призначення і вирішує тільки одну чітко сформульовану задачу.

Після завершення проектування структури алгоритму розпочинається процес створення алгоритмів для кожного модуля. Спочатку алгоритм розробляється для головного модуля, при цьому вважається, що алгоритми для модулів нижчого рівня вже існують і працюють у відповідності до своїх специфікацій. Потім створюються алгоритми для модулів наступного рівня, і так до самого низу.

Навчальна алгоритмічна мова — це мова, спеціально створена для запису алгоритмів

Алгоритмічна мова визначає способи запису тексту алгоритму на папері (синтаксис мови), а також правила інтерпретації записаного тексту виконавцем (семантика мови).

Алгоритмічна мова має алфавіт — це набір символів, які дозволяється використовувати під час написання тексту алгоритму.

До алфавіту НАМ входять: великі та малі літери латинської мови; великі та малі літери української мови; цифри від 0 до 9; символ пропуску " " (пропуск виконує функції розподільника в мові; якщо між двома символами стоїть пропуск, то вважається, що ці символи належать різним словам; кількість промпусків не має значення, тобто замість одного пропуску можна поставити їх скільки завгодно); спеціальні символи, які використовуються у записі конструкцій мови:

+  -  *  /  =  < >  .  ,  ( )  ;  _  :

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

Об'єкти алгоритмічної мови позначаються іменами.

Ім'я в НАМ — це послідовність літер та цифр, яка починається з літери.

Алгоритм на НАМ завжди оформлюється стандартним чином і має такий вигляд:

алг <ім'я алгоритму> (<список змінних величин>)       <список аргументів та результатів> поч       <група команд> кін <ім'я програми> — це ім'я, створене за правилами алгоритмічної мови. <Група команд> містить скінченну послідовність команд (вказівок) алгоритму.

Команди виконуються одна за одною, у порядку їх запису. Група може складатися з однієї команди або бути порожньою (не містити жодної команди). Команди можна записувати як по одній в рядку, так і по декілька в рядок. В останньому випадку команди відокремлюються одна від одної крапкою з комою ";". Якщо команда не вміщується на одному рядку, її можна продовжити на наступному.

<Список змінних величин> і <список аргументів та результатів> призначаються для опису тих величин, які опрацьовуються чи використовуються алгоритмом. У простих алгоритмах їх може не бути зовсім (докладніше див. далі).

Величина в НАМ — це об'єкт, який має стале або змінне значення.

Константа в НАМ — це величина зі сталим значенням. Константи записуються в тексті безпосередньо, наприклад, 1.23, "Константний рядок".

Змінна величина (або просто змінна) в НАМ — це іменована величина, яка може набувати і зберігати різні значення у процесі виконання алгоритму.

Кількість змінних у алгоритмі не обмежується.

Ім'я змінної створюється за правилами алгоритмічної мови.

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

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

Змінних у алгоритмі може бути необмежена кількість.

У алгоритмічній мові змінна може належати до одного з п'яти типів:

числові типи даних:

нат — натуральний; всі можливі натуральні числа;

ціл — цілий; всі можливі цілі числа;

дійс — дійсний; всі можливі дійсні числа — десяткові дроби;

літ — літерний; будь-які символи, групи символів, рядки, які беруться в лапки;

таб — табличний (докладно див. далі).

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

У секції змінних перелічуються змінні, які використовуються у програмі, змінним передують назви типів. Імена змінних відокремлюються одне від одного та від наступного імені типу комами.

В алгоритмічній мові кожна змінна має належати або до аргументів, або до результатів, або до проміжних величин алгоритму.

Аргументи в НАМ — це вхідні дані для алгоритму, значення яких мають бути відомі до виконання першої команди алгоритму.

Результати в НАМ — це величини, які отримують значення у процесі виконання алгоритму. Звичайно для обчислення значень результатів і створюється алгоритм.

Після заголовка алгоритму йдуть два рядки, в яких визначається кожна змінна. Перший рядок починається словом арг, за яким йде список змінних, відокремлених одна від одної комами — це є аргументи алгоритму. Другий рядок записується аналогічно та починається зі слова рез — це є результати алгоритму.

Проміжні величини використовуються для тимчасового запам'ятовування значень, які не є остаточними і будуть використані для подальших обчислень в межах самого алгоритму.

Змінні, які належать до проміжних величин, мають бути описаними після слова поч перед першою командою алгоритму.

Тип даних однозначно визначає перелік операцій і функцій, які є припустимими над величинами даного типу.

Операція в алгоритмічній мові визначається подібно до операції в математиці.

Вирази, над якими виконується операція, називаються операндами. Якщо операція виконується над двома величинами, вона називається бінарною, якщо над однією — унарною.

В алгоритмічній мові визначено арифметичні операції, операції відношення, логічні операції, операції вирізки та конкатенації над літерними величинами.

За допомогою арифметичних операцій створюються арифметичні вирази.

Арифметичний вираз у НАМ — це сукупність величин числових типів даних, поєднаних за допомогою арифметичних операцій та круглих дужок.

Арифметичні операції:

Позначення операції

Назва операції

+

Додавання

-

Віднімання

·

Множення

/

Ділення

^

Степінь числа (X^Y=XY)

Операції "+", "-", "· ", "/", "^" застосовуються до величин будь-яких числових типів.

За допомогою операцій відношення створюються прості умови.

Проста умова в алгоритмічній мові — це дві величини, поєднані за допомогою операції відношення.

Не дозволяється порівнювати одне з одним дані числового та літерного типів.

Операції відношення:

Позначення операції

Назва операції

=

дорівнює

<

менше

<=

менше або дорівнює

>

більше

>=

більше або дорівнює

<>

не дорівнює

Для даних літерного типу використовуються тільки операції "=" та "<>".

Результатом виконання операції відношення є відповідь «так» (чи «істина», говорять, що умова виконується) або «ні» (чи «неправда», умова не виконується).

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

За допомогою логічних операцій створюються складені умови.

Складена умова в алгоритмічній мові (те ж саме що логічний вираз) — це сукупність простих умов, поєднаних за допомогою логічних операцій та круглих дужок.

Логічні операції:

1. Заперечення "не".

Результатом застосування унарної операції "не" до умови є обернення значення умови, тобто, якщо <умова> виконується, то <не умова> не виконується, і навпаки.

2. Логічне "і".

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