Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмізація та програмування.docx
Скачиваний:
84
Добавлен:
17.05.2015
Размер:
1.35 Mб
Скачать

Пріоритети операцій

Пріоритет, ранг або зростання операції або оператора — формальна властивість оператора/операції, що впливає на черговість його виконання у вираженні з декількома різними операторами за відсутності явної (за допомогою дужок) вказівки на порядок їх обчислення. Наприклад, операцію множення зазвичай наділяють великим пріоритетом, чим операцію складання, тому у вираженні добуток x+y*z буде отримано спочатку y і z, а потім вже сума.

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

Другий спосіб дає можливість міняти пріоритети за умовчанням, вказуючи їх в явному виді за допомогою символів парних дужок. При цьому глибина вкладеності прямо пропорційна величині пріоритету, тобто більше внутрішні дужки вказують на більший пріоритет, чим зовнішні. У попередньому прикладі з сумою і добутком порядок обчислення можна поміняти, використовуючи дужки, записавши усе вираження так: ((x+y)*z).

Математичні операції

Таблиця 1.3.1.

Знак

Математична операція

*

Множення

/

Ділення і цілочислове ділення без остачі

%

Ділення по модулю і залишок від ділення

+

Складання

-

Віднімання

Знак / завжди означає ділення. Проте якщо з обох боків від цього знаку стоять цілі величини (константи, змінні або їх комбінації), він означає цілочислове ділення. Якщо в результаті такого ділення виходить залишок, С++ його відкидає.

Знак % означає виділення залишку при цілочисловому діленні. Ця операція вимагає, щоб з обох боків від її знаку стояли цілі величини.

Приклади.

cout << 10/2 << ">> // 5 (залишку немає)

cout << 300/100 << ""; // 3 (залишку немає)

cout << 10/3 << ""; // 3 (залишок відкинутий)

cout << 300/165 << "\n>> // 1 (залишок відкинутий)

cout << 10% 3 << "\n>; // 1 (залишок)

cout << 20/4 "\n"; // 0 (залишку немає)

Привласнення

У одному рядку може стояти більше однієї операції привласнення =.

Приклад.

a=b=c=d=100;

Знак = завжди означає: "змінній ліворуч присвоїти значення, що стоїть справа ". Операція виконується справа наліво. Тому першою значення 100 отримує змінна d, потім з, b і а.

Знак присвоїти може стояти навіть усередині математичного вираження:

value=5+(r=9 - c)

Привласнення має вищий пріоритет, ніж складання і віднімання. Тому спочатку змінною r буде присвоєне значення 9-с. А потім змінна value отримає значення 5+9-с.

Складене привласнення

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

Таблиця 1.3.2.

Операція

Приклад

Еквівалент

+ =

B+ = 500;

B= B+ 500;

- =

З- = 50;

C = З - 50;

* =

D* = 1.2;

D = D*1.2;

/ =

F/ = 50;

F = F/.50;

% =

M% = 7;

M = M% 7;

Перетворення типів

Найчастіше Вам не потрібно турбуватися про автоматичне перетворення типів. Проте, якщо Ви змішуєте без знакові змінні зі змінними інших типів, можуть виникнути проблеми. Точність результату може бути втрачена. Тому необхідно зробити тимчасову зміну типів.

Формат:

(тип даних) вираження

Тип даних - це будь-який допустимий тип.

Вираження - змінна, константа або вираження.

Приклад.

v=(double) age*f;

- змінна age тимчасово перетвориться до типу з плаваючою точкою подвійної точності і множиться на змінну f.

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

Таблиця 1.3.3.

Операції

Опис

= =

Рівно

>

Більше

<

Менше

>=

Більше або рівно

<=

Менше або рівно

!=

Не рівно

Зауваження 1.

Знак = ніколи не використовується як знак порівняння! Це знак присвоїти значення.

Зауваження 2.

У C++ немає логічного типу. Тому, якщо вираження набуває не нульового значення, то воно вважається істинним, а якщо нульове - помилковим.

Операції інкремента (++) і декремента (-)

У мові C++ передбачено дві унікальні операції, які збільшують або зменшують значення змінної на 1.

Таблиця 1.3.4.

Оператор

Приклад

Опис

Еквівалентне вираження

+ +

i + +;

Постфіксна

i =i+1; чи i+=1;

+ +

+ + i;

Префіксна

i =i+1; чи i+=1;

- -

i - -;

Постфіксна

i =i - 1; чи i-=1;

- -

- - i;

Префіксна

i =i - 1; чи i-=1;

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

Приклад.

float a, b=2, c=1, d=1;

a = b + c++;

cout << "a=" << a <<"c= "<< c;

/* Дає результат a=3 c=2.

Використовується постфіксний інкремент. Спочатку станеться складання b і c, результат запишеться в а, потім з буде збільшена на 1 */

a = ++d + b;

cout << "a=" << a <<"d= "<< d;

/* Дає результат a=4 d=2.

Використовується префіксний інкремент. Спочатку d буде збільшена на 1 (і стане рівною 2), потім станеться складання d і b, результат запишеться в а */

Операція "кома"

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

Приклад 1.

main()

{

int i = 10

j = 25;

}

Приклад 2.

i = 10;

j=(i=12, i+8);

Результат виконання : j=20. Спочатку i набуває значення 10, потім використання операції "кома" приведе до того, що i отримає значення 12, а потім значення i+8, тобто 12+8=20. Результат буде присвоєний j.

Оператор ?:

(Умова) ? (вираження1) :( вираження 2)

Якщо умова істинна, то виконується вираження1, а якщо помилково, то вираження 2.

Приклад.

(а>b) ? (ans =10) :(ans=25);

чи

ans=(a>b)?(10):(25);

Якщо а>b, то змінна ans виходить значення 10, інакше - значення 0.25

Покажчик. Визначення адреси змінною

С++ дозволяє на пряму працювати з пам'яттю. З будь-якою змінною можна працювати, вказуючи її ім'я або її адресу. Адреси змінних називаються покажчиками, при описі покажчик позначається *.

Приклад.

int * k; // k - покажчик на змінну цілого типу

Можна отримати адресу, по якій змінна розташовується в пам'яті.

Операція & змінна визначає адресу змінної по її імені, а також дозволяє звернутися до пам'яті за значенням покажчика.

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

Перед використанням покажчика його необхідно описати в програмі.

Приклад.

int *c; // з покажчик на змінну типу int

float * d; // d покажчик на змінну типу float

Малюнок 1.3.1. Таблиця пріоритетів С++

  1. Основи програмування на мові Cі Автори: Н.А. Калинина, Н.И. Костюкова

  2. Введення в мови програмування Cі, C++ Автор: Ю.Л. Кетков

  3. http://do.rksi.ru/library/courses/demo/tema 1_3.dbk