|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.10.2006, 14:12 | #1 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
массивы более 64 кб
перенесено со старого форума. сообщение от Пандора.
Подскажите, как запихнуть в программу массив размером более 64 кБ? перенесено со старого форума. сообщение от rpy3uH. это по определению невозможно это как то решают с помощью оверлеев... больше я ничего не знаю Если держаться подальше от тех мес перенесено со старого форума. сообщение от caskov. Проблема решается с помощью использования динамической памяти. Допустим нужно создать двумерный массив 200*300 типа integer; он тебует 200*300*2=120000 байт для размещения. Заведем массив нетипизированных указателей: var A:array[1..200] of pointer; выделим память под него for i:=1 to 200 do GetMem(A[i],2*300); {2 байта-размер типа integer} далее чтобы получить доступ конкретно к компонентам иассива нужно вычислить адрес - [сегмент:смещение] var RealPointer:^real; i,j:integer; RealPointer:=ptr(Seg(A[i]^),Ofs(A[i]^)+(j-1)*2) здесь функция ptr() возвращает указатель (j-1)*2 - прибавка к смещению Ofs(A[i]^) таким образом элемент [i,j] адресован. С одномерным массивом еще проще. А для двумерного я, например использую следующие процедуры записи/чтения function elem(i:word;j: pointer):Integer; var pr:^Integer; begin pr:=ptr(seg(j^),ofs(j^)+(i-1)*2); elem:=pr^; end; procedure putelem(i:word;j: pointer;x:Integer); var pr:^Integer; begin pr:=ptr(seg(j^),ofs(j^)+(i-1)*2); pr^:=x; end; Например записать в [27,45] можно с помощью процедуры putelem(27,A[45]) а прочитать этот же элемент - с помощью функции elem(27,A[45]). перенесено со старого форума. сообщение от rpy3uH. нормально вроде... можно просто элементы массива скидывать в файл перенесено со старого форума. сообщение от tearnn. А еще проще создать динамический список, где каждый элемент будет указывать кроме следующего за ним, еще на один такой же список, получится что - то вроде массива, только перевернутого. а написать процедуры(функции), для доступа к элементам этого "Массива" по индексам, мне кажется еще проще. А вообще эта задача описана в любой мало - мальски путной книге по Турбику. Остальное уже сила воображения! Успехов Да функции эти будут конечно подлиннее чем в примере выше, но зато более удобочитаемые.(Без всяких ORD'в, SEG'в и прочего). А еще один плюс в том, что при желании можно будет увеличить этот "массив", подцепив нужное колличество элементов. |
30.10.2006, 14:25 | #2 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
перенесено со старого форума. сообщение от Пандора.
Подскажите, как запихнуть в программу массив размером более 64 кБ? перенесено со старого форума. сообщение от Oldy. Попробуйте создавать их динамически, в куче - Heap (GetMem, FreeMem). Работать с ними нужно через указатели. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Музыка - и ничего более... | SuperVisor | Свободное общение | 55 | 10.01.2009 22:31 |
СЧЁТЕСЛИ по 2 и более критериям | Gadar | Microsoft Office Excel | 6 | 27.05.2008 09:25 |
Более 4 миллиардов | MAKTE | Общие вопросы C/C++ | 2 | 16.05.2008 20:11 |
Два и более условий финкции If | MAKEDON | Общие вопросы Delphi | 7 | 20.01.2008 09:39 |