Програмування
 
а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
 

Програмування

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

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

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

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

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

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

  Процес П. зазвичай складається з наступних етапів:

  Вміст кожного етапу П. можна пояснити на прикладі вирішення квадратного рівняння.

  Початкова формулювання. Треба знайти коріння 50 квадратних рівнянь вигляду ax 2 + bx + з = 0, коефіцієнти яких задані у вигляді трьох таблиць A i , B i і C i ( i = 1..., 50).

  Алгоритмічний опис завдання виходить в результаті повного математичного дослідження її постановки, вибору стандартних або пошуку нових алгоритмів виконання всіх потрібних обчислень, а також уточнення, які вихідні дані треба ввести в ЕОМ(електронна обчислювальна машина) і які результати треба отримати. В даному випадку алгоритмічний опис може мати такий вигляд: ввести в ЕОМ(електронна обчислювальна машина) таблиці коефіцієнтів A i , B i і C i , вирішити кожне рівняння по загальній формулі

з дослідженням дискримінанта b 2 4 ас для визначення випадку комплексного коріння; для одноманітності кожен корінь рівняння видавати як комплексне число x = u + iv , вважаючи в разі речового коріння уявну частину рівної нулю.

  Мова П. високого рівня — головний засіб складання програм для ЕОМ(електронна обчислювальна машина). Загальна особливість цих мов — їх незалежність від системи команд конкретних ЕОМ(електронна обчислювальна машина) і фразова структура, що у поєднанні з використанням т.з. службових слів наближає їх до природних мов. Фрази розділяються зазвичай крапкою з комою; соподчиненность фраз вказується за допомогою «операторних дужок» почало і кінець; фрази діляться на двох типів — операторів і описи. Оператор є одиницею дії в мові. Розрізняють наступних їх типів: оператори привласнення що роблять підрахунок по вказаній формулі і привласнюють обчислене значення заданій змінній величині; умовні оператори, які залежно від результату перевірки заданої умови виробляють вибір одній або іншій гілці обчислень; оператори циклу, що забезпечують повторне виконання групи операторів. У описах вказуються властивості змінних величин і інших позначень, використовуваних в програмі. Важливою властивістю є «процедурний» характер мови: для будь-якої вже складеної програми, вирішальної деяке приватне завдання, можна ввести символічне функціональне позначення. Текст цієї програми разом з її позначенням називається описом процедури або підпрограмою. Тоді при складанні нової програми усюди, де може потрібно використання цієї описаної процедури, досить згадати її функціональне позначення у вигляді оператора процедури замість переписування повного тексту підпрограми.

  В 70-х рр. 20 ст існує ціле сімейство таких мов П.: алгол-60, фортран для вирішення інженерних і наукових завдань, кобол для економічних розрахунків, симула для П. математичних моделей, потужніші мови алгол-68 і ПЛ/1, що охоплюють всі види вживань ЕОМ(електронна обчислювальна машина). Для всіх з них існують транслятори, що забезпечують автоматичну побудову машинних програм для завдань, виражених в цих мовах.

  Програма вирішення квадратного рівняння, записана на мові алгол-60 (адаптованому):

почало речові масиви А , В , З [1: 50];

  речові а , b , з , u 1, u 1, u 2, u 2;

  ціле i , введення ( A , В , З );

для i: = крок 1 до 50 цикл

почало а: = A [ i ]; b: = B [ i ]; з = C [ i ];

якщо, то

почало u 1: = u 2: = 0; u 1:= - b   + корінь ;

u 2:= - b - корінь ;

кінець інакше

почало u 1: = корінь ;

u 2: = — u 1; u 1:= u 2:

кінець; вивід ( u 1, u 1, u 2, u 2)

кінець

кінець

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

  Після складання програми невід'ємним етапом П. є «відладка» програми, тобто виявлення і виправлення помилок, що допускаються при П. Основноє засіб відладки, — т.з. налагоджувальні запуски, коли в програму додаються додаткові «вимірювальні» дії, що дозволяють по ходу виконання програми на ЕОМ(електронна обчислювальна машина) видавати «протокол» її роботи (порядок виконання команд, значення проміжних результатів і т.п.). Дослідження протоколу дозволяє судити про те, в якій мірі програма відповідає задуму програміста.

  Розвиток П. як науки почався з 1947 в роботах американських математиків Дж. Неймана, А. Беркса і Г. Голдстайна, які описали принципи ЕОМ(електронна обчислювальна машина), керованою програмою, що зберігається в пам'яті. Вони ж ввели у вживання блок-схеми програми. Поняття підпрограми і методики її використання було введене в 1951 англійськими вченими М. Уїлксом, Дж. Уїлером і С. Гиллом. Радянський математик А. А. Ляпунов, першим в СРСР що прочитав в МГУ(Московський державний університет імені М. Ст Ломоносова) в 1952 курс П., визначив П. як багатоетапний процес і ввів в П. апарат символічних позначень, що з'явився передвісником мов П. високого рівня. Ідея автоматизації програмування шляхом трансляції програми, записаної на мові П., була реалізована в США Дж. У. Бейкусом (мова фортран) і Г. Хоппер і в СРСР С. С. Каминіним, Е. З. Любімським, М. Р. Шура-Бурой і А. П. Ершовим (1954—56). До 1960 в США була розроблена мова кобол і міжнародна мова П. алгол-60 (групою учених з 6 країн). У 60-і рр. розвиток П. йшов по шляху вдосконалення і універсалізації мов П., що знайшли своє втілення в мовах алгол-68, ПЛ/1 і симула, розробки методів формального і строгого опису мов П., розвитку теорії і техніки побудови трансляторів, створення бібліотек стандартних підпрограм. Особливий розвиток отримали машинно-орієнтовані мови П. у напрямі об'єднання ряду меж мов високого рівня (процедурність, фразова структура) з тією, що адаптується до особливостей конкретної ЕОМ(електронна обчислювальна машина). Для деяких класів завдань зроблені успішні спроби розширити сферу застосування автоматизації П. шляхом формалізації способів алгоритмічного опису завдання або навіть її вихідного формулювання. Це привело до понять проблемно-орієнтованих мов П., неалгоритмічних мов П. і т.п.

  Літ.: Лавров С. С. Введення в програмування, М., 1973: його ж, Універсальна мова програмування. (АЛГОЛ 60), 3 видавництва, М., 1972; Жогольов Е. А., Тріфонов Н. П., Курс програмування, 3 видавництва, М., 1971; Джермейн До. Б., Програмування на 1ВМ/360, пер.(переведення) з англ.(англійський), 2 видавництва, М., 1973; Стеблі Д., Логічне програмування в системі 360, пер.(переведення) з англ.(англійський), М., 1974.

  А. П. Ершов.

Мал. до ст. Програмування.