Пиши Дома Нужные Работы

Обратная связь

Чтобы минимизировать Тср, надо разместить данные в файле так, чтобы минимизиро- вать Т1, так как Т1 имеет больший коэффициент. Поэтому способразмещения в данных – удачный.

Где Т1 - время обработки файла по первому запросу, Т2 -время обработки файла по второму запросу.

Чтобы минимизировать Тср, надо разместить данные в файле так, чтобы минимизиро- вать Т1, так как Т1 имеет больший коэффициент. Поэтому способразмещения в данных – удачный.

3. При последовательном способе организации файла эффективность всегда зависит

от способа размещения информации (по какому ключу она упорядочена.), потому что всегда необходим поиск данных. Поэтому только прямой способ организации файлов позволяет избавиться от операции поиска информации.

В Турбо-Паскале добавлены три основные процедуры, облегчающие работу с типизированными файлами:

Procedure Seek(var f:Type_File; k:longint) – установить файл f на месте компоненты k;

Function FilePos(var f:Type_File):longint – определить позицию файла;

Function FileSize(var f:Type_File):longint – определить размер файла.

Использование этих процедур упрощает и ускоряет работу с файлами, но файл не становится прямым. Уже тот факт, что имеется процедура поиска Seek, которая ищет k-ю компоненту файла, говорит о том, что эта организация не является прямой.

При прямой организации системным способом устанавливается механизм связи между логической компонентой файла и ее местом во внешней памяти. Задавая значение ключа, непосредственно выбирается нужная компонента.

Например, это могло бы выглядеть так:

Read (f, ‘Иванов’, Р) – по ключу Иванов считать запись из файла f в переменную Р.

В этом случае фактически организуется ассоциативный поиск, то есть по ключу, включенному в запись.

В языках программирования, где предусмотрена работа с прямыми файлами, в описании файла указывается способ его организации. Например, в языке ПЛ/1 существует описание Sequential для последовательных файлов и Direct – для прямых файлов.



В языке Паскаль, с последовательным способом организации файлов, при использовании процедуры Seek выигрыш во времени происходит за счет режима параллельной работы устройств компьютера.

Так например, используя возможность одновременной работы процессора и дисковода, можно одновременно выполнять поиск данных на диске и обрабатывать информацию в Оперативной Памяти.

       
 
. . . Seek (f, k) {T поиска} Обработка Данных в ОП {T обработки} Read(f, P) {T чтения}
 
Последовательная работа устройств: Т = Т поиска + Т обработки + Т чтения   Параллельная работа устройств: Т = max(Т поиска, Т обработки) + Т чтения


. . .

 

 

Таким образом, в программе можно так разделить операцию «поиск» от операции «чтение», чтобы процессор не простаивал в ожидании необходимой порции данных. Другими словами, надо стараться поиск данных и их чтение разделить действием обработки, которое не связано с ожиданием этих данных.

Пример 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
reset(fved);

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
writeln('Оплаченные товары');

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
for i:=1 to m do

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
for j :=1 to n do

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)

 

 
 

 


Рис. Схема передвижения по последовательному файлу

к примеру 6а

 

Суммируя по столбцам в таблице, получим время запроса в примере 6а:

 

Тзапроса = n(n-1)(m-1/2)(Tсдвига +Тчтения) + m*n *Tчтения ≈ 2n*(n*m)*Тчтения

 

Если учесть, что полезное время передачи равно m*n *Tчтения, то дополнительное время в n раз больше полезного.

 
 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.