- •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. Методичні вказівки
- •Література
8.1.3. Текстові файли. Форматоване введення-виведення
Після того, як файл відкритий, з нього легко зчитати дані або записати нові текстові дані. Текстовий файл – це послідовність ASCII-символів, яка розділена на рядки. Для запису в текстовий файл і зчитування з файлу можна використати оператори << і >> так само, як це робиться для консольного введення-виведення. Необхідно тільки замінити потік cin або cout тим потоком, що пов'язаний з даним файлом. Вся інформація у файлі зберігається в тім же форматі, якби вона перебувала на екрані. Тому файл, створений за допомогою <<, являє собою файл із відформатованим текстом.
Пример запису рядка й числа в текстовий файл:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ofstream fout("test.txt"); //Створення файлу для виведення
if(!fout) { //Якщо не вийшло створення файлу
cout << " Can't open file\n";
return 1; }
fout << "Record to file\n"<<100<< endl; //Запис у файл
fout.close();//Закриття файлу
return 0; }
У результаті роботи цього коду в поточній директорії програми буде створений файл test.txt, що містить наступний текст:
Record to file
100
Приклад введення рядків із клавіатури й запису в файл. Програма завершується при введенні символу # як першого символу рядка (у цьому й наступному прикладах директиви на підключення бібліотек iostream і fstream опущені).
int main(){
ofstream fout("test.txt");
if(!fout) {
cout << " Can't open file\n";
return 1; }
char str[80];
cout << "Enter string/For ending enter #\n";
do {cout << ": ";
cin >> str;
fout << str << endl; //У потік виведення записати str
} while (*str!='#'); //Поки не введений символ #
fout.close();
return 0; }
Відмітимо, що при відкритті файлу в режимі виведення (ofstream) існуючий файл усікається до нуля. Щоб відкрити файл для запису, зберігши існуючий у ньому текст, використовується режим додавання в кінець файлу:
ofstream fout("test.txt", ios::app);
Приклад зчитування текстового файлу й виведення на екран:
int main(){
ifstream fin("test.txt"); //Відкриття файлу
if(!fin) { //Якщо файл не знайдений
cout << " Can't open file\n";
return 1;}
char ch;
fin.unsetf(ios::skipws); //Не пропускати пробіли
for (;;){
fin >> ch; //Запис символу з файлу в змінну ch
if (fin.eof()) break; //Якщо досягнуто кінець файлу
cout << ch; /*Виведення символу на екран*/ }
fin.close(); //Закриття файлу
return 0; }
Приклад копіювання файлів. Програма копіює файл file1 у файл file2 і підраховує число скопійованих символів.
int main(){
ifstream fin("file1.dat", ios::in);//Відкрити для введення
ofstream fout("file2.dat", ios::out);//Відкрити для виведення
if(!fin) { cout << "Can't open file1\n";
return 1; }
if(!fout) {cout << "Can't open file2\n";
return 1; }
char ch;
unsigned count = 0;
fin.unsetf(ios::skipws); //Не пропускати пробіли
for (;;){fin >> ch;
if (fin.eof()) break;
fout << ch;
count++; }
cout << "Number of copied bytes: " << count << '\n';
fin.close();
fout.close();
return 0; }