Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 406

 
RomanRott:

Wie schreibe ich eine Funktion mit einer variablen Anzahl von Parametern?

Sie können einige Parameter einer Funktion auf einen Anfangswert setzen (diese Parameter sollten die letzten sein). Wenn die Funktion aufgerufen wird, können diese Parameter je nach Bedarf gesetzt werden oder nicht. Wenn Parameter nicht explizit festgelegt werden, erhalten sie Anfangswerte.

Die zweite Möglichkeit ist die Überlastung. Schreiben Sie einfach eine Funktion mit demselben Namen, nur mit einer anderen Art/Anzahl von Parametern.

 
Artyom Trishkin:

Was zum Beispiel?


Ich muss mehrere Parameter an eine Funktion übergeben, aber in verschiedenen Situationen muss ich eine andere, im Voraus bekannte Anzahl übergeben
und verarbeiten diese Parameter dann in der Funktion

In C wird dies zum Beispiel wie folgt umgesetzt

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

Gibt es eine Möglichkeit, eine Schaltfläche "Rückgängig" in die Symbolleiste von MetaEditor einzufügen?
(diejenige, die Strg+Z implementiert)

 
RomanRott:

Ich muss mehrere Parameter an eine Funktion übergeben, aber in verschiedenen Situationen muss ich eine andere, im Voraus bekannte Anzahl übergeben
und verarbeiten diese Parameter dann in der Funktion

In C wird dies zum Beispiel wie folgt umgesetzt

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

Übergeben Sie das Array und die Anzahl der Parameter, die dem Array entnommen werden sollen

 
STARIJ:

Übergeben Sie ein Array und die Anzahl der Parameter, die dem Array entnommen werden sollen

Die Zahlen, die ich weitergeben muss, sind also nicht in der richtigen Reihenfolge, d.h. eine universelle Zahl kann nicht generiert werden
 
RomanRott:
Die Zahlen, die ich weitergeben muss, sind also nicht in der richtigen Reihenfolge, d. h. es kann keine universelle Zahl erzeugt werden.
Nennen Sie mir wenigstens ein Beispiel, das nicht abstrakt ist.
 
Artyom Trishkin:
Nennen Sie mir wenigstens ein nicht-abstraktes Beispiel.

Zum Beispiel:
Abhängig von der Bedingung (NICHT wenn, sondern nur grundsätzlich, ich schreibe diese Zahlen selbst)

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


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

return("Summe dieser Parameter"/num);

}

 
RomanRott:

so:
Abhängig von der Bedingung (NICHT wenn, sondern nur grundsätzlich, ich schreibe diese Zahlen selbst)

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


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

return("Summe dieser Parameter"/num);

}

Nun denn, was mir zuerst in den Sinn kam, und wie bereits hier oben vorgeschlagen - übergeben Sie in der Funktion array double, und in der Funktion berechnen Sie die notwendigen Werte aus den Werten des übergebenen Arrays - es ist möglich, sowohl die Menge der Zahlen(Array-Größe) zu kennen, und dementsprechend ihre Beziehungen zu berechnen. Nur die Formel bleibt bei jeder Größe des Feldes gleich. Wenn Sie auch die Formel ändern wollen, reicht das Array allein nicht aus, Sie müssen einen weiteren Parameter erstellen, der auf die richtige Formel für die Berechnung verweist. Sie können z.B. eine Aufzählung übergeben, die den Typ der Formel angibt (ENUM_TYPE_CALCULATED) und basierend auf dem Wert dieser Aufzählung, z.B. CALCULATE_SUMM, einfach die Summe aller Werte des übergebenen Arrays berechnen (in diesem Beispiel).

 
RomanRott:
Die Zahlen, die ich dort übergeben muss, sind also nicht in der richtigen Reihenfolge, d.h. es kann keine universelle Zahl gebildet werden

Hier ist eine ausführliche Antwort, aber keine Antwort...

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen von Neulingen zu MQL4, Hilfe und Diskussion über Algorithmen und Codes

Alexey Kozitsyn, 2018.01.05 11:46

Sie können einige Funktionsparameter auf einen Anfangswert setzen (diese Parameter sollten die letzten sein). Wenn Sie die Funktion aufrufen, können Sie diese Parameter je nach Bedarf einstellen oder nicht. Wenn Parameter nicht explizit festgelegt werden, erhalten sie Anfangswerte.

Die zweite Möglichkeit ist die Überlastung. Schreiben Sie einfach eine Funktion mit demselben Namen, nur mit einer anderen Art/Anzahl von Parametern.


 
Alexey Viktorov:

Hier ist eine ausführliche Antwort, aber keine Antwort darauf...


Wenn die Menge und die Anzahl der Zahlen nicht im Voraus bekannt sind, gibt es keine Funktion für jede neue Menge.

Grund der Beschwerde: