Помощь - Поиск - Пользователи - Календарь
Полная версия: Многомерный массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Неуч
Вообщем делаю прогу расчёта тепловых полей в электронном устройстве(плата с элементами). Нужны трёхмерные массивы. Числа в них должны быть вещественного типа (real, single и т.д.). Проблема вот в чём: в паскале переменные не могут занимать в памяти более 64 кбайт(пишет ошибку). У меня получается создавать такие массивы, но там максимум 25 чисел по каждому измерению(25х25х25). Этого мало, так как суть задачи разбить объект на как можно меньшие области. Посоветуйте как это ограничение обойти. На крайний случай посоветуйте какой-нибудь язык. blink.gif
volvo
Цитата
Числа в них должны быть вещественного типа (real, single и т.д.)
Лучше - single... Во-первых, быстрее, чем real, во-вторых - меньше размером и большей емкости.

Цитата
Посоветуйте как это ограничение обойти
Это смотря, какого размера тебе желательно делать трехмерный массив... Если до 50*50*50 устроит, то могу предложить разместить его в дин. памяти (она же - "куча"):

type
pfirst = ^first;
first =
array[1 .. (maxint div 2) div sizeof(single)] of single;
psecond = ^second;
second =
array[1 .. (maxint div 2) div sizeof(pfirst)] of pfirst;
pthird = ^third;
third =
array[1 .. (maxint div 2) div sizeof(psecond)] of psecond;

var
parr: pthird;
i, j, k: integer;
const size = 50;

begin
writeln(memavail);

getmem(parr, size*sizeof(psecond));
for i := 1 to size do begin
getmem(parr^[i], size*sizeof(pfirst));
for j := 1 to size do begin
getmem(parr^[i]^[j], size*sizeof(single));
for k := 1 to size do begin
parr^[i]^[j]^[k] := 10;
end;
end;
end;

writeln(memavail);
{ ... }

end.
Турбо-Паскаль выделяет 50*50*50, и кое-что из памяти еще даже тебе остается. Если и этого мало, то выходов два:
1) пересмотреть алгоритм, возможно, тебе не нужно хранить такие объемы постоянно в памяти
2) перейти на 32-битные компиляторы, к примеру, тот же FPC спокойно работает с описанием:
const
size = 750;
var
arr: array[1 .. size, 1 .. size, 1 .. size] of single;
Неуч
Спасибо большое. Последовал вашему последнему совету - поставил FPC. Думать над оптимизацией кода уже нет времени, преподу сдавать скоро good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.