Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 406

 
RomanRott:

Comment écrire une fonction avec un nombre variable de paramètres ?

Vous pouvez définir certains des paramètres d'une fonction à une valeur initiale (ces paramètres doivent être les derniers). Lorsque la fonction est appelée, ces paramètres peuvent être définis ou non, selon le besoin. Si les paramètres ne sont pas définis explicitement, ils recevront des valeurs initiales.

La deuxième option est la surcharge. Il suffit d'écrire une fonction portant le même nom, mais avec des types/un nombre de paramètres différents.

 
Artyom Trishkin:

Comme quoi ?


Je dois passer plusieurs paramètres à une fonction, mais dans différentes situations, je dois passer un nombre différent, connu à l'avance.
et ensuite traiter ces paramètres dans la fonction

En C, par exemple, ceci est implémenté comme suit

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

Existe-t-il un moyen de mettre un bouton "Annuler" sur la barre d'outils de MetaEditor ?
(celui qui met en œuvre Ctrl+Z)

 
RomanRott:

Je dois passer plusieurs paramètres à une fonction, mais dans différentes situations, je dois passer un nombre différent, connu à l'avance.
et ensuite traiter ces paramètres dans la fonction

En C, par exemple, ceci est implémenté comme suit

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

Passer le tableau et le nombre de paramètres à prendre dans le tableau

 
STARIJ:

Passez dans un tableau et le nombre de paramètres à prendre dans le tableau.

Donc les nombres que je dois passer ne sont pas dans l'ordre, c'est-à-dire qu'un universel ne peut être généré
 
RomanRott:
Les chiffres que je dois passer ne sont donc pas dans l'ordre, c'est-à-dire qu'un universel ne peut être généré.
Donnez-moi au moins un exemple qui ne soit pas abstrait.
 
Artyom Trishkin:
Donnez-moi au moins un exemple non abstrait.

Par exemple :
Selon la condition (PAS si, mais juste en gros, j'écris ces chiffres moi-même)

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


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

retourner("somme de ces paramètres"/num) ;

}

 
RomanRott:

comme ceci :
En fonction de la condition(PAS si, mais juste en gros, j'écris ces chiffres moi-même)

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


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

retourner("somme de ces paramètres"/num) ;

}

Eh bien, ce qui m'est venu à l'esprit en premier lieu, et comme déjà suggéré ci-dessus - passer dans la fonction tableau double, et dans la fonction calculer les valeurs nécessaires à partir des valeurs du tableau passé - il est possible de connaître la quantité de nombres(taille du tableau), et par conséquent de calculer leurs relations. Seule la formule restera la même, quelle que soit la taille du tableau. Si vous souhaitez également modifier la formule, le tableau ne suffira pas. Vous devrez ajouter un paramètre supplémentaire, qui indiquera la formule à utiliser pour le calcul. Par exemple, vous pouvez passer une énumération indiquant le type de formule (ENUM_TYPE_CALCULATED) et, en fonction de la valeur de cette énumération, par exemple CALCULATE_SUMM, calculer simplement (dans cet exemple) la somme de toutes les valeurs du tableau passé.

 
RomanRott:
Donc, les nombres que je dois faire passer sont dans le désordre, c'est-à-dire qu'il est impossible de former un universel.

Voici une réponse complète, mais pas de réponse...

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Alexey Kozitsyn, 2018.01.05 11:46

Vous pouvez définir certains paramètres de la fonction à une valeur initiale (ces paramètres doivent être les derniers). Lorsque vous appelez la fonction, vous pourrez définir ces paramètres ou non, selon le besoin. Si les paramètres ne sont pas définis explicitement - ils obtiendront les valeurs initiales.

La deuxième option est la surcharge. Il suffit d'écrire une fonction portant le même nom, mais avec des types/un nombre de paramètres différents.


 
Alexey Viktorov:

Voici une réponse complète, mais pas de réponse à celle-ci...


Si l'ensemble et le nombre de nombres ne sont pas connus à l'avance, il n'y a pas de fonction pour chaque nouvel ensemble.