|
Вопрос # 195/ вопрос решён / |
|
Назовите, пожалуйста, метод определения текущей размерности массива?
 |
Вопрос задал: Полушин Сергей Анатольевич (статус: Посетитель)
Вопрос отправлен: 12 декабря 2006, 17:51
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: Вадим К
lehgth(имя массива) - "размерность"
low() high() - нижний и верхний индекс
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 12 декабря 2006, 18:39
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, Полушин Сергей Анатольевич!
Повидимому массмв у Вас динамический (иначе зачем узнавать длину, а не размерность, размерность-это количество индексов).
От себя добавлю как изменить длину динамического массива см приложение.
УдачиВам!
Приложение: Переключить в обычный режим- procedure IzmeniteDliny(var Mass:TypeMass; N:integer);
- var L:integer;
- begin
- L:=Lehgth(Mass);
- SetLehgth(Mass,L+N);
- end;
-
Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Полушин Сергей Анатольевич!
Динамические массивы не несут в себе информации о своей размерности (в runtime), статические массива тоже, похоже, проверяются на размерность только компилятором на этапе компиляции.
Поэтому определить именно "размерность", просто так не получится. Я вижу только один не очень "красивый" вариант - проанализировать как Delphi размещает в памяти данные динамических массивов (функция DynArraySetLength) и, имея первый элемент массива, узнав его длинну (Lehgth) проверить память за этими данными. Если данные в памяти есть - возможно это следующий уровень размерности массива.
Только у меня нет времени разбираться с этим. Ести Вам надо - идите в этом направлении.
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 14 декабря 2006, 17:14; участников в обсуждении: 3.
|
Новаковский Юрий Аврамович (статус: 4-ый класс), 13 декабря 2006, 09:45 [#1]:
Уважаемый Полушин Сергей Анатольевич!
Уточните пожалуста вопрос, тогда эксперты ответят Вам более конкретно.
|
|
Dron (статус: Студент), 13 декабря 2006, 14:24 [#2]:
Length() по-моему работает только со строками... Хотя я могу ошибаться... Самый разумный способ, на мой взгляд, - завести переменную, в которой и хранить текущую размерность массива, а при выполнении операций с ним просто соответствующим образом изменять переменную.
С уважением.
|
|
Dron (статус: Студент), 13 декабря 2006, 14:26 [#3]:
Матвеев Игорь Владимирович: анализ памяти в большинстве случаев будет давать сбой. Как правило, данные конкретной программы хранятся в памяти последовательно.
С уважением.
|
|
Полушин Сергей Анатольевич (статус: Посетитель), 14 декабря 2006, 17:14 [#4]:
Я задал вам этот вопрос в точности так, как он был задан мне, я ответил 3 функциями: length(),low() и high(). И что, оказалось, что правильным ответом является функция setlength(,), я, можно сказать, не то что не согласен был, я был возмущён, был не согласен с ответом учителя. Задал вопрос вам, в большинстве случаев, вы со мной согласны. Видимо, препод действительно сам ничего не знает. Это Бабалова И.Ф. меня раздражает, и вот так со многими ответами, она сама не права, а я из-за неё уже две тройки получил. Говорил ей об этом, а она просто не отвечает на вопросы, а отпинывается, мол в её книге всё написано.
|
31 января 2011, 19:22: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|