Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 195

/ вопрос решён /

Назовите, пожалуйста, метод определения текущей размерности массива?

Полушин Сергей Анатольевич Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Полушин Сергей Анатольевич (статус: Посетитель)
Вопрос отправлен: 12 декабря 2006, 17:51
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

lehgth(имя массива) - "размерность"
low() high() - нижний и верхний индекс

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 12 декабря 2006, 18:39
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, Полушин Сергей Анатольевич!

Повидимому массмв у Вас динамический (иначе зачем узнавать длину, а не размерность, размерность-это количество индексов).
От себя добавлю как изменить длину динамического массива см приложение.
УдачиВам!

Приложение:
  1. procedure IzmeniteDliny(var Mass:TypeMass; N:integer);
  2. var L:integer;
  3. begin
  4. L:=Lehgth(Mass);
  5. SetLehgth(Mass,L+N);
  6. end;
  7.  


Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 12 декабря 2006, 19:59
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Полушин Сергей Анатольевич!
Динамические массивы не несут в себе информации о своей размерности (в runtime), статические массива тоже, похоже, проверяются на размерность только компилятором на этапе компиляции.
Поэтому определить именно "размерность", просто так не получится. Я вижу только один не очень "красивый" вариант - проанализировать как Delphi размещает в памяти данные динамических массивов (функция DynArraySetLength) и, имея первый элемент массива, узнав его длинну (Lehgth) проверить память за этими данными. Если данные в памяти есть - возможно это следующий уровень размерности массива.

Только у меня нет времени разбираться с этим. Ести Вам надо - идите в этом направлении.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 13 декабря 2006, 01:14
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 14 декабря 2006, 17:14; участников в обсуждении: 3.
Новаковский Юрий Аврамович

Новаковский Юрий Аврамович (статус: 4-ый класс), 13 декабря 2006, 09:45 [#1]:

Уважаемый Полушин Сергей Анатольевич!
Уточните пожалуста вопрос, тогда эксперты ответят Вам более конкретно.
Dron

Dron (статус: Студент), 13 декабря 2006, 14:24 [#2]:

Length() по-моему работает только со строками... Хотя я могу ошибаться... Самый разумный способ, на мой взгляд, - завести переменную, в которой и хранить текущую размерность массива, а при выполнении операций с ним просто соответствующим образом изменять переменную.
С уважением.
Dron

Dron (статус: Студент), 13 декабря 2006, 14:26 [#3]:

Матвеев Игорь Владимирович: анализ памяти в большинстве случаев будет давать сбой. Как правило, данные конкретной программы хранятся в памяти последовательно.
С уважением.
Полушин Сергей Анатольевич

Полушин Сергей Анатольевич (статус: Посетитель), 14 декабря 2006, 17:14 [#4]:

Я задал вам этот вопрос в точности так, как он был задан мне, я ответил 3 функциями: length(),low() и high(). И что, оказалось, что правильным ответом является функция setlength(,), я, можно сказать, не то что не согласен был, я был возмущён, был не согласен с ответом учителя. Задал вопрос вам, в большинстве случаев, вы со мной согласны. Видимо, препод действительно сам ничего не знает. Это Бабалова И.Ф. меня раздражает, и вот так со многими ответами, она сама не права, а я из-за неё уже две тройки получил. Говорил ей об этом, а она просто не отвечает на вопросы, а отпинывается, мол в её книге всё написано.

31 января 2011, 19:22: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.