Задача «Типизированные файлы»

1. Постановка задачи

Разработать программу для работы с типизированным файлом. Программа должна сделать следующее:

При любых операциях содержимое как текстового, так и типизированного файла не должно записываться в массив. Для перестановки элементов типизированного файла необходимо использовать средства прямого доступа к файлу.

Имена файлов передаются через параметры программы.

В файле должны храниться целые числа в диапазоне от -20 до +60. Осуществляется поиск первого элемента, кратного 5, и перестановка его в конец файла.

2. Таблица данных

2.1. Процедура преобразования текстового файла в типизированный

Класс Имя Смысл Тип Структура
Входные данные TextFileName Имя текстового файла строка простая переменная
TypedFileName Имя типизированного файла строка простая переменная

2.2. Процедура вывода типизированного файла

Класс Имя Смысл Тип Структура
Входные данные TypedFileName Имя типизированного файла строка простая переменная

2.3. Процедура поиска в файле первого элемента, кратного 5, и номера его позиции

Класс Имя Смысл Тип Структура
Входные данные TypedFileName Имя типизированного файла строка простая переменная
Выходные данные r Значение первого элемента, кратного 5 цел. простая переменная
n Номер позиции элемента, кратного 5, в файле (позиции нумеруются с 0) цел. простая переменная

2.4. Функция перемещения первого элемента, кратного 5, в конец файла

Класс Имя Смысл Тип Структура
Входные данные TypedFileName Имя типизированного файла строка простая переменная
Выходные данные Result Результат перемещения перечислимый простая переменная

3. Аномалии

  1. Недостаточно параметров.
  2. Невозможно открыть файл для чтения.
  3. Значения в текстовом файле не попадают в заданный диапазон – такие значения должны отбрасываться.

4. Тестовые примеры

№ теста Входные данные Ожидаемые результаты Смысл теста
1 x = {12, 46, -14, 78, -5, 13, 45, 9} r = -5
n = 3
x = {12, 46, -14, 13, 45, 9, -5}
В файле есть элементы, кратные 5.
Значение 78 было отброшено при преобразовании текстового файла в типизированный как непопадающее в указанный в задании диапазон.
2 x = {12, 46, -14, 13, 48, 9, 55} r = 55
n = 6
x = {12, 46, -14, 13, 48, 9, 55}
В файле есть элемент, кратный 5, который находится на последнем месте.
3 x = {12, 45, -14, 13, 48, 9, 55} r = 45
n = 1
x = {12, -14, 13, 48, 9, 55, 45}
В файле есть элемент, кратный 5.
4 x = {9, 1, -2, 33, 3, 17} В файле нет элементов, кратных 5.

5. Метод

При создании типизированного файла из текстового вводим значения из текстового файла по одному, и если значение попадает в заданный диапазон, записываем его в типизированный файл.

При поиске заданного значения вводим значения из типизированного файла по одному, считая при этом количество введённых значений, и если элемент удовлетворяет заданному условию, выходим из цикла. Значение позиции в файле, равное -1, может служить признаком отсутствия искомого элемента.

При перемещении элемента сначала необходимо проверить, что размер типизированного файла не равен 0 (с помощью функции FileSize). Затем используем подпрограмму поиска для поиска элемента, удовлетворяющего заданному условию, и его позиции в файле. Если элемент найден, то необходимо сместить ряд элементов файла вперёд или назад в зависимости от положения найденного элемента и позиции, куда его надо переместить. Это делается с помощью операций чтения и записи и прямого доступа к файлу. Затем найденный элемент записывается в нужную позицию. Функция перемещения должна возвращать значение, сигнализирующее о результате перемещения – файл пуст, элемент не найден, элемент успешно перемещён. Для того чтобы использовать не просто числовые значения, а осмысленные имена, создадим перечислимый тип.
type Results = (Moved, FileIsEmpty, ElementNotFound);