Обработка файлов в потоковом режиме
Лабораторная работа 20. Обработка файлов в потоковом режиме
Цель работы: изучить организацию потокового ввода-вывода в файлы, научиться решать задачи с использованием прямого доступа к данным файла на языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе одну строковую величину, являющуюся корректным именем входного файла (при этом в программе следует предусмотреть проверку существования и корректности открытия файла). Ввод данных осуществляется из входного файла в потоковом режиме с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является максимальный размер строковых данных и допустимый диапазон числовых типов в языке С++. При некорректном открытии файла программа должна завершить работу с выдачей на экран соответствующего сообщения.
Теоретические сведения.
Ознакомьтесь с материалом лекции 20.
Задания к лабораторной работе.
При выполнении заданий используйте работу с файлами с помощью потоков.
- Определите, какая буква чаще всего встречается в заданном текстовом файле.
- Удвойте в текстовом файле каждый символ, кроме пробела.
- Подсчитайте число цифр в данном текстовом файле и их сумму.
- Найдите в файле все строки с максимальной длиной. Выведите их на экран и укажите длину. Выполните чтение их входного файла только один раз.
- Определите переменную "студент", содержащую следующие поля: имя, фамилия, отчество студента, название института, курс, номер группы, специальность. Данные считайте из текстового файла. Выведите данные о студентах, которые учатся на одинаковом курсе и по одной специальности. Курс и специальность задаются пользователем.
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами обработки файлов в потоковом режиме в языке С++. В программном коде к каждой задаче следует выполнять чтение данных из существующего входного файла (имя файла вводится в виде строки символов и считается корректным с точки зрения организации файловой системы). В задаче 2 возможно использование вспомогательного файла, который выступает в роли выходного файла. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, оформив комментарии к коду.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- Почему ввод-вывод в файлы в потоковом режиме аналогичен работе с другими устройствами ввода-вывода?
- С какой целью предусмотрены режимы открытия файлов и почему их такое многообразие?
- Каковы могут быть причины ошибок при открытии файлов в потоковом режиме?
- Какие значения возвращает функция открытия файла в потоковом режиме в зависимости от результата?
- Каким образом в программе происходит проверка достижения конца файла?
- Может ли один и тот же файл одновременно быть открыт для чтения и для записи?
- Можно ли один и тот же файл открыть несколько раз, не закрывая после каждого открытия?
- Сохранится ли информация в файле, если его не закрыть в программе с помощью функции? Обоснуйте ответ.
- В чем принципиальное отличие ввода-вывода в файлы при потоковом и стандартном режимах?