- •1. Лабораторна робота 1. "Структури: складені типи даних"
- •Теоретичні відомості
- •1.1.1. Структури
- •1.1.2. Робота з масивом структур
- •1.2. Постановка задачі
- •1.3. Варіанти
- •1.4. Методичні вказівки
- •Постановка задачі.
- •2. Лабораторна робота 2 "Динамічні структури даних"
- •2.1. Теоретичні відомості
- •2.1.1. Списки
- •2.1.2. Стеки
- •2.1.3. Черги
- •2.2. Постановка задачі
- •2.3. Варіанти завдань
- •3.1.2. Члени класу
- •3.1.3. Доступ до членів класу
- •3.1.4. Черги-масиви
- •3.1.5. Стеки-масиви
- •3.2. Постановка задачі
- •3.3. Варіанти завдань
- •3.4. Методичні вказівки
- •4. Лабораторна робота 4. "Перезавантаження конструкторів"
- •4.1. Теоретичні відомості
- •4.1.1. Перезавантаження конструкторів
- •4.1.3. Операції з матрицями
- •4.2. Постановка задачі
- •4.3. Варіанти завдань
- •4.4. Методичні вказівки
- •5. Лабораторна робота 5. "Перезавантаження операторів. Дружні функції"
- •5.1. Теоретичні відомості
- •5.1.1. Дружні функції
- •5.1.1. Перезавантаження операторів
- •5.1.2. Операторні функції для комплексних чисел
- •5.2. Постановка задачі
- •5.3. Варіанти завдань
- •5.4. Методичні вказівки
- •6. Лабораторна робота 6. "Спадкування. Віртуальні функції"
- •6.1 Теоретичні відомості
- •6.1.1. Спадкування й модифікатори спадкування
- •6.1.2. Віртуальні функції
- •6.1.3. Відділення інтерфейсу від реалізації
- •6.2. Постановка задачі
- •6.3. Варіанти завдань
- •6.4. Методичні вказівки
- •7. Лабораторна робота 7. "Шаблони"
- •7.1. Теоретичні відомості
- •7.1.1. Шаблони функцій
- •7.1.2. Шаблони класів
- •7.1.3. Приклад. Методи шаблона вектора
- •7.1.4. Приклад. Шаблон класу зв'язного списку
- •7.2. Постановка задачі
- •7.3. Варіанти завдань
- •7.4. Методичні вказівки
- •8. Лабораторна робота 8. "Файловий введення-виведення"
- •8.1. Теоретичні відомості
- •8.1.2. Потоки й файли
- •8.1.3. Текстові файли. Форматоване введення-виведення
- •8.1.4. Неформатоване двійкове введення-виведення
- •8.1.5. Файли довільного доступу
- •8.2. Постановка задачі
- •8.3. Варіанти завдань
- •8.4. Методичні вказівки
- •Література
7.4. Методичні вказівки
Інтерфейс програми має бути побудований у вигляді меню, що дозволяє вибрати потрібну операцію над даними.
7.5. Зміст звіту
Постановка завдання.
Код програми.
Скриншот з результатами роботи програми.
Пояснення принципів використання шаблонів функцій і класів.
8. Лабораторна робота 8. "Файловий введення-виведення"
Ціль роботи: Вивчення системи введення-виведення С++: класів-шаблонів потоку, прапорців формату, маніпуляторів введення-виведення. Освоєння посимвольних і блокових операцій з файлами, а також прийомів послідовного й довільного доступу.
8.1. Теоретичні відомості
8.1.1. Система введення-виведення С++
У мові програмування С++ операції введення/виведення виконуються за допомогою класів istream (потокове введення) і ostream (потокове виведення). Третій клас, iostream, є похідним від них. Для використання бібліотеки iostream необхідно підключити заголовний файл <iostream>.
Система введення-виведення С++ дозволяє форматувати дані аналогічно тому, як це робить у С функція printf. Форматуванням управляють прапорці формату, які являють собою бітові маски. Прапорці формату підтримуються в базовому класі ios бібліотеки iostream. Кожний прапорець встановлюється функцією setf(), а скидається функцією unsetf() класу ios.
Прапорці left, right дозволяють вирівнювати виведену інформацію по лівій і правій границях поля за допомогою символів, що друкуються відповідно в правій і лівій порожніх позиціях. Використовуваний символ заповнення задається за допомогою функції fill() класу ios або маніпулятора потоку setfill() (всі маніпулятори підключаються заголовним файлом <iomanip>). Прапорець showpos приводить до обов'язкового друку знака +. Прапорець fixed установлюється для виведення чисел із плаваючою крапкою у звичайній нотації. Прапорець scientific установлюється для виведення чисел із плаваючою крапкою в експонентній формі. Для установки ширини поля виведення може бути використана функція width() класу ios або маніпулятор потоку setw(). Кількість значущих цифр задається функцією precision() або маніпулятором setprecision().
Розглянемо застосування прапорців і маніпуляторів у програмі:
#include <iostream.h>
#include <iomanip.h>
int main(){
double x=12.345;
cout.setf(ios::right);
cout<<setw(10)<<x<<endl;
cout.setf(ios::left);
cout.fill('#');
cout<<setw(10)<<x<<endl;
cout.unsetf(ios::left);
cout.unsetf(ios::right);
cout.fill('*');
cout<<setw(10)<<setprecision(4)<<x<<endl;
cout.setf(ios::left | ios::showpos);
cout<<setw(10)<<setfill('$')<<x<<endl;
return 0; }
Результат роботи програми буде наступним:
12.345
12.345####
*****12.35
+12.35$$$$
Установка ширини поля застосовується тільки до наступної операції "помістити" або "взяти" з потоку; потім ширина поля встановлюється такою, яка необхідна для подання вихідних значень.
8.1.2. Потоки й файли
Описаний вище механізм введення-виведення можна використати не тільки для консолі, але й для файлів як у текстовому, так і в бінарних режимах. Для реалізації файлового введення-виведення необхідно включити в програму заголовок <fsream>. У ньому визначено кілька потокових класів: ifstream (для створення потоку введення), ofstream (для потоку виведення) і fsream (для потоків, що одночасно реалізують введення й виведення). Перед початком роботи з файлом необхідно створити потік за допомогою, наприклад, однієї з наступних інструкцій:
ifstream in; //введення
ofstream out; //виведення
fstream io; //введення й виведення
Потім із створеним потоком зв'язується файл. Для цього використається функція open() із прототипом:
void stream1 :: open("file1", ios:in);
– зв'язування файлу по імені file1 з потоком введення у файл, ios:in – значення, що задає режим відкриття файлу для введення. Інші режими роботи з файлами задаються за допомогою значень: ios:out (відкриття файлу для виведення), ios:app (режим додавання в кінець файлу), ios:binary (двійковий режим),.
Використати функцію open() для відкриття файлу не обов'язково, тому що в класах ifstream, ofstream і fstream є конструктори, які відкривають файл автоматично. Відкрити файл можна в таким чином:
ifstream stream1 ("file1");
У цій функції другий параметр відсутній, оскільки він за умовчанням буде мати те значення (ios:in), що відповідає типу потоку, що відкривається.
Для закриття файлу використається функція close(). Наприклад, щоб закрити файл, пов'язаний з потоком stream1, потрібно записати:
stream1.close();
Однак якщо файл був відкритий за допомогою змінної типу ifstream, він буде автоматично закритий по закінченні роботи функції. Будь-який файл закривається, коли пов'язаний з ним об'єкт виходить із області видимості.