Типи користувача.Крім вище описаних стандартних типів даних, можна створювати типи користувача

ОСНОВНІ ПОНЯТТЯ

1. Алфавіт і ключові слова.Мови програмування, як і розмовні, мають власний алфавіт - набір допустимих симво­лів. Алфавіт мови C++ складається з:

• великих і малих літер латинського алфавіту: "А", ..., "Z", "а", ..., "z";

• цифр 0, 1, ..., 9;

• спеціальних символів: " ' ( ) [ ] { } < > . , ; : ? ! ~ * * – = / \ | # % $ & ~ ^ @ та символу підкреслення _.

Програми складаються із синтаксичних конструкцій, які називаються командами (інші назви – оператори, вказівки, речення). Команди будуються з лексем - неподільних елемен­тів мови: слів, чисел, символів операцій.

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

Зауваження 1. Однакові за змістом малі та великі літери у мові C++ вважаються різними символами. Наприклад, імена MyName та myname позначають різні об'єкти.

Зарезервовані ідентифікатори називаються ключовими словами. Вони використовуються для написання команд. Змі­нити призначення ключового слова у програмі не можна. Основні ключові слова мови C++:

asm double mutable switch

auto else new template

bool enum operator this

break explicit private throw

case extern protected try

catch float public typedef

char for register typename

class friend return union

const goto short unsigned

continue if signed virtual

default inline sizeof void

delete int static volatile

do long struct while

3. Директиви препроцесора. Препроцесор це програма, яка опрацьовує директиви. Директиви препроцесора це команди компілятора відповідної мови програмування, які виконуються до початку компіляції програми. Директиви мо­ви C++ починаються із символу #. Розглянемо декілька типів директив.

Директива #includeозначає, що до програми необхідно приєднати програмний код із зазначеного після неї файлу.

Файли, які приєднують директивою #include,називаються файлами заголовків (header-файлами, бібліотеками, модуля­ми). У таких файлах зазвичай оголошують сталі й змінні, за­головки (сигнатури) функцій тощо.

Усі стандартні команди та функції мови C++ визначенні у файлах заголовків. Щоб приєднати модуль до програми ко­ристувача, директиву препроцесора необхідно зазначити на початку програми так:

#include<назва файлу.розширення>

або так:

#include"шлях до файлу\назва файлу.розширення"

Зазвичай усі стандартні бібліотеки розміщені у папці INCLUDE середовища C++. У такому випадку назва файлу є параметром директиви, її зазначають у кутових дужках <...>, наприклад

#include <math.h>

Якщо ж потрібний файл розміщений не у папці INCLU­DE, то назву файлу із зазначенням шляху пишуть у лапках "...". Наприклад, якщо деякий файл MyBib.h є у папці stud на диску d:, то треба писати так: #include"d:\stud\MyBib.h".

Зауваження 2. Згідно зі стандартом ISO/ANSI файли заголов­ків у директиві #includeприйнято записувати без розширення, наприклад #include<math>. Файли заголовків мови С, які вико­ристовуються у С++-програмах, починаються з літери с, на­приклад, #include<cstdio>. Ця можливість реалізована у сучас­них компіляторах мови.

Директива #defineмає подвійне значення. По-перше, вона може задати стале значення (оголошує сталу). Наприклад, як­що у програмі задано #defineN 25, то N під час виконання прог­рами матиме значення 25. По-друге, вона дає змогу описати макроси — короткі команди (переозначити команди) чи запи­сати функції, наприклад, так:

#define D(a, b, с) ((b) * (b) - 4 * (a)• (с)).

Тепер скрізь для обчислення дискримінанта замість команди

d=b*b–4*a*c можна записувати d = D(a, b,c).

Директива #undefскасовує дію директиви #define.Наприклад,

#define D(a,b,c) ((b) * (b) - 4 * (a) * (с))

#undef D

#define D(a,b,c) ((a) * (b) * (c))

Решта директив описані у § 17.

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

main(void)

{

тіло функції з командою return 0;

}

де main() – заголовок функції. Ключове слово voidозначає, що функція не залежить від параметрів, його записувати не обов'язково. Функцію з параметрами розглядатимемо нижче. У тілі функції містяться команди та виклики інших функцій. Команди одну від одної відокремлюють символом ";" (крапка з комою). Текст функції закінчується командою повернення return.Тіло функції (усі команди після заголовка) записується у фігурних дужках { }.

