Преобразовать типизированный файл - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Дан типизированный файл, число компонент которого кратно четырем. Файл состоит из целых чисел не равных нулю, число положительных компонент файла равно числу отрицательных. Необходимо преобразовать файл так, чтобы два положительных числа чередовались с двумя отрицательными. Без использования массива :-( Прошу помощи
Пытаюсь сделать с помощью доп.файла, но что-то делаю не так
****

Решение задачи: «Преобразовать типизированный файл»

textual
Листинг программы
procedure preob_tfile(const fName: string);
var
  a, b: integer;
  i, j: longword;
  z: boolean;
begin
  assign(f1, fName);
  reset(f1);
  for i := 0 to filesize(f1) - 2 do
    begin
      z := i mod 4 < 2;
      seek(f1, i);
      read(f1, a);
      if z <> (a >= 0) //вариант: if z xor (a >= 0)
        then for j := i + 1 to filesize(f1) - 1 do
          begin
            read(f1, b);
            if z = (b >= 0) //вариант: if not(z xor (a >= 0))
              then begin
                seek(f1, j);
                write(f1, a);
                seek(f1, i);
                write(f1, b);
                break
              end
          end
    end;
  close(f1)
end;

Объяснение кода листинга программы

  1. В процедуре preob_tfile заданы две переменные: fName (строка) и f1 (файл).
  2. Выполняется операция присвоения: assign(f1, fName). Это означает, что переменной f1 присваивается значение fName.
  3. Выполняется операция сброса: reset(f1). Эта операция сбрасывает файл в состояние, которое было в момент его создания.
  4. Запускается цикл for, который выполняется 4 раза (от 0 до 3).
  5. Внутри цикла выполняется проверка: z := i mod 4 < 2. Здесь переменная z принимает значение 1, если i является четным числом, и 0 в противном случае.
  6. Выполняется операция seek(f1, i), которая перемещает файловый указатель на позицию i.
  7. Выполняется операция read(f1, a), которая читает из файла a.
  8. Проверяется значение переменной z. Если оно равно 1, то выполняется цикл for, описанный выше. Если значение z равно 0, то переходит к следующему шагу без выполнения дополнительных операций.
  9. Выполняется операция seek(f1, j), которая перемещает файловый указатель на позицию j.
  10. Выполняется операция write(f1, a), которая записывает в файл a.
  11. Если значение переменной z равно 1, то повторяются шаги 9-10 для всех следующих позиций j.
  12. Закрывается файл f1 с помощью операции close(f1).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы