- •Основи організації програм Структура алгоритмічних мов програмування
- •Базові поняття мови програмування
- •Структура програми
- •Основи введення-виведення інформації
- •Керування порядком обчислень Оператори
- •Оператори реалізації послідовного процесу
- •Оператори розгалуження
- •Оператори циклу.
- •Правила оформлення програм
Керування порядком обчислень Оператори
Послідовність виконуваних в процесі роботи програми дій називають обчислювальним процесом. При реалізації будь-якого обчислювального процесу можна умовно виділити три типи управління черговістю виконуваних дій:
слідування, при якому дії виконуються відповідно до порядку їх слідування в тексті програми (такий процес називають послідовним або лінійним);
розгалуження, при якому послідовність дій визначається деякою умовою (такий процес називають розгалуженим);
повторення, яке передбачає повторення певну кількість раз однієї і тієї ж дії або групи дій (такий процес називають циклічним).
Кожен із типів управління черговістю дій відповідає певній базовій алгоритмічній структурі, яка має своє синтаксичне представлення у програмі у вигляді так званого оператора.
Оператор - це синтаксична конструкція, яка задає певну базову алгоритмічну конструкцію. Кожен оператор представляє собою закінчену фразу мови і визначає деякий закінчений етап обробки даних. Оператор є одним із найбільш змістовних понять мови програмування.
В записі алгоритму можуть використовуватися послідовності із цих операторів без обмежень на їх кількість. Оператори, зазвичай, виконуються послідовно у тому порядку, в якому вони вказані в тексті програми. Відділяються оператори один від одного певним роздільником. У багатьох алгоритмічних мовах програмування, зокрема, С/С++, ним є символ ";".
У мовах програмування використовується декілька типів операторів, кожен із яких має певне призначення. З точки зору способу побудови, усі оператори можна розбити на дві групи:
основні оператори, які не містять інших операторів;
похідні оператори - в склад яких входять інші оператори.
З точки зору способу керування порядком обчислень, оператори поділяються на :
оператори реалізації послідовного процесу;
оператори розгалуження;
циклічні оператори.
Оператори реалізації послідовного процесу
Оператор присвоєння. Загалом, вирішення будь-якої задачі представляє собою процес отримання по певним правилам із вхідних даних деяких нових даних. Правила отримання нових даних задаються за допомогою виразів.
Один із типів операторів - оператор присвоювання – як раз і служить для задання правил обчислення нового значення за допомогою виразу, що міститься в цьому операторі, із запам’ятовуванням результата в якості значення деякої змінної.
Операція присвоювання в різних мовах програмування має різне позначення. Так, у мовах Pascal і ALGOL дана операція позначається символами ": ="; у мовах С, C++, C#, Java - символом "=". Формат оператора присвоювання у мовах С/ C++, C#, Java:
змінна = вираз.
Даний оператор вказує обчислити заданий праворуч вираз і присвоїти отриманий результат зазначеній ліворуч змінній. Наприклад,
a = 9;
b = 3*a;
Мова С/С++ дозволяє в одному операторі вказувати кілька операцій присвоєння. Наприклад,
a = b = 2; //a = (b = 2); (1)
Оператор присвоювання (1) задає в програмі ті ж самі дії, що й послідовність
b = 2; a = b.
Довжину ланцюгів присвоювань не обмежено.
У випадку довгих виразів рекомендується розчленовувати їх на більш прості, особливо, якщо отримані підвирази повторюються в основному виразі. Обчислення підвиразів в окремих операторах до того ж спрощує перевірку роботи програми.
У мовах програмування можуть також використовуватися деякі різновиди оператора присвоювання, зокрема,
оператори скороченого присвоювання;
унарні оператори присвоювання;
умовне присвоювання.
Так у мовах С++, C#, Java оператори присвоювання, наприклад, a=a+b, можна задавати у скороченій формі за допомогою так званих операторів скороченого присвоювання, наприклад, a+=b. В якості b можна записати будь-який вираз відповідного типу.
В описаний спосіб до змінної можна застосувати будь-яку з арифметичних операцій, а також деякі інші (табл. 8).
Таблиця 8. Оператори скороченого присвоювання
Операція |
Призначення |
Приклад |
Примітка |
+= |
присвоєння суми чисел |
a+=b |
a=a+b. Короткі числа перетворюються у довгі із збереженням значення, довгі у короткі – із втратою старших бітів. Дійсні числа перетворюються в цілі з відкиданням дробової частини. |
%= |
присвоєння остачі ділення |
a%=b |
a=a%b. Остача визначається тільки при діленні цілих чисел. |
-= |
присвоєння різниці чисел |
a-a-=b |
a= a-b |
*= |
присвоєння добутку чисел |
a*=b |
a=a*b |
/= |
присвоєння частки від ділення |
a/=b |
a=a/b |
>>= |
присвоєння із зсувом вправо |
a>>=b |
|
<<= |
присвоєння із зсувом вліво |
a<<=b |
|
&= |
присвоєння бітової кон’юнкції |
a&=b |
|
|= |
присвоєння бітової диз'юнкції |
a|=b |
|
Наприклад, замість number=number%10 можна написати number%=10, а замість degree= degree-pow(2,n) — degree -=pow(2,n).
Оператори присвоювання вигляду x=x+1 та x=x-1 можна задати в скороченій формі за допомогою унарних операторів інкременту (збільшення) "++" та декременту (зменшення) "- -". Ці оператори мають префіксну (++x, --x) та постфіксну (x++, x--) форми. Вираз із постфіксним оператором x++ або x-- змінює значення змінної x на 1, але значенням самого виразу є значення x перед зміною.
Вираз із префіксним оператором ++x або --x теж змінює x на 1, але значенням виразу є значення x, отримане після зміни. Ці відмінності виявляються, коли оператори ++ та -- застосовуються всередині виразів. Наприклад, оператор y=x++ рівносильний операторам y=x; x=x+1; а оператор y=++x; — операторам x=x+1; y=x. Якщо змінна x мала значення 1, то після y=x++ значенням y буде 1, а після y=++x-2. В обох ситуаціях значенням x стане 2. Оператори інкременту та декременту можуть використовуватись тільки із змінними; вирази на кшталт (i+j)++ заборонені.
Операції ++ та -- виконуються швидше ніж відповідні присвоювання вигляду x=x+1 та x=x-1, тому рекомендується використовувати саме їх. Операції ++ та - - застосовні до змінних будь - якого з базових типів, хоча найчастіше їх використовують з цілими змінними. Скрізь, де немає необхідності використовувати старе значення змінної, рекомендується з виразів вигляду n++ та ++n вибирати ++n, оскільки він виконується швидше й простіше.
Спосіб і порядок обчислення виразу залежить від компілятора, тому краще записувати операції збільшення або зменшення в окремих виразах або інструкціях, а не в складі інших виразів. Наприклад, значення виразів (n++)*(n++) та (++n)*(++n) у різних системах програмування навіть можуть відрізнятися. Гарантовано лише те, що до значення змінної n двічі додається 1.
Операторний блок (складений оператор). Для однозначного розуміння програми часто потрібно, щоб в тому чи іншому місці синтаксичної конструкції фігурував один оператор, тоді як семантика (логіка) програми вимагає задання у цьому місці декількох операторів.
Для вирішення виникаючого у такому випадку конфлікту між синтаксисом мови і реальною потребою програми служить складений оператор (блок операторів), який поєднує послідовність операторів у єдине ціле, інтерпретуючи їх як один оператор.
Синтаксично складений оператор складається з послідовності операторів, обмежених ключовими словами begin end (мова Pascal) або операторними дужками { } (мови С/C++, Java, Perl). Його формат для С/С++:
{ оператор_1;
...
оператор_n;
};
Виконання складеного оператора зводиться до послідовного - у порядку їхнього написання - виконання вкладених у нього операторів. Наприклад,
{ f := x * y;
cout<<” f =” << f << endl;
};