Розглянемо програму, у результаті виконання якої на екран буде виведено повідомлення: «Привіт! Запрошуємо до C++!»

#include<iostream.h> // Моя перша програма мовою C++

 

using namespace std;

intmain()

{

cout<< " Hello! Welcome to C++!";

return0;

}

Розглянемо елементи програми. У першому рядку є ко­ментар. Коментар — це фрагмент тексту програми, який слу­гує для пояснення призначення програми чи окремих команд і не впливає на виконання команд. Його записують так: //текст коментарю або так: /* текст коментарю */. У першому випадку ко­ментар має бути або у кінці рядка, або єдиним у рядку. Другий спосіб більш універсальний: коментар можна запису­вати будь-де, не розриваючи лексем.

Директива #include <iostream.h> під'єднує бібліотечний файл iostream.h. Саме у цьому файлі описані функції, які дають змогу виконувати операції введення-виведення даних.

Далі у програмі записана обов'язкова функція main(). Клю­чове слово int означає, що функція main() повертатиме у точку виклику результат цілого типу.

Конструкція cout << забезпечує виведення на екран моні­тора повідомлення "Привіт! Запрошуємо до C++!".

Команда return слугує для виходу з функції main(). Число­вий параметр після return є результатом (значенням) функції (у цій програмі - 0).

Зауваження 3. Функцію main() можна застосувати так:

voidmain()

{

тіло функції;

}

Така функція називається функцією main() типу void. Вона не повертає у програму жодних значень, тому команду return пи­сати не треба.

5. Загальна структура програми. Найпростіша програма мовою C++ має такий загальний вигляд:

// коментарі

#include <назва бібліотечного файла>

void main()

{

<тіло функції>;

}

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

Зазвичай складніші програми містять значну кількість функцій та додаткових елементів. Тому у загальному випадку програма мовою C++ має такий вигляд:

// коментарі

#include <назва бібліотечного файлу 1>

#include <назва бібліотечного файлу N>

<інші директиви препроцесора>

<оголошення глобальних змінних>,

<оголошення глобальних сталих>;

<оголошення та створення функцій користувача>;

<тип результату функції> main (опис формальних параметрів)

{

<оголошення локальних змінних>;

<оголошення локальних сталих>;

<команди>;

}

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

6. Сталі та змінні.Змінна чи стала - це пойменована ді­лянка оперативної пам'яті комп'ютера, де зберігається зна­чення деякої величини.

Змінні і сталі (їх прийнято називати даними) мають такі властивості: назву (ім'я), значення, тип. Назву дає програміст.

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

Якщо значення деякої величини (даного) не змінювати­меться протягом виконання усієї програми, то таке дане варто задати як сталу (константу, const).Це можна зробити так:

const <назва сталої 1> = <значення сталої 1>;

або так:

const <тип> <назва сталої 2> = <значення сталої 2>;

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

Приклад 1. Оголосимо три сталі

constvik = 20, rist = 176;

const floatg =2.78;

Для сталої g задано тип floatі значення 2,78.

Зауваження 5. У C++ є такі стандартні сталі: число π є сталою М_РІ, π/2 – М_РІ_2, π /4 – М_РІ_4, 1/π – М_1_РІ, 1/ M_1_SQRTPI тощо. Ці сталі можна безпосередньо викорис­товувати у програмі, заздалегідь підключивши модуль math.h.

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

<тип змінних 1> <список змінних1>;

<тип змінних N> <список змінних N>;

Елементи списків записують через кому. Наприклад, змінні оголошують так:

inta, c;floatb, d, z;charw;.

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

На­приклад, floatb, d = 2.5,а =4;charw = ‘t’;.

Отже, у загальному випадку змінні одного типу оголошу­ють так:

<тип змінних> <назва змінної 1> = <значення 1>, ...,

<назва змінної N> = <значення N>, <список інших змінних>;

Запитання

1. З чого складається алфавіт мови?

2. Що таке ключове слово? Які ви знаєте ключові слова?

3. Що таке препроцесор?

4. Що таке директива препроцесора? Які ви знаєте директиви?

5. Що таке файл заголовків?

6. Опишіть загальну структуру програми.

7. Що таке коментар?

8. Що таке стала?

9. Що таке змінна?

10. Як оголосити змінну?

Вправи

За зразком першої програми з тексту складіть і виконайте програми виведення на екран:

а) відомостей про себе;

