TURBO PASCAL |
Новости |
1. 10. 5.
Работа с большими массивами
Поскольку суммарный размер всех
переменных, описанных
в программе, не
может превышать длины сегмента ( 64 К ),
то использование массивов больших
размеров вызывает определенные трудности.
Опишем известный способ "разбиения"
двумерного массива с использованием
переменных типа ссылка. program Big_Mas; CONST N1= 30; N2= 50; type M1= array
[1 . . N1
] of REAL; { тип M1 -
массив переменных вещественного типа}
M2= array[1..N2] of ^M1; {
тип M2 - массив ссылок на начальные
адреса
элементов
массивов типа M1} var
a1, a2: M2; {
двумерные массивы N1xN2 переменных
вещественного типа }
i, j: word; BEGIN for i:=1 to N2 do New(a1[i]);{ размещение
массива
в
оперативной
памяти } for i:=1 to N2 do New(a2[i]); for j:= 1
to N1 do for i:= 1
to N2 do begin
a1[i]^[j]:= j + Sin(Pi*i/N2);
{
пример
расчета
значений }
a2[i]^[j]:=
j - Cos(Pi*i/N2)
{
элементов двумерных массивов }
end; for i:= 1 to N2 do
Dispose(a1[i]); { освобождение оперативной
памяти } for i:= 1 to N2 do
Dispose(a2[i]);
Readln; END.
Таким образом в оперативной памяти
отводится место не под двумерные массивы
"a1" и "a2" размером N1xN2, а под одномерные массивы (размером
N2) адресов первых элементов линейных
массивов (размером N1). Операция
a1[i]^[j] ( a2[i]^[j] ) называется
разыменование переменной (элемента массива).
Большие двумерные массивы часто
применяются при решении "сеточных"
задач. 1, 1
1, 2 1, 3
1, 4
Пусть дана сетка, узлы
которой пронумерованы
*
*
* * двумя
цифрами, каждая из
цифр равна номеру узла 2, 1
2, 2 2,
3
2, 4 в
соответствующем направлении.
*
*
* *
При решении задачи требуется хранить
значения 3, 1
3, 2 3,
3
3, 4
некоторых функций в узлах,
т. е. использовать
*
*
*
* элементы двумерных
массивов. Значения
индексов
элементов показывают расположение узла
на сетке. |
(с) Все права защищены. По всем интересующим вопросам прошу писать электронный адрес |