Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нетипизированный файл. Нужно оптимизировать

57K
06 мая 2011 года
Torah
12 / / 11.10.2010
В задании требуется поменять местами в файле 2 блока размером N байт, начинающийся с m1 и m2 байта. Если блоки пересекаются, выдать сообщение об ошибке.

Код:
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);


точнее сделать код без нее. Мне посоветовали задать буфер через массив. Помогите доделать программу, пожалуйста.
14
06 мая 2011 года
Phodopus
3.3K / / 19.06.2008
GetMem(Ptr1, n);
GetMem(Ptr2, n);
...
BlockRead(f, Ptr1^, n); //остальное соответственно
...
FreeMem(Ptr1);
FreeMem(Ptr2);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог