Вообщем делаю прогу расчёта тепловых полей в электронном устройстве(плата с элементами). Нужны трёхмерные массивы. Числа в них должны быть вещественного типа (real, single и т.д.). Проблема вот в чём: в паскале переменные не могут занимать в памяти более 64 кбайт(пишет ошибку). У меня получается создавать такие массивы, но там максимум 25 чисел по каждому измерению(25х25х25). Этого мало, так как суть задачи разбить объект на как можно меньшие области. Посоветуйте как это ограничение обойти. На крайний случай посоветуйте какой-нибудь язык.
volvo
3.12.2008 20:44
Цитата
Числа в них должны быть вещественного типа (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;
Неуч
4.12.2008 13:51
Спасибо большое. Последовал вашему последнему совету - поставил FPC. Думать над оптимизацией кода уже нет времени, преподу сдавать скоро
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.