Из файла F1 сформировать файл F2, в котором содержаться символы из А1 в обратном порядке. (Замечание: учесть, что последним символом файла является признак (символ) конца файла, его не надо учитывать) — Pascal(Паскаль)

var
   f1, f2 : file of Char;
   ch     : Char;
   li, i  : longint;
 
begin
  {открываем файл номер раз}
  Assign(f1, 'F1');
  Reset(f1);
  {узнаем количество символов в файле}
  li := FileSize(f1);
  {создаем файл номер два}
  Assign(f2, 'F2');
  ReWrite(f2);
  {главный цикл}
  i:=li-1;
  while i>0 do
  begin
    Seek(f1, i);       {устанавливаем позицию в файле}
    Read(f1, ch);      {читаем символ}
    if ord(ch)=10 then
    begin
      {скипим CR и LF, т.к. они всегда идут парой и означают переход на новую строку в текстовом файле}
      {или раскомментируйте 2 следующие строки, чтобы сохранить структуру строк             
      ch:=#$0d; Write(f2, ch);
      ch:=#$0a; Write(f2, ch);
      }
      i:=i-2;
      continue;
    end
    else
    begin
      Write(f2, ch);
      Dec(i);
    end;
  end;
  {закрываем ранее открытые файлы}
  Close(f2);
  Close(f1);
  {улыбаемся}
  ReadLn;
end.

Вариант 2

Program xa;
uses
  crt;
type
  Tstek=^Pstek;
  Pstek=record
    ch:char;
    next:Tstek
  end;
var
  stek,tmp,adr:Tstek;
  f,f1:text;
  s,namefile:string;
  n,i:integer;
  p:boolean;
begin
{$I-}
  repeat
    clrscr;
    p:=true;
    WRiteln('VVedite HaumeHoBaHue faila');
    readln(namefile);
    assign(f,namefile);
    reset(f);
    If IOResult<>0 then
      p:=false;
  until p;
{$I+}
  readln(f,s);
  New(Stek);
  adr:=stek;
  Stek^.next:=nil;
  Stek^.ch:=s[1];
  n:=length(s);
  for i:=2 to n do
  begin
    new(tmp);
    tmp^.next:=stek;
    stek:=tmp;
    adr:=stek;
    stek^.ch:=s[i];
  end;
  While not EOF(f) do
  begin
    readln(f,s);
    n:=length(s);
    for i:=1 to n do
    begin
      new(tmp);
      tmp^.next:=stek;
      stek:=tmp;
      adr:=stek;
      stek^.ch:=s[i];
    end;
  end;
  close(f);
{$I-}
  namefile:='';
  repeat
    clrscr;
    p:=true;
    WRiteln('VVedite HaumeHoBaHue faila dlia 3anici otveta');
    readln(namefile);
    assign(f,namefile);
    rewrite(f);
    If IOResult<>0 then
      p:=false;
  until p;
{$I+}
  stek:=adr;
  while stek<>nil do
  begin
    Write(f,stek^.ch);
    stek:=stek^.next
  end;
  stek:=adr;
  while stek<>nil do
  begin
    adr:=stek^.next;
    dispose(stek);
    stek:=adr
  end;
  close(f);
end.

Leave a Comment

12 − = 8