program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
var
filename: string;
f: file;
m1, m2, n: integer;
buf1, buf2: integer;
i: integer;
begin
write('Enter file name: '); readln(fileName);
write('Enter begin of first block: '); readln(m1);
write('Enter begin of second block: '); readln(m2);
write('Enter size of blocks (bytes): '); readln(n);
if (abs(m1 - m2) < n) then begin writeln('Blocks are crossing.'); readln; exit; end;
assign(f, fileName);
reset(f, 1);
for i:= 0 to n - 1 do
begin
seek(f, m1 + i);
BlockRead(f, buf1, 1);
seek(f, m2 + i);
BlockRead(f, buf2, 1);
seek(f, m2 + i);
BlockWrite(f, buf1, 1);
seek(f, m1 + i);
BlockWrite(f, buf2, 1);
end;
close(f);
writeln('Press any key to continue....'); readln;
end.
Нетипизированный файл. Нужно оптимизировать
Код:
оптимизация заключается в том, что мне нужно заменить цикл,
Код:
for i:= 0 to n - 1 do
begin
seek(f, m1 + i);
BlockRead(f, buf1, 1);
seek(f, m2 + i);
BlockRead(f, buf2, 1);
seek(f, m2 + i);
BlockWrite(f, buf1, 1);
seek(f, m1 + i);
BlockWrite(f, buf2, 1);
begin
seek(f, m1 + i);
BlockRead(f, buf1, 1);
seek(f, m2 + i);
BlockRead(f, buf2, 1);
seek(f, m2 + i);
BlockWrite(f, buf1, 1);
seek(f, m1 + i);
BlockWrite(f, buf2, 1);
точнее сделать код без нее. Мне посоветовали задать буфер через массив. Помогите доделать программу, пожалуйста.
GetMem(Ptr2, n);
...
BlockRead(f, Ptr1^, n); //остальное соответственно
...
FreeMem(Ptr1);
FreeMem(Ptr2);