Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 406

 
RomanRott:

как записывать функцию с переменным числом параметров?

Можно некоторым параметрам функции задать начальное значение (эти параметры должны быть последними). При вызове функции можно будет эти параметры задавать или нет, в зависимости от необходимости. Если параметры не будут заданы явно - они получат начальные значения.

Второй вариант - перегрузка. Просто пишите функцию с тем же именем, только с другими типами/количеством параметров.

 
Artyom Trishkin:

Например?


мне нужно передать в функцию несколько параметров, но в разных ситуациях нужно передать разное число, заранее известное
и дальше в функции эти параметры обрабатывать

в си например это реализовано примерно так

int func(int a, int b, ...)
 

В мэтаэдиторе можно как-то поставить на панель инструментов кнопку "Отменить"?
(та, которая реализовывает Ctrl+Z)

 
RomanRott:

мне нужно передать в функцию несколько параметров, но в разных ситуациях нужно передать разное число, заранее известное
и дальше в функции эти параметры обрабатывать

в си например это реализовано примерно так

int func(int a, int b, ...)

Передавайте массив и количество параметров, которые взять из массива

 
STARIJ:

Передавайте массив и количество параметров, которые взять из массива

Так там числа, которые мне нужно передать, не по порядку нужны, то есть универсальный не сформировать
 
RomanRott:
Так там числа, которые мне нужно передать, не по порядку нужны, то есть универсальный не сформировать
Ну хоть один не абстрактный пример приведите.
 
Artyom Trishkin:
Ну хоть один не абстрактный пример приведите.

ну например так:
В зависимости от условия(НЕ if, а просто по сути, эти числа я сам пишу)

a = func(digit, 10, 18, 42); или a = func(digit, 11, 18, 42, 15, 13); или a = func(digit, 5);


double func(int num, ????)
{

return( "сумма этих параметров"/num);

}

 
RomanRott:

ну например так:
В зависимости от условия(НЕ if, а просто по сути, эти числа я сам пишу)

a = func(digit, 10, 18, 42); или a = func(digit, 11, 18, 42, 15, 13); или a = func(digit, 5);


double func(int num, ????)
{

return( "сумма этих параметров"/num);

}

Ну тогда, что первое пришло в голову, и как тут уже подсказали выше - передавайте в функцию массив double, а в функции рассчитывайте нужные значения из значений переданного массива - можно знать и количество чисел (размер массива), и соответственно, рассчитывать их отношения. Только формула расчёта останется одной и той же для любого размера массива. Если и формулу менять собрались, то тогда просто массив не пройдёт для таких нужд, придётся сделать ещё один параметр - который будет указывать на нужную формулу расчёта. Например, можно передавать перечисление, указывающее на тип формулы (ENUM_TYPE_CALCULATED) и, исходя из переданного значения этого перечисления, например CALCULATE_SUMM, высчитывать (в данном примере) просто сумму всех значений переданного массива.

 
RomanRott:
Так там числа, которые мне нужно передать, не по порядку нужны, то есть универсальный не сформировать

Вот ведь полноценный ответ, но на него никакой реакции...

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Alexey Kozitsyn, 2018.01.05 11:46

Можно некоторым параметрам функции задать начальное значение (эти параметры должны быть последними). При вызове функции можно будет эти параметры задавать или нет, в зависимости от необходимости. Если параметры не будут заданы явно - они получат начальные значения.

Второй вариант - перегрузка. Просто пишите функцию с тем же именем, только с другими типами/количеством параметров.


 
Alexey Viktorov:

Вот ведь полноценный ответ, но на него никакой реакции...


Если набор и количество чисел заранее не известны, то функций не напасёшься на каждый новый набор.

Причина обращения: