Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблемы с массивом
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
looogle
Доброго времени суток!

Решаю задачу, в которой нужен массив с таким диапазоном [1..1015]
Пишу так:
mass = array[int64] of int64;


Пишет, что слишком большой диапазон. Как с этим справится?
IUnknown
Цитата
Как с этим справится?
Пересмотреть алгоритм решения. Максимальный размер массива для 16-битных компиляторов = 64К, а в более современных (например, в FPC) существует ограничение на количество элементов в массиве (их не может быть больше, чем high(PTRINT), то есть 2147483647) независимо от размера каждого элемента.
looogle
Спасибо. smile.gif
Уже начинаю понимать в чём подвох в задаче (в принципе в этом тоже подвох)
ВеликийПавел
IUnknown полностью с вами согласен!.
можно попытаться сделать задачу с помощью динамической памяти. Но наверное в задаче есть разумное решение.
IUnknown
Цитата
можно попытаться сделать задачу с помощью динамической памяти
Сколько надо динамической памяти для выделения места под 1015 элементов типа Int64, представляем себе? 8 * 1015 байт = 8 петабайт (8 миллионов Гб) smile.gif Я что-то сомневаюсь, чтоб столько памяти было доступно...
Krjuger
Да и вообще весьма сомнительна возможность работы с таким массивом.Даже если его побитово заполнять все равно 125 терабайт это перебор.С другой стороны если разбивать на части и отдельно делать какие нибудь манипуляции,то на это уйдут далеко не минуты.Странные какие то запросы.
Гость
Скажите пожалуйста, нужно ли объявлять массив port.
Что неправильно в программе? И как работать с портом лтп1, не могу найтти полного описания.
Код

var a:real;
   a:=port[378];
writeln(a);
end.
Krjuger
Неправильно то,что массив в паскале обьявляется совсем по другому.
a = array[1..378] of real;
Еще неправильно то,что нету bеgin...
TarasBer
А он не пытается объявить a как массив.
Он пытается работать с "массивом" Port.
В ТурбоПасе его объявлять не надо, он вшит в язык.
В 32-битных версиях он работать, очевидно, не может.
Гость
Дело в том что я хочу считать данные с порта лтп1. Взамен я получаю error121: invalid qualifier и курсор в начале индеса массива port.
Как объявить массив port, если я использую только один элемент.
Код
var a:real;
begin
   a:=port[$378];
writeln(a);
end.
TarasBer
Если у тебя турбопас, то проблем быть не должно.
Если у тебя ФПЦ, выставь режим турбопаса.
Если у тебя что-то другое, то никак ничего не сделать.
Гость
А массив port объявлять в var нужно?
TarasBer
В ТурбоПасе его объявлять не надо, он вшит в язык.
В ТурбоПасе его объявлять не надо, он вшит в язык.
В ТурбоПасе его объявлять не надо, он вшит в язык.
В ТурбоПасе его объявлять не надо, он вшит в язык.
В ТурбоПасе его объявлять не надо, он вшит в язык.
В ТурбоПасе его объявлять не надо, он вшит в язык.
В ТурбоПасе его объявлять не надо, он вшит в язык.
Гость
А я в турбопасе и работаю, а ошибка все равно есть.
TarasBer
А у меня в турбопасе это нормально компилируется.
Картинку с окном "о программе", пожалуйста.
Нажмите для просмотра прикрепленного файла
Krjuger
У меня на 64 рязрядной семерке под Dosbox тоже компилируется.
IUnknown
Цитата
Если у тебя ФПЦ, выставь режим турбопаса.
Это не разрешит работу с Port-ами. Параграф 7.2.1 файла user.pdf (из документации) говорит об этом открытым текстом.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.