- •«Московский государственный технический университет гражданской авиации»
- •Лабораторная работа № 12 Обработка данных текстовых и бинарных файлов.
- •1.1. Цель лабораторной работы
- •1.2. Теоретические сведения Работа с файлами
- •Текстовые и бинарные (двоичные) файлы
- •Потоковый ввод - вывод на базе библиотеки классов
- •Создание потоков
- •Закрытие файла
- •Определение потоков - объектов классов с присоединением потока к физическому файлу
- •1.3. Задание на выполнение лабораторной работы
- •1.4. Порядок выполнения работы
- •1.5. Пример выполнения лабораторной работы
- •Листинг программы
- •1.6. Контрольные вопросы
- •2 Лабораторная работа № 13 Разработка шаблонов абстрактных типов данных с перегрузкой в них ряда операций.
- •Цель лабораторной работы
- •2.2. Теоретические сведения Абстрактные типы данных (атд)
- •Шаблоны функций и классов
- •Шаблоны функций
- •Шаблоны классов
- •Использование шаблона классов
- •Внешнее определение методов и дружественных функций шаблонных классов.
- •2.3 Задание на выполнение лабораторной работы
- •2.4. Порядок выполнения работы
- •2.5. Методические указания
- •2.6. Содержание отчета
- •Контрольные вопросы
- •Варианты заданий лабораторной работы
- •3. Лабораторная работа № 14 Демонстрация использования алгоритмов stl для обработки элементов контейнерных классов, встроенных и пользовательских типов.
- •3.1. Цель лабораторной работы
- •3.2. Теоретические сведения Стандартная библиотека шаблонов (stl)
- •Состав stl
- •Контейнеры
- •Алгоритмы
- •Контейнеры и итераторы.
- •Продолжим рассмотрение контейнеров
- •Общие свойства контейнеров
- •Последовательные контейнеры
- •Методы, которые поддерживают последовательные контейнеры
- •Адаптеры контейнеров
- •Очередь
- •Очередь с приоритетами
- •Ассоциативные контейнеры
- •Словари (map)
- •Словари с дубликатами (multimap)
- •Множество (set)
- •Множества с дубликатами (multiset)
- •Обобщенные алгоритмы stl
- •Не модифицирующие операции с последовательностями
- •Функциональные объекты
- •3.3. Задание на выполнение лабораторной работы
- •3.4. Порядок выполнения работы
- •Часть 1
- •3.5. Методические указания
- •3.6. Контрольные вопросы
- •3.7. Варианты заданий лабораторной работы
- •1.1. Цель лабораторной работы 3
- •1.2. Теоретические сведения 3
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ВОЗДУШНОГО ТРАНСПОРТА
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«Московский государственный технический университет гражданской авиации»
Кафедра вычислительных машин, комплексов, систем и сетей
Л.А. Надейкина
ПРОГРАММИРОВАНИЕ
ПОСОБИЕ
по выполнению лабораторных работ № 12, 13, 14
для студентов I курса
направления 09.03.01
очной формы обучения
Москва - 2021
ББК 6Ф7
Н17
Рецензент Черкасова Н.И.
Надейкина Л.А.
Н17 ПРОГРАММИРОВАНИЕ: Пособие по выполнению лабораторных работ № 12, 13, 14 – М.: МГТУ ГА, 2021. – 48 с.
Данное учебное пособие издается в соответствии с учебным планом для студентов I курса направления подготовки 09.03.01 «Информатика и вычислительная техника» (бакалавриат) очного обучения.
Рассмотрено и одобрено на заседаниях кафедры № 2 от 26.10.2021 и методического совета № 2 от 26.10.2021
Лабораторная работа № 12 Обработка данных текстовых и бинарных файлов.
1.1. Цель лабораторной работы
Целью лабораторной работы является получение навыков программирования с использованием текстовых и бинарных файлов, содержащих структурированные данные.
1.2. Теоретические сведения Работа с файлами
Информация во внешней памяти сохраняется в виде файлов – именованных участков внешней памяти.
Файлы позволяют сохранять информацию при отключении компьютера, в отличие от оперативной памяти (ОП). Под файлом понимают также логическое устройство – потенциальный источник или приемник информации.
В файлы можно как помещать данные, так и извлекать их из файлов.
Такие действия имеют общее название ввод/вывод.
Функции С++ позволяют читать данные из файлов в ОП, получать их с устройств (напр. с клавиатуры), и записывать данные из ОП в файл или выводить их на различные устройства, например, на экран или на принтер.
Файл имеет следующие характерные особенности:
имеет имя на диске, что дает возможность программам идентифицировать и работать с файлами;
длина файла ограничивается только емкостью диска.
Часто бывает необходимо ввести некоторые данные из файла или вывести результаты в файл. Например, необходимо обрабатывать огромные массивы данных, которые слишком велики, чтобы полностью разместиться в оперативной памяти.
Особенностью языка С++ является отсутствие в нем структурированных файлов. Все файлы рассматриваются как неструктурированная последовательность байтов. При таком подходе понятие файла распространяется и на различные устройства.
В С++ существуют специальные средства ввод/вывода данных. Все операции ввода/вывода реализуются с помощью функций, которые находятся в библиотеке С++.
Средства ввода/вывода языка С++ можно разделить на три группы:
ввод/вывод верхнего уровня – потоковый
а) библиотека функций Си – интерфейс в файле <cstdio>
б) библиотека классов С++ – интерфейс в файле <fstream>
ввод/вывод нижнего уровня (системный ввод - вывод) – файл <io.h>
ввод/вывод для консоли и портов – интерфейс в файле <conio.h>
Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.
Функции библиотеки ввода/вывода языка С++, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод/ вывод. Таким образом, поток представляет сам файл вместе с предоставленными средствами буферизации.
Чтение данных из потока называется извлечением, вывод в поток – помещением (включением) данных в поток.
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти – буфер. Буфер накапливает байты, и фактическая передача данных выполняется после заполнения буфера (рис. 1). При вводе это дает возможность исправить ошибки, если данные из буфера еще не отправлены в программу.
Рисунок 1. Буферизация данных при работе с потоками
При работе с потоком можно:
открывать и закрывать потоки (связывать указатели на поток с конкретными файлами и разрывать эту связь);
вводить и выводить строку, символ, форматированные данные, порцию данных произвольной длины;
анализировать ошибки ввода/вывода и достижения конца файла;
управлять буферизацией потока и размером буфера;
получать и устанавливать указатель текущей позиции в файле.
Библиотека ввода/вывода С++ включает средства для работы с последовательными файлами, представляющими собой именованную последовательность байтов, имеющую начало и конец. Чтение из файла или запись в файл ведутся байт за байтом, позиции в файле, откуда производится чтение, или куда ведется запись, определяются указателем позиции файла.
Указатель позиции записи или чтения устанавливается либо автоматически, либо с помощью функций управления положением, указатель можно установить на нужный байт.
Файлы – именованные объекты внешней памяти, доступ к файлам поддерживается операционной системой.
Все что надо – задать способ связи программы с файлом, а также иметь функции, используемые программой при чтении содержимого файла, записи в
файл, создания нового файла, позиционирования записи и чтения данных в файл и из файла. Такие действия являются частью аспекта ввода/вывода данных и для их реализации в C++ имеются различные средства.
Все средства имеют альтернативные варианты методов выполнения основных работ с файлами, здесь будут рассмотрены некоторые методы библиотеки потоковых классов.
