. . . Обработка Данных
в ОП {T
обработки} Read(f, P)
{T чтения} Последовательная
работа устройств: Т
= Т поиска + Т обработки + Т чтения
Параллельная
работа устройств: Т
= max(Т
поиска, Т обработки) + Т чтенияSeek (f, k) {t поиска}
. . .
Таким образом, в программе можно так разделить операцию «поиск» от операции «чтение», чтобы процессор не простаивал в ожидании необходимой порции данных. Другими словами, надо стараться поиск данных и их чтение разделить действием обработки, которое не связано с ожиданием этих данных.
Пример 1. Создание файла.
{Элемент файла - вся таблица}
program vedom (input,output,fved);
const max = 100; nax = 10;
type ved = array [1..max,1..nax] of real;
var fved : file of ved; D : ved;
fv:text;
S,S1, dmax :real;
m, i : 1..max; n,j : 1..nax;
begin {Создание типизированного файла fved из текстового fv}
assign ( fved,'c:\ved.txt');
writeln('Введите размер таблицы: число строк и столбцов');
read(m,n);
assign(fv,'c:\v.txt');
reset(fv);
rewrite(fved);
for i:=1 to m do
begin
for j:=1 to n do
read (fv,d[i,j]);
readln(fv)
end;
write(fved,D); {Записывается весь массив как один элемент}
close(fved);
close(fv);
Пример 2. Запрос по покупателям.
Прямой доступ к
элементам массива.
Тпоиска
= 0 Vоп
= max*nax
read(fved,D);
writeln('Bведите dmax');
readln(dmax);
{ Покупатели, долг которых больше dmax}
writeln ('Покупатели, у которых долг больше',dmax)
for i:=1 to m do
begin S := 0;
for j:=1 to n do
S:= S + d[i,j];
If S > dmax then writeln(i)
end;
Пример 3. Запрос по товарам.
{Запрос об оплаченных товарах }
Прямой доступ к
элементам массива.
Тпоиска
= 0 Vоп
= max*nax
reset(fved);
for j :=1 to n do
begin S1:=0;
for i:=1 to n do
S1 := S1 + d[i,j];
if S1 = 0 then writeln(j)
end
end.
Пример 4.
{Элемент файла - строка в ведомости}
program vedom_D(fved);
const max = 10;
type str = array [1..nax] of real;
var fved : file of str; D : str;
S, dmax :real;
m,n,i,j : 1..max;
begin {Покупатели, долг которых больше dmax}
...
reset(fved);
.
Тпоиска
= 0 Vоп
= nax
begin read (fved, D); S := 0;
for j:=1 to n do
S:= S + D[j];
If S > dmax then writeln(i)
end
end.
Пример 5.
{Элемент файла - элемент таблицы}
{Упорядоченность по покупателям, запрос по покупателям}
program vedom_d(fved);
var fved : file of real;
d :real;
m,n,i,j : integer;
begin {Покупатели, долг которых больше dmax}
...
reset(fved);
Тпоиска
= 0 Vоп
= 1
begin S:=0;
for i:=1 to n do
begin read (fved,d);
S := S + d;
end;
if S1 > dmax then writeln(j)
end
end.
Пример 6a.
d d .
. . d d d .
. . d .
. . d d .
. . d P1
P2
Pn
{Элемент файла - элемент таблицы}
{Упорядоченность по покупателям, запрос по товарам}
program vedom_d(fved);
var fved : file of real;
d :real;
m,n,i,j,l : integer;
begin {Поиск оплаченных товаров }
...
for j :=1 to n do
{Просмотр j-го товара}
begin
reset(fved); {В начало файла}
{Сдвиг к 1-му элементу -го товара}
k:=1;
while k<j do read(fved, d);
S:=0;
for i:=1 to m do
{Выбор информации о j-м товаре}
begin read (fved,d);
S := S + d;
for l:=1 to m do
{Скачок на (n-1) элементов}
read (fved,d);
end;
if S = 0 then writeln(j)
end
end.
Пример 6b.
{Прямой способ организации файла}
{Элемент файла - элемент таблицы}
{Упорядоченность по покупателям, запрос по товарам}
begin{Поиск оплаченных товаров}
. . .
for j:=1 to n do
begin {к началу j-го товара}
seek(fved, j-1);
S:=0;
for i:=1 to m do
begin
read(fved,d);
S:=S+d;
seek(fved, FilePos(fved)+n-1)
end
end;
if S=0 then writeln(j)