- •3.8. Упражнения 49
- •Введение
- •1. Базовые элементы
- •1.1. Комментарии
- •1.2. Функция «main»
- •1.3. Идентификаторы и пространства имен
- •1.4. Типы
- •1.5. Переменные
- •1.7. Константы
- •1.6. Преобразование типов
- •1.8. Потоковый ввод – вывод
- •1.9. Операции
- •1.9.1. Арифметические операции
- •1.9.2. Поразрядные операции
- •1.9.3. Условный оператор
- •1.9.4. Операции отношения
- •1.9.5. Логические операции
- •1.10. Стандартные математические функции
- •1.11. Упражнения
- •2. Базовые конструкции
- •2.1 Ветвление
- •2.1.1. Конструкция «if – else»
- •2.1.2. Конструкция «switch»
- •2.2. Циклы
- •2.2.1. Цикл «for»
- •2.2.2. Цикл «while»
- •2.2.3. Цикл «do – while»
- •2.2.4. Операторы циклов
- •2.2.5. Вложенность
- •2.3. Упражнения
- •2.3.1. Ветвления
- •2.3.2. Циклы
- •2.3.3. Вложенность
- •3. Указатели. Массивы. Структуры
- •3.1. Указатели
- •3.2. Массивы
- •3.2.1. Статические массивы
- •3.2.2. Динамические массивы
- •3.4. Ссылки
- •3.5. Структуры
- •3.6. Объединение
- •3.7. Переопределение типов
- •3.8. Упражнения
- •3.8.1. Статические и динамические массивы
- •3.8.2. Многомерные массивы
- •3.8.3. Строки
- •4. Функции
- •4.1. Простые функции
- •4.2. Рекурсия
- •4.3. Указатели и ссылки
- •4.3.1. Передаваемые параметры
- •4.3.2. Возвращаемые значения
- •4.3.3. Ссылки и структуры в функциях
- •4.3.4. Указатели и массивы в функциях
- •4.3.5. Указатели и ссылки на функцию
- •4.4. Шаблоны функций
- •4.5. Упражнения
- •4.5.1. Простые функции
- •4.5.2. Параметры – ссылки и параметры — указатели
- •5. Стандартные классы
- •5.1. Класс «pair»
- •5.2. Класс «complex»
- •5.3. Класс «string»
- •5.4. Контейнеры. Алгоритмы. Итераторы
- •5.5. Класс «vector»
- •5.6. Упражнения
- •5.6.1. Класс «string»
- •5.6.2. Класс «vector»
- •6. Файловый ввод – вывод
- •6.1. Операции
- •6.2. Методы
- •6.3. Флаги
- •6.4. Двоичный режим
- •6.5. Упражнения
- •Ллитература
6.4. Двоичный режим
Главным образом, форматированный файловый ввод – вывод применяется в тех случаях, когда содержимое самого файла должно быть читаемым, а размер данных не велик. В противном случае, целесообразнее применять двоичный ввод – вывод. Этот режим, как и любой другой, требует задания.
Таблица 6.5. Биты режимов.
Название |
Описание |
in |
Чтение (предустановлен для «ifsteream») |
out |
Запись (предустановлен для «ofsteream») |
ate |
Чтения с конца файла |
app |
Записи с конца файла |
trunc |
Открытие с обрезанием файла до нулевой длинны, если он существует |
nocreate |
Не создавать файл, если его не существует |
noreplace |
Не открывать существующий файл без установки «ate» или «app» |
binary |
Бинарный режим |
Листинг 6.4. Двоичный режим.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//структура данных - запись;
struct Record
{
int number;
string name;
string surname;
};
int main (void)
{
Record rec1;
rec1.name = "Ivan";
rec1.surname = "Ivanov";
rec1.number = 1;
//двоичная запись в файл;
ofstream fout( "db.txt", ios::binary );
//запись с помощью reinterpret_cast;
fout.write( reinterpret_cast<char*>(&rec1), sizeof(Record) );
fout.close();
Record rec2;
//двоичное чтение из файла;
ifstream fin( "db.txt", ios::binary );
//чтение с помощью reinterpret_cast;
fin.read( reinterpret_cast<char*>(&rec2), sizeof(Record) );
fin.close();
cout << rec2.number << ". " << rec2.name << " " << rec2.surname << endl;
return 0;
}
Закрытие файлов может происходить автоматически, но если, например, два потока связаны с одним файлом, необходимо закрыть первый, перед тем, как будет открыт второй.
6.5. Упражнения
Выполнить следующие упражнения для файлов, имена которых переданы через аргументы командной строки.
Прочитать из первого файла последовательность целых чисел и записать сумму ее элементов во второй.
Создать структуру данных, содержащую поля имени, фамилии, отчества и даты рождения. Осуществить двоичный файловый ввод – вывод данной структуры.
В двух файлах заданы последовательности целых чисел. Четные числа из обоих последовательностей записать в первый файл, а нечетные во второй.
Дан файл, содержащий последовательность действительных чисел. Отсортировать по возрастанию положительные числа из данной последовательности и результат записать в данный файл.
Из файла, содержащего текст, удалить все повторяющиеся слова.
Обменять содержимое двух файлов местами.
Дан файл, содержащий последовательность целых чисел. Отсортировать по убыванию четные числа из данной последовательности и результат записать в новый файл.
В файле, содержащем последовательность целых чисел, записать все числа в обратном порядке в шестнадцатеричном представлении.
Прочитать из первого файла последовательность целых чисел и записать произведение ее элементов во второй.
Из первого файла, содержащего текст, удалить все слова, несодержащиеся во втором файле.
Из файла, содержащего текст, удалить самое длинное слово.
Дан файл, содержащий последовательность целых чисел. Отсортировать по возрастанию нечетные числа из данной последовательности и результат записать в данный файл.
В файле, содержащем текст, изменить на обратный порядок символов в каждом слове, при этом порядок слов оставить неизмененным.
Дан файл, содержащий последовательность действительных чисел. Отсортировать по убыванию отрицательные числа из данной последовательности и результат записать в новый файл.
В двух файлах заданы последовательности действительных чисел. Положительные числа из обоих последовательностей записать в первый файл, а отрицательные во второй.
Создать структуру данных, содержащую поля наименования продукта, его категории и цены. Осуществить двоичный файловый ввод – вывод данной структуры.
Из файла, содержащего текст, удалить самое короткое слово.
В файле, содержащем текст, состоящем из букв латинского алфавита, заменить символы «i» и «j» на «1», «to» на «2», «fo» на «4» и «at» на «8».
Из первого файла, содержащего текст, удалить все слова, содержащиеся во втором файле.
Дан файл, содержащий текст. Выстроить лексикографически все слова, содержащиеся в файле, и результат записать во второй файл.
