ESV1987
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте! Давно пишу простенькие проги на Делфи, читал много руководств, но с некоторыми (кажется, очень простыми) вещами до сих пор от случая к случаю возникают проблемы. Сейчас вот, к примеру, мучают динамические массивы. Без них не удаётся добиться универсальности создаваемых подпрограмм. 1. Передача динамического массива на вход процедуры и соответственно выдача на выходе другого динамического массива. На фортране это дело решается элементарно, на вход идёт просто переменная, а в секции описания она описана, как dimension :: XYZ (Ndim) (......). В делфи же создаю я тип type DynAr = array of extended или даже array of array of extended, переменная на входе и выходе процедуры описывается этим типом. Так вот, при передаче массива в процедуру из юнита, где эта процедура находится и из внешнего юнита часто у меня происходит путаница... то сбивается указатель и массив вместо требуемых значений указывает на какую-то белиберду в другой части памяти, либо ещё что-то (var перед именем массива на входе часто как-то неадекватно на него действует и т.п.). Не могли бы вы раз и навсегда мне разъяснить, как мне заслать динамический массив на вход процедуры и внутри процедуры его адекватно обработать, затем выдав другой массив на выходе? Где надо передать указатели и т.п.? 2. Запись большого кол-ва информации в динамический массив. Так необходимо в программе, чтобы раз в N шагов сохранялась информация в динамический массив. И если шаг очень маленький, то даже на интервале средней длины, часто динамические массивы "переполняются". Можно ли как-то их описать по особому, чтобы переполнений не было, может не стандартный класс использовать, а библиотеку какую-нибудь. Мне однажды предложили писать в поток (Stream), но из него неудобно потом считывать. Через анализ содержания не найти нужную строку, приходится запоминать шаги (для считывания по числу байт), что не подходит мне в данном случае. 3. Как узнать все размерности многомерного массива? к примеру у меня массив двумерный, length выдаёт только одну границу, а как узнать вторую? (кроме использования библиотек, где под динамические массивы создан класс, хранящий свойства размерностей, естественно) Ну вот пока всё, хотя вопросов тьма. Казалось бы, тема динамических массивов должна быть один раз хорошо освещена в учебниках и всё. А я сколько их не читал, чётких ответов на эти вопросы так и не нашёл. В DRKB предлагают свой класс массивов, но это не всегда удобно.. | Всего записей: 56 | Зарегистр. 31-03-2007 | Отправлено: 00:39 04-02-2012 | Исправлено: ESV1987, 00:52 04-02-2012 |
|