б) розкладу занять у понеділок;

в) вашої адреси;

г) імітації діалогу між користувачем і системою.

 

 

ТИПИ ДАНИХ

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

Зауваження 1. Обсяг може залежати також від різновиду операційної системи комп'ютера.

Визначити, який обсяг пам'яті компілятор надає даному того чи іншого типу, можна за допомогою команди sizeof(<Haзва типу>). Наприклад, команда cout <<sizeof(short int) виведе на екран монітора цифру 2. Це означає, що дане типу short intзаймає у пам'яті комп'ютера 2 байти.

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

Числові дані поділяють на цілочисельні (цілі) та дійсні.

2. Цілі типи.Цілі типи описані в табл. 1.


Таблиця 1. Дані цілочисельних типів

Назва типу Обсяг, байтів Діапазон допустимих значень
int 2 або 4 -32768 ... 32767 або -2147483648 ... 2147483647
short int -32768 ... 32767
unsigned short int 2 або 4 0 ... 65535 або 0 ... 4294967295
long int -2147483648 ... 2147483647
unsigned long int 0 ... 4294967295

Приклад 1. Оголосимо три змінні цілого типу:

int х, у; short int z;

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

Надати значення цим змінним можна на етапі виконанні програми за допомогою команд присвоєння, наприклад, так:

x = 157; у = -68; z = 15;.

У ділянку пам'яті, надану для змінної х буде занесено число 157, для у – -68, а для z – 15.

Під час виконання програми значення змінних можна змінювати. Наприклад, команда присвоєння х = 2003 занесе у відповідну для змінної х ділянку пам'яті число 2003 (попереднє значення 157 вилучається автоматично).

Приклад 2. Сталі цілого типу можна оголосити так:

const int a = 145:

const long int b = 365978.

Значення даних а та b у програмі змінювати не можна.

3.Дійсні типи.Дійсні типи описані в табл. 2.

Таблиця 2. Дійсні типи

Назва типу Обсяг, байтів Діапазон значень
float +3.41&38 ...±3,41038 ; 0
double ±1,7-1 а308 ...±1,710308; 0
long double ±1,1810-4932 ...+1Д8101932 ; 0

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

Приклад 3. Розглянемо фрагмент програми

float h, pi = 3.1415926; double v = 365.976;

const float w = -12, h = 23.4;

Тут оголошено дві змінні (h, pi) типу floatі змінну v типу double,а також сталі w = -12; h = 23.4 типу float.

Дійсні числа можна записувати у форматі з фіксованою крапкою, наприклад -2.3, 5.0041, або у науковому форматі (у форматі з рухомою крапкою), наприклад, -0.2е+2 (це є число -:і0), 3.27е-3 (це є 0,00327).

Запис пе ± т означає множення числа п на 10 у степені і т, тобто за означенням пе ± т = п ∙ 10± т

Знак "+" можна не зазначати, знак "–" писати обов'язково.

4. Символьний тип (char).Символьний тип – це множині, символів кодової таблиці комп'ютера ASCII. Символьна стала –це один символ, узятий у лапки на зразок апострофа, або число у 8-, 10- чи 16-й системі числення, яке є кодом символу у таблиці ASCII.

Приклад 4. Розглянемо описи символьних змінних, де змінним ml, m2, m3 і m4 надамо значення латинської літери А чотирма способами:

charm1 = 'A';m2 = 0101, m3 = 65, m4 = 0x41.

Число 65 – це десятковий код символу 'А', 101 – вісімковий, 41 – шістнадцятковий. На початку останніх двох кодів (101, 41) записують префікси "0" чи "0х" відповідно.

Приклад 5. Розглянемо спосіб визначення десяткового ASCII-коду деякого символу, наприклад 'А':

charc= 'А';intn = с;.

Змінна п набуде значення 65.

5. Логічний тип (bool).Логічний тип характеризується двома значеннями даних: false (хибність) і true (істина). Наприклад, boolb = true. Змінні цього типу займають 1 байт у пам'яті ком­п'ютера. У C++ значення змінних типу intможна асоціювати з логічними значеннями: нулю відповідає значення false, усім ін­шим числам – true.

Зауважимо, що не всі компілятори підтримують тип да­них bool.Тому, перед тим як його використовувати, варто з'я­сувати можливості компілятора.

