| 
| 
 | Вопрос # 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;beginL:=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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |