Разработать программу для работы с типизированным файлом. Программа должна сделать следующее:
При любых операциях содержимое как текстового, так и типизированного файла не должно записываться в массив. Для перестановки элементов типизированного файла необходимо использовать средства прямого доступа к файлу.
Имена файлов передаются через параметры программы.
В файле должны храниться целые числа в диапазоне от -20 до +60. Осуществляется поиск первого элемента, кратного 5, и перестановка его в конец файла.
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | TextFileName | Имя текстового файла | строка | простая переменная |
TypedFileName | Имя типизированного файла | строка | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | TypedFileName | Имя типизированного файла | строка | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | TypedFileName | Имя типизированного файла | строка | простая переменная |
Выходные данные | r | Значение первого элемента, кратного 5 | цел. | простая переменная |
n | Номер позиции элемента, кратного 5, в файле | цел. | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | TypedFileName | Имя типизированного файла | строка | простая переменная |
Выходные данные | Result | Результат перемещения | перечислимый | простая переменная |
№ теста | Входные данные | Ожидаемые результаты | Смысл теста |
---|---|---|---|
1 | x = {12, 46, -34, 78, -5, 13, 45, 9} |
r = -5 n = 4 x = {12, 46, -34, 13, 45, 9, -5} |
В файле есть элементы, кратные 5. |
2 | x = {9, 1, -2, 33, 3, 17} | В файле нет элементов, кратных 5. |
При создании типизированного файла из текстового вводим значения из текстового файла по одному, и если значение попадает в заданный диапазон, записываем его в типизированный файл.
При поиске заданного значения вводим значения из типизированного файла по одному, считая при этом количество введённых значений, и если элемент удовлетворяет заданному условию, выходим из цикла. Значение позиции в файле, равное -1, может служить признаком отсутствия искомого элемента.
При перемещении элемента сначала необходимо проверить, что размер типизированного файла не равен 0 (с помощью функции FileSize). Затем используем подпрограмму поиска для поиска элемента, удовлетворяющего заданному условию, и его позиции в файле. Если элемент найден, то необходимо сместить ряд элементов файла вперёд или назад в зависимости от положения найденного элемента и позиции, куда его надо переместить. Это делается с помощью операций чтения и записи и прямого доступа к файлу. Затем найденный элемент записывается в нужную позицию. Функция перемещения должна возвращать значение, сигнализирующее о результате перемещения – файл пуст, элемент не найден, элемент успешно перемещён. Для того чтобы использовать не просто числовые значения, а осмысленные имена, создадим перечислимый тип.
type
Results = (Moved, FileIsEmpty, ElementNotFound);
Если мы передаём в процедуру преобразования имена текстового и типизированного файла, то в процедуре могут возникнуть две проблемы – файл не существует или содержит неверные данные. В этом случае будут генерироваться разные исключения, и для того, чтобы различить эти ситуации, надо в операторе try...except указать тип исключения.
try
Transform(Paramstr(1), Paramstr(2));
except
on System.IO.IOException do
begin
writeln('Невозможно открыть файл ''', Paramstr(1), ''' для чтения');
exit;
end;
on System.FormatException do
begin
writeln('Файл ''', Paramstr(1), ''' содержит неверные данные');
exit;
end;
end;