6. Тип void.Тип voidзастосовують до функцій, які не повертають значення у точку виклику або до функцій без параметрів. Цей тип розглядатимемо нижче.

Типи користувача.Крім вище описаних стандартних типів даних, можна створювати типи користувача

typedef <опис типу> <назва нового типу>;

Приклад 6. Опишемо тип kilkist для позначення коротких цілих даних без знаку:

typedef unsigned short intkilkist;

Змінні (kill, kil2) цього типу у програмі можна оголосити так: kilkist kill, kil2;.

Запитання

1. Що таке тип даних?

2. Які ви знаєте типи даних?

3. Які ви знаєте числові типи даних?

4.Які ви знаєте цілочисельні типи даних?

5. Які ви знаєте тини даних для дійсних чисел?

6. У яких форматах можна записати дійсне число?

7. Які значення мають числа 12.5е1, 12.5е-2, 0.125е4, 125е-3?

8. Які значення мають числа 8.5е-1, 92.5е2, -0.45еЗ, -4е-2?

9. З чого утворюється символьний тип?

10. Як одержати на екрані ASCII-код символу?

11. З яких даних складається логічний тип?

12. Як утворити тип даних користувача?

Вправи

1. Опишіть: а) дві змінні х та а цілого типу; б) дві змінні дійсного мшу; в) дві змінні символьного типу. Проініціалізуйте описані змінні.

2. Створіть тип даних користувача сіnа, значеннями даних якого є невід'ємні цілі числа. Якому діапазону можуть належати значення даних описаного типу?

3. Які значення можуть набувати змінні типу Vaga, якщо typedef unsigned long intVaga?

4. Опишіть тип користувача balans із допустимими значеннями даних з діапазону від -32 000 до 32 000.

 

 

ПРИСВОЄННЯ

1. Проста програма.Програма – це послідовність команд, задопомогою яких записують алгоритм розв'язування конк­ретної задачі.

Задача 1 (про прямокутний трикутник).Нехай задано ка­тети прямокутного трикутника а= 3, b = 4. Знайти периметр і площу трикутника.

// Програма Трикутник1

#include<iostream>

#include<math.h>

using namespace std;

voidmain()

{

inta = 3, b = 4, p=0; // Задаємо довжини сторін

doublec, s;

с = sqrt((double)(a * а + b * b)); // Обчислюємо гіпотенузу

р = а + b + c; // Обчислюємо периметр

s = а * b / 2; // Обчислюємо площу

cout<< "р = " << р << "\п"; // Виводимо значення периметра

cout<< "s = " << s << "\n"; // та площі на екран

cout << "Vykonav st. Ivaniv A."

}

Символ "*" позначає операцію множення, а "/" – ділення. Функція sqrt() призначена для обчислення квадратного кореня. Ця функція визначена у бібліотеці math.h, яку під'єднують на початку програми. Після виконання програми на екрані отримаємо

р=12

s = 6

Vykonav st. Ivaniv A.

2. Команда присвоєння. Правила узгодження типів.Ко­манда присвоєння має такий загальний вигляд:

<назва змінної> = <вираз> або

<назва змінної 1> = <назва змінної 2> = ... = <назва змінної N> = <вираз>

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

Розглянемо приклади написання команд присвоєння:

а = 8-2; с = d = а + 4; е = d /5 + с;

Змінна і вираз не обов'язково повинні бути одного типу. Крім того, у виразі можуть бути дані різних числових типів (змішані вирази). Якщо тип змінної не збігається з типом ви­разу, то у C++ відбувається автоматичне перетворення (узгодження) типів.

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

Надалі поза командами імена змінних подаватимемо курсивом.

Приклад 1. Розглянемо програму, де значення змінної а типу intтреба помножити на значення змінної с типу float(відповідні числа вводитимемо з клавіатури) і результат надати змінній b типу int:

// Множення чисел

#include<iostream.h>

voidmain() {

intb, a; float c;

cout<< "Введіть ціле число\n":

cin>> а; // Вводимо значення а з клавіатури

cout<< "Введіть дійсне число\n":

cin>> с; // Вводимо значення с з клавіатури

b = с * а:

cout<<"а = " << а << "\n";

cout<<"с = " « с << "\n";

cout<<"b = "; cout << b << "\n";

}

Для введення значення змінної з клавіатури використовується конструкція сіn >>.

Якщо ввести дані так: a = 2, с = 3.8, то після виконання приграми на екрані отримаємо

