|
Вопрос # 1 109/ вопрос открыт / |
|
Здравствуйте!
В Турбо Паскаль нужно по условию задачи задать массив размерностью 1000*1000. Я перепробовал разные варианты. Выдает ошибку 22 (слишком большая структура).
Динамических массивов В ТР нет. Подскажите пожалуйста, как мне поступить.
 |
Вопрос задал: puporev (статус: 2-ой класс)
Вопрос отправлен: 9 ноября 2007, 10:21
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, puporev!
Если у Вас не получается стандартная конструкция кода
var a: array[0..999, 0..999]: Integer;
то попробуйте "поиграться" с распределением памяти кучи с помощью GetMem.
type TBigArray = array[0..999, 0..999] of Integer;
var a: ^TBigArray;
begin
GetMem(a, SizeOf(TBigArray));
// далее используете указатель ^ на массив a
a^[0]:=0;
a^[1]:=1;
// и так далее
FreeMem(a);
end;
Так же можно попробовать использовать вместо GetMem() -> New(), а вместо FreeMem() -> Dispose().
Я точно не помню, что именно присутствует в ТурбоПаскале, но однознаяно могу сказать, что одно из них точно есть в ТурбоПаскале версии 3.02а, бо сам их там юзал.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 9 ноября 2007, 15:09
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 26 марта 2008, 19:49; участников в обсуждении: 4.
|
puporev (статус: 2-ой класс), 9 ноября 2007, 16:16 [#1]:
Здравствуйте Feniks.
Не получается. Как разрешал максимально [1..181,1..181], так и разрешает. Письмо Вам отправил, но в ответ от автомата пришло малопонятное сообщение, поэтому я не уверен, что письмо дошло, и пишу здесь.
|
|
Feniks (статус: Бакалавр), 9 ноября 2007, 17:13 [#2]:
Я не знаю на какой там автомат Вы отправляли мне письмо. Видимо надо было использовать пулемет... 
И я не экстрасен, и не могу знать, что именно у Вас не получается, какие и где ошибки. Приведите весь кусок кода. В ТурбоПаскале точно есть динамическая память и указатели. Какой у Вас ТурбоПаскаль, какая версия ? Попробуйте поискать в хелпе эти функци. И поищите директивы компилятора, это строки вида {$R+}, т.е. они пишутся в фигурных скобках и с долларом. Возможно есть такая директива для компиляции больших массивов или выделения памяти для них.
А так же можете попробовать поискать тут:
http://www.pascaler.ru/
http://pascal.pud.ru/
http://pasc.al.ru/
|
|
Вадим К (статус: Академик), 9 ноября 2007, 17:41 [#4]:
В турбопаскале так просто создать такой большой массив нельзя. ведь даже если элементы будут типа byte, то такой массив займёт около мегабайта. а в Досе прикладная программа без специальных "расширителей памяти" не может выделить больше 640 килобайт. Мало того, нельзя за один раз выделять больше 64килобайт. Вы поможе делаете массив типа Integer (а он под досом и турбопаскалем имел размер 2 байта) - вот и получается размер 181на 181 (181*181*2 = 65522)
Может вы назвёте причину, по которой вам под турбопаскалем понадобились такие большие массивы?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
puporev (статус: 2-ой класс), 9 ноября 2007, 18:02 [#5]:
Спасибо вам Feniks и Вадим за участие. Скорее всего в задаче была опечатка, т.к. речь там шла о листе бумаги в клетку, а я не встречал листов 1000*1000 клеток. Кстати директива $M не поможет, что видно из сообщения Вадима. На письма не отвечаю, потому что на тот адрес, который выдается для ответа у меня письма не идут. Еще раз спасибо. До встречи на сайте.
|
|
Jugerbot (статус: Посетитель), 26 марта 2008, 19:21 [#6]:
А ларчик просто открывался.
Пишем:
type
b=array[0..999] of integer;
....
var
a:array[0..999] of ^a;
обращаться к массиву
a[x]^[y]
|
|
Jugerbot (статус: Посетитель), 26 марта 2008, 19:49 [#7]:
Прошу прощенья.
...
var
a:array[0..999] of ^b;
...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|