Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 406

 
RomanRott:

Come si scrive una funzione con un numero variabile di parametri?

Potete impostare alcuni dei parametri di una funzione a un valore iniziale (questi parametri dovrebbero essere gli ultimi). Quando la funzione viene chiamata, questi parametri possono essere impostati o meno, a seconda della necessità. Se i parametri non saranno impostati esplicitamente, riceveranno valori iniziali.

La seconda opzione è il sovraccarico. Scrivete semplicemente una funzione con lo stesso nome, solo con diversi tipi/numero di parametri.

 
Artyom Trishkin:

Come cosa?


Ho bisogno di passare diversi parametri a una funzione, ma in diverse situazioni ho bisogno di passare un numero diverso, conosciuto in anticipo
e poi elaborare questi parametri nella funzione

In C, per esempio, questo è implementato in questo modo

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

C'è un modo per mettere un pulsante "Undo" sulla barra degli strumenti in MetaEditor?
(quello che implementa Ctrl+Z)

 
RomanRott:

Ho bisogno di passare diversi parametri a una funzione, ma in diverse situazioni ho bisogno di passare un numero diverso, conosciuto in anticipo
e poi elaborare questi parametri nella funzione

In C, per esempio, questo è implementato in questo modo

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

Passa l'array e il numero di parametri da prendere dall'array

 
STARIJ:

Passare un array e il numero di parametri da prendere dall'array

Quindi i numeri che devo passare non sono in ordine, cioè non si può generare un universale
 
RomanRott:
Quindi i numeri che devo passare non sono in ordine, cioè non si può generare un universale.
Dammi almeno un esempio che non sia astratto.
 
Artyom Trishkin:
Dammi almeno un esempio non astratto.

Per esempio:
A seconda della condizione (NON se, ma solo fondamentalmente, io stesso scrivo questi numeri)

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


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

return("somma di questi parametri"/num);

}

 
RomanRott:

come questo:
A seconda della condizione (NON se, ma solo fondamentalmente, scrivo io stesso questi numeri)

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


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

return("somma di questi parametri"/num);

}

Bene, allora, quello che mi è venuto in mente per primo, e come già suggerito qui sopra - passare nella funzione array doppio, e nella funzione calcolare i valori necessari dai valori dell'array passato - è possibile conoscere sia la quantità di numeri(dimensione dell'array), e di conseguenza calcolare le loro relazioni. Solo la formula rimarrà la stessa per qualsiasi dimensione dell'array. Se avete intenzione di cambiare anche la formula, allora solo l'array non funzionerà per questo, dovrete fare un altro parametro - che punterà alla formula giusta per il calcolo. Per esempio, potete passare un'enumerazione che indica il tipo di formula (ENUM_TYPE_CALCULATED) e, in base al valore di questa enumerazione, per esempio CALCULATE_SUMM, calcolate semplicemente (in questo esempio) la somma di tutti i valori dell'array passato.

 
RomanRott:
Quindi i numeri che devo passare lì sono fuori ordine, cioè non si può formare un universale

Ecco una risposta completa, ma nessuna risposta...

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici

Alexey Kozitsyn, 2018.01.05 11:46

Potete impostare alcuni parametri della funzione su un valore iniziale (questi parametri dovrebbero essere gli ultimi). Quando chiamate la funzione, potrete impostare o meno questi parametri, a seconda della necessità. Se i parametri non sono impostati esplicitamente - avranno valori iniziali.

La seconda opzione è il sovraccarico. Scrivete semplicemente una funzione con lo stesso nome, solo con diversi tipi/numero di parametri.


 
Alexey Viktorov:

Ecco una risposta completa, ma nessuna risposta...


Se l'insieme e il numero di numeri non sono noti in anticipo, non esiste una funzione per ogni nuovo insieme.