Макроси. Директива #define. Приклади
Зміст
- 1. Поняття макросу. Директива #define
- 2. Реалізація макросів у програмах. Приклад, що демонструє використання 3-х макросів у програмах
- 3. Приклад, в якому в одному макросі використовуєтья результат іншого макросу. Обчислення площі трикутника
- 4. Приклад розбиття розв’язку задачі на декілька макросів. Розв’язок квадратного рівняння
- Зв’язані теми
Пошук на інших ресурсах:
1. Поняття макросу. Директива #define
У програмах можуть зустрічатися фрагменти коду, які повторюються. Для того, щоб викликати часто використовувані фрагменти коду, у програмах на C++ можна використовувати:
- функції;
- макроси.
Для оголошення макросу використовується директива #define. Загальна форма оголошення макросу наступна:
#define MacroName(parameters) expression
тут
- MacroName – ім’я макросу;
- parameters – параметри, які отримує макрос;
- expression – вираз, який обчислює макрос. Вираз розміщується в тому самому рядку, що й директива #define.
Після оголошення макросу його можна використовувати як виклик звичайної функції.
⇑
2. Реалізація макросів у програмах. Приклад, що демонструє використання 3-х макросів у програмах
Завдання. Розробити програму, яка реалізує 3 макроси:
- SQR(x) – повертає значення x2;
- POWER_4(x) – повертає x4;
- SIGN(x) – визначає знак числа.
Текст програми на мові C++
#include <iostream> using namespace std; // Тема: Розкриття макросу // Використовується директива препроцесора #define // #define Імя_макросу(Параметри) (Вираз) // 1. Макрос, який підносить число x до квадрату #define SQR(x) ((x) * (x)) // 2. Макрос, який підносить число x до степеня 4 #define POWER_4(x) (SQR(x) * SQR(x)) // 3. Макрос, який повертає -1 якщо число від'ємне, 0 - якщо нульове, 1 - якщо додатнє #define SIGN(x) (((x)<0)? -1 :(((x)==0) ? 0 : 1)) void main() { // Демонстрація використання макросів у програмі // 1. Оголосити змінні int x; // 2. Ввести x з клавіатури cout << "x = "; cin >> x; // 3. Викликати макроси і вивести результат на екран cout << "SQR(x) = " << SQR(x) << endl; cout << "POWER4(x) = " << POWER_4(x) << endl; cout << "SIGN(x) = " << SIGN(x) << ::endl; system("pause"); }
⇑
3. Приклад, в якому в одному макросі використовуєтья результат іншого макросу. Обчислення площі трикутника
У даному прикладі демонструється виклик макросу з іншого макросу. Розв’язується задача обчислення площі трикутника за його сторонами a, b, c. Якщо з сторін a, b, c неможливо утворити трикутник, то макрос повертає 0.
Текст програми
#include <iostream> using namespace std; // Макроси. Директива #define // Обчислити площу трикутника за його сторонами a, b, c. // Якщо зі сторін a, b, c неможливо утворити трикутник, то повернути 0. // Обчислення півпериметру #define P(a, b, c) ((a+b+c)/2.0) // Визначення, чи з сторін a, b, c можна утворити трикутник #define IS_TR(a, b, c) ((((a+b)>c)&&((b+c)>a)&&((a+c)>b)) ? true : false) // Обчислення площі. З даного макросу викликаються два інші макроси: IS_TRIANGLE та P #define AREA_TR(a, b, c) ((IS_TR(a,b,c)) ? (sqrt(P(a,b,c)*(P(a,b,c)-a)*(P(a,b,c)-b)*(P(a,b,c)-c))) : 0) void main() { // Продемонструвати роботу макросу double a, b, c; double area; // площа - результат double sp; // півпериметр cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c; sp = P(a, b, c); area = AREA_TR(a, b, c); cout << "semiperimeter = " << sp << endl; cout << "area = " << area << endl; }
Результат роботи програми
a = 5 b = 8 c = 4.5 semiperimeter = 8.75 area = 10.2269
⇑
4. Приклад розбиття розв’язку задачі на декілька макросів. Розв’язок квадратного рівняння
У прикладі демонструється розв’язок квадратного рівняння. В програмі оголошується 4 макроси. Також визначається, чи взагалі рівняння має корені.
Текст програми наступний
#include <iostream> using namespace std; // Макроси. Директива #define // Обчислення дискримінанту #define D(a, b, c) ((double)b*b-4*a*c) // Визначення, чи є корені у рівняння, заданого коефіцієнтами a, b, c #define IS_ROOTS(a, b, c) ((D(a, b, c)>=0) ? true : false) // Обчислення коренів #define X1(a, b, c) (IS_ROOTS(a, b, c) ? ((-b - sqrt(D(a, b, c)))/(2.0*a)) : 0) #define X2(a, b, c) (IS_ROOTS(a, b, c) ? ((-b + sqrt(D(a, b, c)))/(2.0*a)) : 0) void main() { double a, b, c; double d; double x1, x2; cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c; if (IS_ROOTS(a, b, c)) { x1 = X1(a, b, c); x2 = X2(a, b, c); cout << "x1 = " << x1 << endl; cout << "x2 = " << x2 << endl; } else { cout << "The equation has no solutions"; } }
Результат роботи програми
a = 4 b = -5 c = -6 x1 = -0.75 x2 = 2
⇑
Зв’язані теми
- Опис функції. Фактичні та формальні параметри. Передача параметрів у функцію за значенням та за адресою
- Inline функції-члени класу. Ключове слово inline
⇑