Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> N-мернный динамический массив, Как создать? 
:(
    Опции темы
ivan219
Дата 7.2.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(Sunvas @  7.2.2007,  22:11 Найти цитируемый пост)
неудобно будет тогда работать с таким массивом - ведь все обращения к массиву при дется делать функциями/процедурами для записи/чтения данных из файла.

Вовсе нет тебе надо будет создать динамический массив и в нём работать, а когда нужно будет сделать сброс ,то сохранить в файл.
Ну это как вариант если что более универсального не найдёшь.

Добавлено @ 23:25 
А какой тип данных будет в массиве smile

Добавлено @ 23:33 
MetalFan, Ему надо:
Цитата(Sunvas @  7.2.2007,  16:04 Найти цитируемый пост)
N вводит пользователь

А в твоём коде есть привязка обращения к массиву.
Код

lVarArray[5,5,5,5] := 10;

Как это динамически сделать smile 
PM MAIL ICQ   Вверх
MetalFan
Дата 7.2.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



ivan219, а что, фантазия/справка не работает? 
я привел пример создания 4х-мерного ВарМассива по 11 элементов в каждом измерении. 
а как обращаться - это уже частность. как хошь, так и обращайся.
з.ы. например с пом. VarArrayGet


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Sunvas
Дата 7.2.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(ivan219 @  7.2.2007,  23:21 Найти цитируемый пост)
А какой тип данных будет в массиве

Пока планируеться Byte.
Единственное, что меня не устраивает в примере MetalFan-а, так это типа Variant - слишком много памяти от ест.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
ivan219
Дата 8.2.2007, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(MetalFan @  7.2.2007,  23:40 Найти цитируемый пост)
а как обращаться - это уже частность

Ну ладно ладно не знаю эти Вар массивы так что спорить не буду smile 
Просто меня смутила эта запись:
Код

lVarArray[5,5,5,5] := 10;

Ведь динамически ты её не изменишь smile тут обращение только к 4 элементам а если их будет 5 уже не прокатит smile 


Sunvas, А что если заместо файла использовать память ведь управление массивом занимается система а что тебе мешает на прямую работать с памятью тогда можно как хочешь сделать smile  smile

Добавлено @ 00:25 
Выделить память под это дело легко посчитать сколько ейчеик  в массиве, потом разбить память на измерения скажем если 150 ейчеек т.е. 50 измерений по 3 значения то делаем так:
Код

Выделяем память под 150байт.
1..150 яйчейки памяти
и потом програмно делим
1,2,3 байт 1 измерение
4,5,6 байт 2 измерение
.
.
147,148,150  байт 50 измерения
после чего заносим вних значения.


Идея помойку лучше чем с файлом  smile 
PM MAIL ICQ   Вверх
ivan219
Дата 8.2.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Да и по поводу файла можно реализовать отображение файла в память там даже тип Byte а не String  можно использовать.
PM MAIL ICQ   Вверх
MetalFan
Дата 8.2.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата

Единственное, что меня не устраивает в примере MetalFan-а, так это типа Variant - слишком много памяти от ест.

ну тут либо универсальность решения, либо извращаться и изобретать что-то свое - быстрое и красивое ;)

Цитата(ivan219 @  8.2.2007,  00:17 Найти цитируемый пост)
Ведь динамически ты её не изменишь smile тут обращение только к 4 элементам а если их будет 5 уже не прокатит smile

я же написал, можно использовать:
Цитата

function VarArrayGet(const A: Variant; const Indices: array of Integer): Variant; 

Description

Use VarArrayGet to obtain the value of a single cell from a multi-dimensional Variant array.

A is the Variant array that contains the desired value.

Indices is an array of index values, one for each dimension of the array.






--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ivan219
  Дата 8.2.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(MetalFan @  8.2.2007,  09:22 Найти цитируемый пост)
я же написал, можно использовать:

Это я уже понял smile я другое имел в виду.

Цитата(ivan219 @ 7.2.2007,  21:30)
Цитата(Sunvas @  7.2.2007,  20:49 Найти цитируемый пост)
Если будет 50 измерений и по 3 элемента в каждом, то вряд-ли через файл работать как-то чревато.

Почему если взять одно измерение это строка а элементы это символы в строке то нетак уж и черевато получится.
50 строк по 3 элемента:
Код

10 12 15
.
.
45 56 43


Или на оборот 50 элементов и 3 строки:
Код

12 34....56
.
23 45....57

Помойкму здесь я ерунду с порол извиняюсь это реализация двух мерного массива smile 
А 50 мерный это кошмар получится smile

Цитата(ivan219 @ 8.2.2007,  00:17)
Выделить память под это дело легко посчитать сколько ейчеик  в массиве, потом разбить память на измерения скажем если 150 ейчеек т.е. 50 измерений по 3 значения то делаем так:
Код

Выделяем память под 150байт.
1..150 яйчейки памяти
и потом програмно делим
1,2,3 байт 1 измерение
4,5,6 байт 2 измерение
.
.
147,148,150  байт 50 измерения
после чего заносим вних значения.

Здесь тоже smile 

Это сообщение отредактировал(а) ivan219 - 8.2.2007, 10:51
PM MAIL ICQ   Вверх
MetalFan
Дата 8.2.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(ivan219 @  8.2.2007,  10:38 Найти цитируемый пост)
Это я уже понял smile я другое имел в виду.

и что это за "другое"? )) "динамически" можно обращаться к любой ячейке многомерного ВарМассива... или я что-то не догоняю твоих мыслей  smile 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
RomanEEP
Дата 9.2.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 5
Всего: 8



Должно быть все просто:
возьмем
Код

//Наш массив
TMyType = Integer;
MyArray: array of TMyType
Size: array of Integer //Размерность массива в каждом измерении

//Выделим память для массива
k := 1;
for i := Low(Size) to High(Size) do
  k := k*Size[i];
SetLength(MyArray, k);

//Для установки/считывания значения
procedure SetValue(Index: array of Integer);
var
  ArrIndexm, i: Integer
begin
  ArrIndex := 0;
  for i := Low(Index) to High(Index) do
    ArrIndex := ArrIndex + Index[i]*Size[i];
  MyArray[ArrIndex] := 25;
end;

PM MAIL   Вверх
Sunvas
Дата 9.2.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



RomanEEP, Хорошо. Как вариант "извертывания".  smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.