Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 406

 
RomanRott:

Como escrevo uma função com um número variável de parâmetros?

Você pode definir alguns dos parâmetros de uma função para um valor inicial (estes parâmetros devem ser os últimos). Quando a função é chamada, estes parâmetros podem ser definidos ou não, dependendo da necessidade. Se os parâmetros não forem definidos explicitamente, eles receberão os valores iniciais.

A segunda opção é a sobrecarga. Basta escrever uma função com o mesmo nome, apenas com diferentes tipos/números de parâmetros.

 
Artyom Trishkin:

Como por exemplo?


Preciso passar vários parâmetros para uma função, mas em situações diferentes, preciso passar um número diferente, conhecido antecipadamente
e depois processar esses parâmetros na função

Em C, por exemplo, isto é implementado da seguinte forma

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

Existe alguma maneira de colocar um botão "Desfazer" na barra de ferramentas no MetaEditor?
(aquele que implementa o Ctrl+Z)

 
RomanRott:

Preciso passar vários parâmetros para uma função, mas em situações diferentes, preciso passar um número diferente, conhecido antecipadamente
e depois processar esses parâmetros na função

Em C, por exemplo, isto é implementado da seguinte forma

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

Passar a matriz e o número de parâmetros a serem tomados da matriz

 
STARIJ:

Passar em uma matriz e o número de parâmetros a serem tomados da matriz

Portanto, os números que preciso passar não estão em ordem, ou seja, um universal não pode ser gerado
 
RomanRott:
Portanto, os números que preciso passar não estão em ordem, ou seja, um universal não pode ser gerado.
Pelo menos me dê um exemplo que não seja abstrato.
 
Artyom Trishkin:
Pelo menos me dê um exemplo não abstrato.

Por exemplo:
Dependendo da condição (NÃO se, mas basicamente, eu mesmo escrevo estes números)

a = func(dígito, 10, 18, 42); ou a = func(dígito, 11, 18, 42, 42, 15, 13); ou a = func(dígito, 5);


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

return("soma destes parâmetros"/num);

}

 
RomanRott:

assim:
Dependendo da condição (NÃO se, mas basicamente, eu mesmo escrevo estes números)

a = func(dígito, 10, 18, 42); ou a = func(dígito, 11, 18, 42, 42, 15, 13); ou a = func(dígito, 5);


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

return("soma destes parâmetros"/num);

}

Bem, então, o que primeiro veio à mente, e como já sugerido aqui acima - passar em matriz de função dupla, e em função calcular valores necessários a partir de valores de matriz passada - é possível conhecer tanto a quantidade de números(tamanho da matriz), quanto, conseqüentemente, calcular suas relações. Somente a fórmula permanecerá a mesma para qualquer tamanho da matriz. Se você for mudar a fórmula também, então apenas a matriz não funcionará para isso, você terá que fazer mais um parâmetro - que apontará para a fórmula correta para o cálculo. Por exemplo, você pode passar uma enumeração indicando o tipo de fórmula (ENUM_TYPE_CALCULATED) e, com base no valor desta enumeração, por exemplo CALCULATE_SUMM, basta calcular (neste exemplo) a soma de todos os valores da matriz passada.

 
RomanRott:
Portanto, os números que preciso passar ali estão fora de ordem, ou seja, um universal não pode ser formado

Aqui está uma resposta completa, mas nenhuma resposta...

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta de novatos sobre MQL4, ajuda e discussão sobre algoritmos e códigos

Alexey Kozitsyn, 2018.01.05 11:46

Você pode definir alguns parâmetros de função para um valor inicial (estes parâmetros devem ser os últimos). Quando você chama a função, você poderá ou não definir estes parâmetros, dependendo da necessidade. Se os parâmetros não forem definidos explicitamente - eles obterão os valores iniciais.

A segunda opção é a sobrecarga. Basta escrever uma função com o mesmo nome, apenas com diferentes tipos/números de parâmetros.


 
Alexey Viktorov:

Aqui está uma resposta completa, mas nenhuma resposta...


Se o conjunto e o número de números não forem conhecidos com antecedência, não há função para cada novo conjunto.

Razão: