- •Міністерство освіти і науки україни
- •Розділ 1. Арифметичні основи обчислювальних машин
- •1.1. Позиційні системи числення. Переведення числа з однієї системи числення в іншу
- •1.2. Форма представлення чисел. Кодування чисел
- •1.3. Арифметичні операції над двійковими числами. Машинні одиниці інформації
- •Контрольні питання
- •Завдання
- •Розділ 2. Основи алгоритмізації обчислювальних процесів
- •2.1. Поняття і властивості алгоритму
- •2.2. Засоби представлення алгоритмів
- •2.3. Типи алгоритмічних процесів. Приклади
- •Контрольні питання
- •Завдання
- •3.1. Загальна характеристика програми
- •3.3. Кроки для створення та виконання програми
- •3.4. Змінні та константи
- •3.5. Директиви препроцесора
- •Контрольні питання
- •Розділ 4. Введення-виведення даних
- •4.1. Об’єкт виведення даних cout
- •4.2. Функція виведення даних printf
- •4.3. Об’єкт введення даних cin
- •4.4. Функція введення даних scanf
- •Контрольні питання
- •5.2. Операції відношення
- •5.3. Логічні операції
- •5.4. Додаткові операції
- •5.5. Порозрядні операції
- •Контрольні питання
- •Завдання Лінійний обчислювальний процес
- •1. Визначити значення функції y
- •2. Геометричні завдання
- •Розгалужений обчислювальний процес
- •1. Визначити значення функції y
- •3. Перевірити, чи міститься точка з заданими координатами усередині заштрихованої області.
- •Розділ 6. Організація циклів
- •6.1. Організація арифметичних циклів з використанням оператору for
- •6.2. Організація ітераційних циклів з передумовою while та післяумовою do...While
- •6.3. Оператори switch та goto
- •Контрольні питання
- •Завдання Арифметичний цикл
- •Вкладені цикли
- •Ітераційний цикл
- •Суміщення розгалуженого та циклічного процесів
- •Розділ 7. Зовнішні пристрої та символьне введення/виведення. Рядкові, числові функції та функції роботи з датою та часом
- •7.1. Загальна концепція та функції символьного введення-виведення
- •7.2. Символьні функції
- •7.3. Рядкові функції
- •7.4. Числові функції
- •7.5. Функції роботи з датою та часом
- •Контрольні питання
- •Завдання
- •Розділ 8. Вказівки, посилання та масиви
- •8.1. Вказівки
- •8.2. Посилання
- •8.3. Одновимірні масиви
- •8.4. Багатовимірні масиви
- •8.5. Символьні масиви
- •Контрольні питання
- •Завдання Одновимірні масиви
- •Двовимірні масиви
- •Розділ 9. Робота з функціями
- •9.1. Засоби створення функцій
- •9.2. Видимість змінних
- •9.3. Параметри функції та передача значень
- •9.4. Передача масивів в якості параметрів функцій
- •9.5. Функції та вказівки
- •9.6. Перевантаження та шаблони функцій
- •Контрольні питання
- •Завдання
- •Розділ 10. Рекурсивне програмування
- •10.1. Основні поняття рекурсії. Визначення факторіалу числа
- •10.2. Приклади рекурсій
- •Контрольні питання
- •Розділ 11. Робота з файлами
- •11.1. Робота з текстовими та бінарними файлами
- •Можливі режими доступу
- •11.2. Довільний доступ у файлах
- •11.3. Файли потокового введення/виведення з використанням структури file.
- •Контрольні питання
- •Завдання
- •Розділ 12. Структури
- •12.1. Загальна характеристика структури
- •12.2. Масиви структур
- •12.3. Використання масивів, як елементів структур
- •3. Робота зі структурами є універсальною, передбачено додавання записів до файлу (флаг ios:app). Для підрахунку кількості структур на диску приведемо наступні рядки програми:
- •Контрольні питання
- •Завдання
- •Розділ 13. Об’єднання та інші типи даних. Обробка виключних ситуацій
- •13.1. Об’єднання
- •13.2. Перелічені типи даних (enum)
- •13.3. Бітові поля
- •13.4. Обробка виключних ситуацій
- •Контрольні питання
- •Розділ 14. Динамічні структури даних
- •14.1. Стек
- •14.2. Черга
- •14.3. Лінійний список
- •Контрольні питання
- •Завдання
- •Розділ 15. Типові методи сортування масивів
- •15.1. Бульбашкове сортування (bubble sort)
- •15.2. Сортування за допомогою вибору (choice sort)
- •15.3. Сортування вставками (insert sort)
- •15.4. Сортування Шелла
- •15.5. Швидке сортування (quick sort)
- •Контрольні питання
- •Завдання
- •Розділ 16. Чисельне диференціювання та інтегрування
- •16.1. Методи правих та центральних різниць чисельного диференціювання
- •16.2. Методи прямокутників, трапецій, Сімпсона (парабол) чисельного інтегрування
- •Контрольні питання
- •Завдання Чисельне диференціювання
- •Чисельне інтегрування
- •Розділ 17. Чисельні методи розв’язання алгебраїчних рівнянь
- •17.1. Метод половинного ділення (дихотомія)
- •17.2. Метод Ньютона (метод дотичних)
- •17.3. Метод Рибакова
- •Контрольні питання
- •Завдання
- •Розділ 18. Чисельні методи розв’язання системи лінійних алгебраїчних рівнянь
- •18.1. Визначник. Дії над матрицями. Обчислення оберненої матриці
- •18.2. Метод оберненої матриці.
- •18.3. Метод Крамера
- •18.4. Метод Гауса
- •Контрольні питання
- •Завдання
- •1. Розв’язати систему алгебраїчних рівнянь.
- •2. Обчислити добуток матриць.
- •3. Розв’язати матричні рівняння.
- •Список літератури
3.5. Директиви препроцесора
Директиви препроцесора – це команди для препроцесора. Вони не є командами С++. Починаються зі знаку #, наприкінці “ ; ” не ставиться Директиви препроцесора використовуються до компіляції програми.
Приклад:
#include <iostream>
#define age 28
#define message "Привіт!"
Директива #include використовує 2 формати:
#include <файл>
#include "файл"
Кутові дужки вказують препроцесору шукати файл, який включається у зазначених каталогах (у нашому випадку в зазначеному каталозі IDE). Звичайно це каталог INCLUDE. Якщо зазначені (“ ”), то пошук файла здійснюється в каталозі, де знаходиться вихідний текст, а потім, якщо він не буде знайдений, то в тих же каталогах, що й у випадку з кутовими дужками.
Препроцесор цілком вставляє текст зазначеного файла замість директиви #include.
Директива #include частіше усього використовується для включення заголовних файлів, (h-файли). У цих файлах описується, як інтерпретувати бібліотечні функції, використовувані в програмі. Наприклад: iostream – містить необхідну для компілятора інформацію про бібліотечні оператори потокового введення-виведення cout, cin, а також про інші бібліотечні функції, що забезпечують введення - виведення.
При підключенні заголовних файлів стандартної бібліотеки розширення .h можна не вказувати. Це зроблено для того, щоб не обмежувати способи їх зберігання. Для кожного файлу бібліотеки C з ім'ям <name. h > є відповідний файл бібліотеки C++ <cname>, в якому ті ж засоби описуються в просторі імен std. Наприклад, директива #inclucle <cstdio> забезпечує ті ж можливості, що і #include <stdio.h>, але при зверненні до стандартних функцій потрібно указувати ім'я простору імен std.
Призначення директиви #define – знайти та замінити, наприклад:
#define DD 28
В наступному прикладі по всьому тексту перед компіляцією препроцесор змінює х1 на b+c.
Приклад:
#include <iostream>
using namespace std;
#define x1 (b+c)
#define x2 (x1+x1)
void main()
{
int b=2;
int c= 3;
int e = x2; //b+c+b+c
cout <<e; //10
}
Щоб не плутати аргументи #define із змінними у програмі, їх виділяють заголовними буквами. В основному #define використовується для визначення констант. Альтернативно, оголошення констант може відбуватися так:
const float c=10.2f;
const char d = 'A';
Ці константи видимі тільки усередині блоку { }.
Таким чином, директива #define є чудовим засобом для визначення цифрових та рядкових констант.
Директиви умовної компіляції
Директиви умовної компіляції #if, #ifdef та #ifndef застосовуються для того, щоб виключити компіляцію окремих частин програми. Це буває корисно при відладці або, наприклад, за підтримки декількох версій програми для різних платформ.
Формат директиви #if:
#if константное_выражение
[ #elif константное_выражение
[ #elif константное_выражение
.]
[ #else
.]
#endif
Кількість директив #elif – довільне. Блоки коду, що виключаються, можуть містити як описи, так і виконувані оператори. Приклад умовного включення різних версій заголовного файлу:
#if VERSION == 1
#define INCFILE "versl.h"
#elif VERSION == 2
#define INCFILE "vers2.h" / * і так далі * /
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
У константних виразах може використовуватися перевірка, чи визначена константа, за допомогою defined(имя_константы), наприклад:
#if defined(__BORLANDC___)& & ___BORLANDC_ == 0x530 // Вс5.3:
typedef istream_iterator <int.char.char__traits<char>.ptrdiff__t>
istream_iter;
#elif defined(_BORLAND___)/ / BC5.2:
typedef istream_iterator<int. ptrdiff__t> istream_iter:
#else // VC5.0:
typedef istream_iterator<int> istream_iter:
#endif
Інше призначення директиви – тимчасово закоментувати фрагменти коду, наприклад:
#if 0
int i, j ;
double x, у;
#endif
Оскільки допускається вкладеність директив, такий спосіб дуже зручний.
Найчастіше в програмах використовуються директиви #ifdef та #ifndef, що дозволяють управляти компіляцією залежно від того, чи визначений за допомогою директиви #definе вказаний в них символ (хоч би як порожній рядок, наприклад, #define 32_BIT_SUPPORT):
#ifdef символ
//Розташований нижче код компілюється,
//якщо символ визначений
#ifndef символ
//Розташований нижче код компілюється,
//якщо символ не визначений
Дія цих директив розповсюджується до першого #elif, #else або #endif.
Директива #ifndef часто застосовується для того, щоб забезпечити включення заголовного файлу тільки один раз:
#ifndef HEADER_INCLUDED
#include "myheader.h"
#define HEADER_INCLUDED
#endif