а = 2

с = 3.8

b = 7

Спочатку відбулося множення (с ∙ a = 3.8 2 = 7.6). Ос­кільки змінна b цілого типу, то дробову частину числа 7,6 було відкинено і змінній b надано значення 7. Відбулося неявне перетворення типів (перетворення за замовчуванням). Якщо у попередній програмі змінну b оголосити як змінну типу float, то отримаємо b = 7,6.

Для явного перетворення типів новий тип задають у кру­глих дужках перед змінною або виразом. Якщо у програмі лише записати команду b = (int) c * а;

то під час обчислення виразу спочатку відбудеться перетво­рення даного с до цілого типу (3), а потім – множення (с ∙ a = 32 = 6). Отримаємо а = 2, с = 3.8, b = 6.

Якщо ж у програмі цю команду записати так: b = (int) (c * а);

то спочатку відбудеться множення (с ∙ a = 3.8 2 = 7,6), а піз­ніше результат буде перетворений до цілого числа (b = 7). От­римаємо а = 2, с = 3.8, b = 7.

Отже, у випадку використання явного перетворення типів потрібно стежити, до яких елементів виразу воно застосову­ється. Узгодження типів у виразах відбувається з урахуван­ням пріоритетів типів. Зазначимо пріоритети типів за їхнім спаданням: double, float, long, int, short. За замовчуванням ре­зультат перетворюється до старшого типу.

Вправи

1. Розглянувши програми Трикутник1 і Множення чисел як зразки, розв'яжіть задачу № 1 вашого варіанта з розділу "Задачі" трьома способами:

а) задайте вхідні дані під час оголошення змінних;

б) задайте вхідні дані командами присвоєння;

в) введіть вхідні дані з клавіатури.

2. Складіть програму розв'язування задачі № 1 з розділу "Задачі" наступного після вашого варіанта. Дані введіть із клавіатури.

 


 

АРИФМЕТИЧНІ ВИРАЗИ

1. Основні арифметичні операції мови C++наведені в табл. 3.

Таблиця 3. Арифметичні операції

Пріоритет Операції Зміст операції
+ , – Присвоєння знака
*, /, % Множення, ділення, остача від ділення
+ , – Додавання, віднімання
= =, !=, <, <=, >, >= Порівняння (відношення)

 

Розглянемо операції порівняння. Операція = = означає до­рівнює, != – не дорівнює, <= – менше або дорівнює, >= – більше або дорівнює.

Виконання кожної операції здійснюється з урахуванням їхніх пріоритетів (тут 1 – найвищий). Для зміни звичайного порядку виконання операцій використовують круглі дужки.

Приклад 1. Розглянемо результати виконання операцій

2*-5 + 4 = -6; 12/4-2 = 1;

2*(-5+ 4) =-2; 12/(4-2) = 6;

7 % 3 = 1; 7 % 3 * -5 = -5.

Приклад 2. Нехай х = 3, у= 5. Дано вираз х = = у. Значенням цього виразу буде false (хибність), оскільки значен­ня змінних х та у не рівні між собою, а значенням виразу х != у – true (істина), значеннями виразів х > у, х <= (у – 2) –відповідно false та true.

2. Операції інкременту(++) та декременту(— —). Операції інкременту і декременту існують у двох формах – префіксній та постфіксній. Якщо символи ++ (—) записані перед змін­ною – то це інкремент (декремент) у префіксній формі, а якщо після змінної – у постфіксній. Операція інкременту має такий вигляд:

++<змінна> або <змінна>++

Дія операції. Значення змінної збільшується на одиницю. Команди ++а, а++ рівносильні команді а = а + 1. Форма інкре­менту (декременту) впливає на порядок виконання операцій у виризах. Розглянемо це на прикладах.

Приклад 3. Результати виконання команд

а = 2;

b = 3 * ++а;

будуть такими: а = 3, b = 3 ∙ 3 = 9. Тут використано операцію інкременту у префіксній формі: спочатку збільшується значен­ий змінної а на одиницю, а пізніше обчислюється вираз.

Приклад 4. Розглянемо команди с = 5; d = (с++) + 4;

Тут спочатку обчислюється вираз (для d) з с = 5, а потім збільшується значення змінної с на одиницю. Тобто d = с + 4 = 5 + 4 = 9, с = с + 1 = 5 + 1 = 6 (це операція інкременту у постфіксній формі). Оскільки у виразі записано три знаки плюс "+" підряд, то для однозначного задання порядку операцій використано круглі дужки.

