Процедура seek(f,n) устанавливает указатель в открытом файле f на компонент с номером n (нумерация компонентов идет от 0). Затем значение компонента может быть считано.
Пример 4. На диске Е в каталоге АВС есть файл целых чисел а2.int. Необходимо поменять местами его максимальный и минимальный элементы.
Ниже приведены два варианта этой программы. В первом после считывания компонентов файла в массив происходит поиск минимального и максимального элементов массива и их индексов. Затем максимальное и минимальное значение перезаписываются в файл.
Вторая программа работает по другому алгоритму. Организован один цикл, в котором очередное значение считывается в переменную. Здесь же осуществляется поиск минимального и максимального элементов среди компонентов файла и их индексов. Затем происходит перезапись в файл максимального и минимального значений.
Вариант 1:
program var_1;
Var
f: file of integer;
i,max, nmax, min, nmin:integer;
a: array [0..200] of integer;
Begin
assign (f,’e:\abc\a2.int’);
reset (f);
{Считываем компоненты файла в массив а.}
|
|
f or i:=0 to filesize (f)-1 do read (f,a[i]);
{Начальное присваивание максимального и}
{Минимального элементов массива и их индексов}
Max:=a[0]; nmax:=0;
Min:=a[0]; nmin:=0;
{Оновной цикл для поиска максимального и}
{минимального элементов массива и их
индексов}
for i:=1 to filesize(f)-1 do
Begin
If a[i]>max then
begin
max:=a[i];
nmax:=i
end;
if a[i]<min then
begin
min:=a[i];
nmin:=i
end;
end;
{Перезапись максимального и
минимального значений в файл}
seek (f,nmax);
write (f,min);
seek (f,nmin);
write (max);
close (f)
End.
Вариант 2:
program var_2;
Var
f:=file of integer;
a, i, max, nmax, min, nmin:integer;
Begin
assign (f,’e:\abc\a12.int’);
reset (f);
for i:=0 to filesize (f)-1 do
begin
read (f,a);
if i:=0 then
{Начальное присваивание максимального и}
{минимального значений и его индекса}
begin
Max:=a; nmax:=I;
Min:=a; nmin:=I;
end
Else
Begin
{Сравнение текущего значения с
максимальным (минимальным)}
If max<a then
begin
Max:=a;
Nmax:=i
end;
if min>a then
Begin
Min:=a;
Nmin:=i
end;
end;
end;
{Перезапись максимального и
минимального значений в файл}
seek (f,nmax);
write (f,min);
seek (f,nmin);
write (f,max);
End.