Типи користувача.Крім вище описаних стандартних типів даних, можна створювати типи користувача
ОСНОВНІ ПОНЯТТЯ
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>
Якщо ж потрібний файл розміщений не у папці INCLUDE, то назву файлу із зазначенням шляху пишуть у лапках "...". Наприклад, якщо деякий файл 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 = 3 ∙ 2 = 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++ такі вирази:
а) ;
б) ;
в) ;
г) .