Скачать программы Все программы автора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] ) называется разыменование переменной (элемента массива). Большие двумерные массивы часто применяются при решении "сеточных" задач.
Пусть дана сетка, узлы которой пронумерованы двумя цифрами, каждая из цифр равна номеру узла в соответствующем направлении. При решении задачи требуется хранить значения некоторых функций в узлах, т. е. использовать элементы двумерных массивов. Значения индексов элементов показывают расположение узла на сетке. |