Я исключительно пользуюсь void Function(double& data). В вашем случае, для решения систем линейных уравнений, размер массива данных должен совпадать с размером массива для коэффициентов. Поэтому можно использовать один и тот же массив для передачи данных в функцию и передачи решений обратно в исходный модуль, типа void Function(double& iodata). Конечно можно и так: void Function(double inputdata, double& outputdata). Не думаю что существуют другие какие-то способы. Хотя интересно узнать мнения других.
gpwr писал (а):
Я исключительно пользуюсь void Function(double& data). В вашем случае, для решения систем линейных уравнений, размер массива данных должен совпадать с размером массива для коэффициентов. Поэтому можно использовать один и тот же массив для передачи данных в функцию и передачи решений обратно в исходный модуль, типа void Function(double& iodata). Конечно можно и так: void Function(double inputdata, double& outputdata). Не думаю что существуют другие какие-то способы. Хотя интересно узнать мнения других.
Это, мягко говоря, зкстремизм; приходится постоянно следить
за сделанными изменениями, прежде чем передавать их обратно.
Все изменения над исходным массивом распространяются на весь
модуль, т.е. нарушается обоснованная локальность переменных
в функциях. Экономия кода, мне кажется, таких мер не оправдывает.
А другой способ я уже указал - функция ArrayCopy().Я исключительно пользуюсь void Function(double& data). В вашем случае, для решения систем линейных уравнений, размер массива данных должен совпадать с размером массива для коэффициентов. Поэтому можно использовать один и тот же массив для передачи данных в функцию и передачи решений обратно в исходный модуль, типа void Function(double& iodata). Конечно можно и так: void Function(double inputdata, double& outputdata). Не думаю что существуют другие какие-то способы. Хотя интересно узнать мнения других.
Конечно, так или иначе приходится идти на компромисс, жертвуя безопасностью кода, тут ничего не поделаешь...
gpwr, никак не могу найти ошибку в коде. Это функция ввода данных в матрицу непосредственно с текущего чарта:
void input_data( double& m[][] )При вызове этой функции я просто подставляю вместо формального параметр, объявленный как глобальный. Матрица не объявлена как буфер индикатора. А далее, при выводе этой матрицы в файл, я получаю нули. Что неправильно?
{
int startbar = 100;
for ( int row = 0; row < _dimension; row++ )
for ( int column = 0; column < _dimension; column++ )
m[ row ][ column ] = Close [ startbar - row - column ];
for ( row = 0; row < _dimension; row++ )
m[ row ][ _dimension ] = High [ startbar - row - _dimension];
return;
}
P.S. После явного указания обеих размерностей при объявлении матрицы все работает. Проблема в том, что эта размерность объявлена как внешний параметр, и ее нельзя указать как переменную. .. Можно сделать не слишком изячно: объявляем массив глобально с размерностями 50х50, а в функции init() первую размерность переделываем на нужное значение, которое обычно существенно меньше.
Вопрос разработчикам: можно ли расширить функцию ArrayResize() так, чтобы она могла изменить любую размерность массива, не только первую?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Эта функция, конечно, находится в модуле библиотеки и нужна исключительно для того, чтобы внешний мир смог узнать элементы массива _point[]. Чтобы вытянуть из библиотеки сам вектор, функция solution_component() вызывается в цикле внутри вызывающего модуля и заполняет компоненты объявленного в вызывающем модуле массива. Кто-нибудь знает способы поизячнее?
Навскидку приходит в голову вариант с установкой глобальных переменных терминала, в количестве, равном размерности вектора, и последующим считыванием их значений. А сколько глобальных переменных в терминале может быть по максимуму?
Кстати, при попытке создания вот такой библиотечной функции (копирование массива source[] размерности dimension в массив target[]):
получается ругательство, типа "target: элементу массива нельзя присвоить значение". Можно ли эту функцию как-то модифицировать, чтобы она заработала?
Буду рад услышать интересные варианты.
P.S. Пардон, кажись, нашел функцию ArrayCopy(). То-то, помнится, недоуменно взирал на символ & в параметре... Надеюсь, это правильное решение.
P.P.S. И все-таки, и все-таки... В библиотеке FFT от klotа нашел такой заголовок:
В хелпе не нашел объяснения, что означает символ & в этом контексте. Судя по всему, это аналог Сишного синонима, который применяется к аргументам, передающимся по ссылке. Можно ли сделать вот так?