{ y,x - індекси у 2-вимірному масиві. Функція повертає індекс у 1-вимірному масиві }
Function NewIndex(y, x : integer) : integer;
var i, d: integer;
begin
d:=0;
for i:=1 to y-1 do d:=d+XM-i+1;
NewIndex:=d+x-y+1; end;
{==== Функція запису в стисле представлення масиву ==== }
{y, x - індекси у 2-вимірному масиві, value - записуване значення. Функція повертає}
{ записуване значення або – 0, якщо (x,y) задають індекси фонового елемента. }
Function PutTab(y,x,value : integer) : integer;
begin
if x<y then PutTab:=0
else begin
arrp[NewIndex(y,x)]:=value;
PutTab:=value; end;
end;
{==== Функція вибірки зі стислого представлення масиву ==== }
{ y, x - індекси в 2-мірному масиві. Функція повертає вилайливе значення }
Function GetTab(y,x: integer) : integer;
begin
if x<y then GetTab:=0
else GetTab:=arrp[NewIndex(y,x)];
end;
{============= Головна програма =================== }
Var
x, y : integer; { Індекси у 2-вимірному масиві }
k, h: integer;
Моменти часу
tar1, tar2, taw1, taw2 : longint;
tbr1, tbr2, tbw1, tbw2 : longint;
begin
{===== Частина 1. Перевірка формування масиву ====== }
XM:=10;
{ Запис елементів у 1-вимірний масив }
k:=1;
for y:=1 to XM do
for x:=y to XM do begin
h:=PutTab(y,x,k); k:=k+1;
end;
{ Роздруківка матриці }
writeln('===== Матриця =====');
for y:=1 to XM do begin
for x:=1 to XM do write(GetTab(y,x):3);
writeln;
end;
{ Роздруківка внутрішнього представлення матриці }
writeln('===== Матриця (внутрішнє подання) =====');
for y:=1 to 55 do write(arrp[y]:4);
writeln; writeln;
{========= Частина 2. Хронометраж ================ }
XM:=100;
{ Заповнення нулями 2-вимірного масиву }
for y:=1 to XM do
for x:=1 to XM do arru[y][x]:=0;
{ Запис елементів у 2-вимірний масив }
k:=1;
taw1:=GetTic;
for y:=1 to XM do
for x:=y to XM do begin
arru[y][x]:=k; k:=k+1;
end;
taw2:=GetTic;
{ Вибірка елементів з 2-вимірного масиву }
tar1:=GetTic;
for y:=1 to XM do
for x:=1 to XM do h:=arru[y][x];
tar2:=GetTic;
{ Запис елементів у 1-вимірний масив }
k:=1;
tbw1:=GetTic;
for y:=1 to XM do
for x:=y to XM do begin
h:=PutTab(y,x,k); k:=k+1;
end;
tbw2:=GetTic;
{ Вибірка елементів з 1-вимірного масиву }
tbr1:=GetTic;
for y:=1 to XM do
for x:=1 to XM do h:=GetTab(y,x);
tbr2:=GetTic;
{ Друк результатів хронометражу }
writeln('Повнодоступний варіант (запис)');
writeln('Початок - ',taw1);
writeln('Кінець - ',taw2);
writeln('Повнодоступний варіант (читання)');
writeln('Початок - ',tar1);
writeln('Кінець - ',tar2);
writeln;
writeln('Стислий варіант (запис)');
writeln('Початок - ',tbw1);
writeln('Кінець - ',tbw2);
writeln('Стислий варіант (читання)');
writeln('Початок - ',tbr1);
writeln('Кінець - ',tbr2);
end.
2.5.2. Результат роботи програми
===== Матриця =====
1 2 3 4 5 6 7 8 9 10
0 11 12 13 14 15 16 17 18 19
0 0 20 21 22 23 24 25 26 27
0 0 0 28 29 30 31 32 33 34
0 0 0 0 35 36 37 38 39 40
0 0 0 0 0 41 42 43 44 45
0 0 0 0 0 0 46 47 48 49
0 0 0 0 0 0 0 50 51 52
0 0 0 0 0 0 0 0 53 54
0 0 0 0 0 0 0 0 0 55
===== Матриця (внутр.представлення) =====
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
Повнодоступний варіант (запис)
Початок - 1050209
Кінець - 1050210
Повнодоступний варіант (читання)
Початок - 1050210
Кінець - 1050211
Стислий варіант (запис)
Початок - 1050211
Кінець - 1050229
Стислий варіант (читання)
Початок - 1050229
Кінець - 1050247
ДОДАТОК
Function GetTic : longint
Функція повертає поточне значення лічильника тіків таймера ПЕОМ.
Тік таймера - інтервал часу, що дорівнює приблизно 55 мсек. Поточне значення лічильника тіків визначається від моменту 0 година 0 хв 0 сек.
Визначена в Unit DataStr.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.