Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет_2 часть_укр.doc
Скачиваний:
1
Добавлен:
09.11.2019
Размер:
938.5 Кб
Скачать

7.4. Методичні вказівки

Інтерфейс програми має бути побудований у вигляді меню, що дозволяє вибрати потрібну операцію над даними.

7.5. Зміст звіту

  1. Постановка завдання.

  2. Код програми.

  3. Скриншот з результатами роботи програми.

  4. Пояснення принципів використання шаблонів функцій і класів.

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, він буде автоматично закритий по закінченні роботи функції. Будь-який файл закривається, коли пов'язаний з ним об'єкт виходить із області видимості.