Решаю задачу, в которой нужен массив с таким диапазоном [1..1015] Пишу так:
mass = array[int64] of int64;
Пишет, что слишком большой диапазон. Как с этим справится?
IUnknown
4.11.2011 20:20
Цитата
Как с этим справится?
Пересмотреть алгоритм решения. Максимальный размер массива для 16-битных компиляторов = 64К, а в более современных (например, в FPC) существует ограничение на количество элементов в массиве (их не может быть больше, чем high(PTRINT), то есть 2147483647) независимо от размера каждого элемента.
looogle
4.11.2011 22:11
Спасибо. Уже начинаю понимать в чём подвох в задаче (в принципе в этом тоже подвох)
ВеликийПавел
5.11.2011 0:13
IUnknown полностью с вами согласен!. можно попытаться сделать задачу с помощью динамической памяти. Но наверное в задаче есть разумное решение.
IUnknown
5.11.2011 0:17
Цитата
можно попытаться сделать задачу с помощью динамической памяти
Сколько надо динамической памяти для выделения места под 1015 элементов типа Int64, представляем себе? 8 * 1015 байт = 8 петабайт (8 миллионов Гб) Я что-то сомневаюсь, чтоб столько памяти было доступно...
Krjuger
5.11.2011 0:28
Да и вообще весьма сомнительна возможность работы с таким массивом.Даже если его побитово заполнять все равно 125 терабайт это перебор.С другой стороны если разбивать на части и отдельно делать какие нибудь манипуляции,то на это уйдут далеко не минуты.Странные какие то запросы.
Гость
12.01.2012 18:43
Скажите пожалуйста, нужно ли объявлять массив port. Что неправильно в программе? И как работать с портом лтп1, не могу найтти полного описания.
Код
var a:real; a:=port[378]; writeln(a); end.
Krjuger
12.01.2012 19:10
Неправильно то,что массив в паскале обьявляется совсем по другому. a = array[1..378] of real; Еще неправильно то,что нету bеgin...
TarasBer
12.01.2012 19:16
А он не пытается объявить a как массив. Он пытается работать с "массивом" Port. В ТурбоПасе его объявлять не надо, он вшит в язык. В 32-битных версиях он работать, очевидно, не может.
Гость
12.01.2012 19:19
Дело в том что я хочу считать данные с порта лтп1. Взамен я получаю error121: invalid qualifier и курсор в начале индеса массива port. Как объявить массив port, если я использую только один элемент.
Код
var a:real; begin a:=port[$378]; writeln(a); end.
TarasBer
12.01.2012 19:45
Если у тебя турбопас, то проблем быть не должно. Если у тебя ФПЦ, выставь режим турбопаса. Если у тебя что-то другое, то никак ничего не сделать.
Гость
12.01.2012 19:47
А массив port объявлять в var нужно?
TarasBer
12.01.2012 19:51
В ТурбоПасе его объявлять не надо, он вшит в язык. В ТурбоПасе его объявлять не надо, он вшит в язык. В ТурбоПасе его объявлять не надо, он вшит в язык. В ТурбоПасе его объявлять не надо, он вшит в язык. В ТурбоПасе его объявлять не надо, он вшит в язык. В ТурбоПасе его объявлять не надо, он вшит в язык. В ТурбоПасе его объявлять не надо, он вшит в язык.
Гость
12.01.2012 19:53
А я в турбопасе и работаю, а ошибка все равно есть.