Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 23:

Работа с элементами файлов

< Лекция 22 || Лекция 23: 12 || Лекция 24 >

Лабораторная работа 22. Работа с элементами файлов

Цель работы: изучить алгоритмы и приемы чтения-записи, перестановок, поиска и сортировок элементов файла и научиться решать задачи с использованием алгоритмов чтения-записи, перестановок, поиска и сортировок элементов файлов на языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе строковые величины, являющиеся корректными именами входных и выходных файлов (при этом в программе следует предусмотреть проверку существования и корректности открытия используемых файлов). Ввод данных осуществляется из входных файлов с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является максимальный размер строковых данных и допустимый диапазон числовых типов в языке С++. При некорректном открытии файла программа должна завершить работу с выдачей на экран соответствующего сообщения. Считанные из файла данные обрабатываются в соответствии с условием задачи с помощью алгоритмов перестановок, поиска или сортировок, после чего осуществляется вывод в выходной файл.

Теоретические сведения.

Ознакомьтесь с материалом лекции 22.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. Файл заполнен символами латинского алфавита. Выведите в другой файл все неповторяющиеся символы исходного файла. Дополнительный массив не использовать.
  2. Дан входной файл, каждая строка которого содержит одно целое число. Удалите все числа между первым максимальным и последним минимальным. Дополнительный массив не использовать.
  3. Даны два входных текстовых файла. Сформируйте выходной файл, вставив в первый входной файл содержимое второго входного файла с указанной позиции. Если вставка невозможна, выдайте об этом сообщение.
  4. Даны два файла вещественных чисел, в которых данные отсортированы по неубыванию. Сформируйте выходной файл из чисел первого и второго входных файлов, чтобы его данные были отсортированы по невозрастанию.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученными методами и алгоритмами обработки файлов в языке С++. В программном коде к каждой задаче следует выполнять чтение данных из существующих входных файлов (имя каждого файла вводится в виде строки символов и считается корректным с точки зрения организации файловой системы). Данные входных файлов необходимо обработать, применив алгоритмы поиска, перестановок или сортировок. В задачах 1 и 2 нельзя использовать дополнительные массивы для хранения промежуточных данных. Вывод следует осуществить в выходной файл, имя которого вводится как строка символов с клавиатуры. Данные входного и выходного файлов необходимо дублировать на экране с соответствующими комментариями. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, оформив комментарии к коду.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

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

Контрольные вопросы

  1. Почему передача данных при файловом вводе-выводе осуществляется побайтно?
  2. Почему при обмене данными через потоки файлы отождествляются с внешними устройствами?
  3. Возможно ли расположить указатель в файле перед началом файла? Обоснуйте ответ.
  4. Возможно ли расположить указатель в файле после символа конца файла? Обоснуйте ответ.
  5. По какой причине для потоков, открытых в режиме преобразования типов, применение fseek является ограниченным?
  6. Как изменится файл, если произвести запись данных в середину файла при буферизированном вводе-выводе?
  7. В чем преимущества и недостатки каждого из способов организации рабочей памяти (в виде массива или другого файла) при редактировании файла?
< Лекция 22 || Лекция 23: 12 || Лекция 24 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!