Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Двумерный массив [1..10000,1..10000]

Страницы: 1
Двумерный массив [1..10000,1..10000], возможно ли
Здравствуйте! Скорее всего моя проблема ужасно простая, но, тем не менее, я не в состоянии решить ее самостоятельно.
Итак, мне надо создать двумерный массив [1..z,1..z] при z=10000. Пишу: Сonst z=10000; Var m:array[1..z,1..z] of longint; Компилятор на это ругается "Error 22: Structure too large" т.е. как я понимаю слишком больной диапазон чисел для него. Отсюда вопрос: имеется ли решение требуемой задачи (т.е. можно ли всё-таки создать такой массив)?
Изменено: кирилл - 03.11.2010 15:49:30
Не знаю как в Turbo Pascal...
Но в Delphi есть динамические массивы...
Const
z=20000;

Var
m:array of array of longint;
begin
SetLength(m, z, z);
Sleep(7000);
Finalize(m);
end;

Правда комп. ложится.
У меня 2Гб опер. памяти, пробовал 20000х20000... Сработало...
Кто больше? smile:)
Изменено: Valera - 03.11.2010 16:30:41
В Turbo Pascal нет динамических массивов. Но их можно создать самому с использованием указателей.

кирилл,
Какая у Вас стоит изначально задача? Зачем нужен такой большой массив?
Иван Седаков, я думаю что моя задача решаема без такого массива, но тут принципиально решить ее (в плане алгоритма) самому, а единственное решение, которое я смог изобрести требует такого двумерного массива. Ну или если есть возможность из двух одномерных массивов сделать двумерный - тоже неплохо было бы.
duffman,
Тогда, итог такой. Создать в TP массив такого размера не возможно. Да и сама эта идея не правильная.
Для решения Вашей задачи нужно искать другие пути обработки данных частями.
Кстати, если Вы действительно имеете таки большие массивы данных, то их можно хранить в файле и от туда читать порциями, либо забивать оперативную память, динамически расширяемой структурой данных.

В любом случае, что бы что-то советовать, то нужно знать Вашу задачу
Имейте ввиду следующее:
Под переменную типа longint выделяется 4 байта.
Если Вы хотите создать массив 10000x10000, то это получается 10 000*10 000* 4 байт = 400 000 000 байт = 381 МБ
Так как Turbo Pascal запускается в сеансе MSDOS (то есть в реальном режиме работы процессора), то программе в этом случае выделяется только 1 МБ оперативной памяти!!!
Изменено: Иван Седаков - 04.11.2010 23:22:35
Сделай на дельфи, может что выйдет.
P.s Как жалко было смотреть на ноуты в магазине, с установленным msdos
А почему жалко? Зато не надо переплачивать за винду, которую можно потом будет скачать и установить )
Иван Седаков, мало того что 1 мб под Досом, так еще и на сам массив ограничение Паскаля - 64 кб всего лишь
Цитата
rozpants пишет:
А почему жалко? Зато не надо переплачивать за винду, которую можно потом будет скачать и установить )

Да там и так цены огого), без WindЫ
Изменено: mihail filatov - 28.11.2010 21:04:20
А с виндой было б дороже)
rozpants, соглашусь, лучше брать ноут с досом или линуксом
Карина Царь, а где подробней можно про 64 почитать?
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)