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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические массивы, Номера элементов 
:(
    Опции темы
DragonFire
Дата 21.11.2005, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



Вопрос такой: Можно ли создать динамический массив так, чтобы элементы нумеровались не от 0 да 100, о от 100 до 200.
И если можно - то как?


--------------------
PM MAIL ICQ   Вверх
_hunter
Дата 21.11.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



можно: создаеш нормальный массив (от 0 до ста ) а потом при обращении отнимаеш от индекса 100


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 21.11.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Можно, но лучше этого не делать.
Но, если очень хоцца, то можно так:
Код

type
  TIArray = array[100..100] of integer; // Массив, начинается со 100
  PIArray = ^TIArray; // указатель на массив для выделения памяти
var
  a: TIArray; // соответственно массив
  p: PIArray; // соответственно указатель
  z: integer; // это для номера элемента
begin
  p:=@a; // берем адрес массива
  GetMem(p,101*SizeOf(integer)); // выделяем память - 100..200 - 101 integer
  z:=150; // номер элемента
  a[z]:=z*z; // присваиваем 150-му элементу значение
  Label1.Caption:=IntToStr(a[z]); // ну типа теста
  FreeMem(p); // не забываем освободить память
end;


Это сообщение отредактировал(а) Snowy - 21.11.2005, 15:19
PM MAIL   Вверх
DragonFire
Дата 21.11.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



Спасибо, только я что-то не понял, где именно указывается, что до 200. В SizeOf(integer) что ли? А как тогда сделать до 210?


--------------------
PM MAIL ICQ   Вверх
Snowy
Дата 21.11.2005, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(DragonFire @ 21.11.2005, 20:46)
Спасибо, только я что-то не понял, где именно указывается, что до 200. В SizeOf(integer) что ли? А как тогда сделать до 210?

Там не указывается до скольки. Там указывается кол-во.
От 100 до 200 получается 101 элемент массива.
Хочешь 210, будет: 111*SizeOf(integer);
SizeOf(integer) - размер одного элемента. 111 - кол-во элементов.
PM MAIL   Вверх
DragonFire
Дата 21.11.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



А если я хочу не с 100 элемента, а с 150, то мне нужно статически менять тип TIArray? А динамически это можно сделать?


--------------------
PM MAIL ICQ   Вверх
Snowy
Дата 21.11.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(DragonFire @ 21.11.2005, 21:44)
А если я хочу не с 100 элемента, а с 150, то мне нужно статически менять тип TIArray?

Тут уже наука бессильна.
Стартовый отсчет поменять никак.
При таких запросах, лучше уж действительно тогда делать, как сказал хантер.
PM MAIL   Вверх
DragonFire
Дата 21.11.2005, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



И на том спасибо =)


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


Лентяй 2
***


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

Репутация: 31
Всего: 155



Цитата(Snowy @ 21.11.2005, 21:47)
При таких запросах, лучше уж действительно тогда делать, как сказал хантер.

Ну а почему бы сразу не сделать вот так: SetLength(XXX,201)... ну и использывать в XXX только диапозон от 100 до 200?

PS: Вот только зачем такие... smile лучше уж используй индексацию данных.

Это сообщение отредактировал(а) Girder - 22.11.2005, 11:42


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
DragonFire
Дата 22.11.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



Цитата(Girder @ 22.11.2005, 11:40)
Ну а почему бы сразу не сделать вот так: SetLength(XXX,201)... ну и использывать в XXX только диапозон от 100 до 200?

Экономия памяти. Это от 100 до 200 можно, а от 20000 да 30000 уже нельзя, тем более, если массив - двумерный...
P.S. Что за индексация данных?



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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Цитата
Это от 100 до 200 можно, а от 20000 да 30000 уже нельзя, тем более, если массив - двумерный...

нихт не понял...
+ почему мой метод не подходит -- тоже не понятно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
DragonFire
Дата 22.11.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 9



_hunter, твой метод прост и понятен, но для моего алгоритма в моей программе требуется брать конкретные индексы элементов массива, а не замарачиватся с вычитанием...


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

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

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

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

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


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

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


 




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


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

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