Аналогічно операція декременту має такий вид:

– – <змінна> або <змінна> – –

Значення змінної зменшується на одиницю. Команди – –а та а – – діють як і команда а = а – 1.

Приклад 5. Результати виконання команд х = 4; у = 15/– –х;

будуть такими: х = 3, у = 15/3 = 5. Тут спочатку значення змінної х зменшується на одиницю, а пізніше обчислюється вираз для у.

Приклад 6. Під час виконання команд

f = 20;

g = (f– – ) – 10;

змінним f, g будуть надані значення 19 і 10 відповідно.

3. Команда присвоєння, суміщена з арифметичною опера­цією.Щоб надати значення змінній, можна скористатися командою присвоєння, суміщеною з деякою арифметичною операцією, а саме: +=, – =, *=, /—, %=. Загальний вигляд команди присвоєння, суміщеної з арифметичною операцією, такий:

<змінна> <символ арифметичної операції>= <вираз>

Зауважимо, що між символом арифметичної операції та символом "=" пропуск не допускається (це лексема). Наприклад, команди

а = а + 10 та а+=10

рівносильні. Виконавши їх одержимо однаковий результат, хоча оптимальніше використовувати а += 10. А замість команди b = 4 * b можна писати b *= 4.

4. Математичні функції. Усі стандартні математичці функції у C++ описані у бібліотеці math.h. Тому, якщо вони використовуються, на початку програми необхідно записати рядок під'єднання потрібного файлу заголовків

#include <math.h>;.

Основні математичні функції бібліотеки math.h наведені у табл. 4. Аргументи функцій записують у круглих дужках.

Таблиця 4. Математичні функції

Назва функції Математичний запис   Назва функції Математичний запис
abs(x) |x|   fabs(x) |x|
cos(x) cos х   acos(x) arcosx
sin(x) sin x   asin(x) arcsinx
tan(x) tg x   atan(x) arctgx
log(x) ln x   ceil(x) заокруглює число х до більшого цілого
pow(x.y) хУ  
sqrt(x)   floor(x) відкидає дробову частину числа х
     
exp(x) ex   fmod(x, y) обчислює остачу від ділення числа х на число у
pow10(x) 10*  
Iog10(x) lg*      

Приклад 7. Нехай оголошено змінні

int х - -2, х1, а = 3;

float pi = 3.1415926, m = 16, kut, к;

Тоді у результаті виконання команд

х1 = abs(x); a=pow10(a);

kut = cos(2 * pi);

k = pow(m, 1./4);

m = sqrt(m);

змінним x1, a, kut, k, m будуть надані наступні значення:

х1 = abs(-2) = I -2 I = 2; a = pow10(3) = 103= 1000;

kut = cos(2* 3.1415926) = 1; k = pow(16, 1./4) = 161/4=2;

m = sqrt(16)= =4.

Приклад 8. Нехай у програмі оголошені змінні b, b1, b2 типу doubleі нехай b = 7.6. Тоді після виконання команд

b1 = ceil(b);

b2 = floor(b);

змінна b1 набуде значення 8, а змінна b2 – значення 7.

Усі інші математичні функції можна виразити через основні. Наприклад, ctgx = 1 / tgx, lоg b а = ln(a) / ln(b) тощо.

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

1) обчислюються значення всіх функцій, які входять у вираз;

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

3) виконуються операції додавання та віднімання.

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

Усі елементи виразів (дроби, показник степеня, індекси) записують у горизонтальному рядку. У багатьох випадках їх беруть у дужки. Вирази можна записувати у декількох ряд­ках. "Розривати" вирази можна, наприклад, після символу арифметичної операції. Власне символ дублювати не потрібно.

Приклад 9. Складемо програму, яка обчислює значення функції

у = для х = 2.

#include<iostream.h> // Обчислення виразу

#include<math.h>

voidmain()

{

const floatpi = 3.1415926;

floatx = 2, y;

у = pow(x * x + 7.2, 1. / 5) - fabs(x - 5) + sin(pi * x / 3);

cout<<"\n у = " << у << "\n";

}

Результат виконання програми такий: у = -0.512748.

Вправи

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

2. Запишіть мовою C++ такі вирази:

а) ;

б) ;

в) ;

г) .