Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 30.10.2006, 15:12   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Адрес: Химки
Сообщений: 13,513
Репутация: 2719
По умолчанию массивы более 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'в и прочего). А еще один плюс в том, что при желании можно будет увеличить этот "массив", подцепив нужное колличество элементов.
Alar вне форума   Ответить с цитированием
Старый 30.10.2006, 15:25   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Адрес: Химки
Сообщений: 13,513
Репутация: 2719
По умолчанию

перенесено со старого форума. сообщение от Пандора.

Подскажите, как запихнуть в программу массив размером более 64 кБ?

перенесено со старого форума. сообщение от Oldy.

Попробуйте создавать их динамически, в куче - Heap (GetMem, FreeMem). Работать с ними нужно через указатели.
Alar вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Музыка - и ничего более... SuperVisor Свободное общение 55 10.01.2009 23: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 10:39


09:44.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru