Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 (8).doc
Скачиваний:
22
Добавлен:
12.05.2015
Размер:
571.39 Кб
Скачать

Керування порядком обчислень Оператори

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

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

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

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

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

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

В записі алгоритму можуть використовуватися послідовності із цих операторів без обмежень на їх кількість. Оператори, зазвичай, виконуються послідовно у тому порядку, в якому вони вказані в тексті програми. Відділяються оператори один від одного певним роздільником. У багатьох алгоритмічних мовах програмування, зокрема, С/С++, ним є символ ";".

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

  • основні оператори, які не містять інших операторів;

  • похідні оператори - в склад яких входять інші оператори.

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

  • оператори реалізації послідовного процесу;

  • оператори розгалуження;

  • циклічні оператори.

Оператори реалізації послідовного процесу

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

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

Операція присвоювання в різних мовах програмування має різне позначення. Так, у мовах 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;

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]