MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 406

 
RomanRott :

Değişken sayıda parametreli bir fonksiyon nasıl yazılır?

Bazı fonksiyon parametrelerinin başlangıç değerini ayarlayabilirsiniz (bu parametreler sonuncusu olmalıdır). Fonksiyon çağrılırken , ihtiyaca göre bu parametreleri ayarlayıp ayarlayamamak mümkün olacaktır. Parametreler açıkça ayarlanmazsa, başlangıç değerlerini alırlar.

İkinci seçenek aşırı yüktür. Sadece aynı ada sahip, sadece farklı tipte/parametre sayısında bir fonksiyon yazın.

 
Artyom Trishkin :

Örneğin?


İşleve birkaç parametre iletmem gerekiyor, ancak farklı durumlarda önceden bilinen farklı bir sayı iletmem gerekiyor
ve sonra bu parametreleri fonksiyonda işleyin

si'de, örneğin, bu şekilde uygulanır

int işlev(int a, int b, ...)
 

Meta düzenleyicideki araç çubuğuna "İptal" düğmesi koymanın bir yolu var mı?
(Ctrl+Z uygulayan)

 
RomanRott :

İşleve birkaç parametre iletmem gerekiyor, ancak farklı durumlarda önceden bilinen farklı bir sayı iletmem gerekiyor
ve bu parametreleri fonksiyonda daha fazla işleyin

si'de, örneğin, bu şekilde uygulanır

int işlev(int a, int b, ...)

Bir diziyi ve diziden alınacak parametre sayısını iletin

 
STARIJ :

Bir diziyi ve diziden alınacak parametre sayısını iletin

Yani orada aktarmam gereken sayılar düzensizdir, yani evrensel oluşturulamaz.
 
RomanRott :
Yani orada aktarmam gereken sayılar düzensizdir, yani evrensel oluşturulamaz.
En azından soyut olmayan bir örnek verin.
 
Artyom Trishkin :
En azından soyut olmayan bir örnek verin.

peki, şöyle:
Duruma bağlı olarak (eğer DEĞİL, ancak aslında bu sayıları kendim yazıyorum)

a = işlev(rakam, 10, 18, 42); veya a = işlev(rakam, 11, 18, 42, 15, 13); veya a = işlev(rakam, 5);


çift işlev(int num, ????)
{

return("bu parametrelerin toplamı"/sayı);

}

 
RomanRott :

peki, şöyle:
Duruma bağlı olarak (eğer DEĞİL, ancak aslında bu sayıları kendim yazıyorum)

a = işlev(rakam, 10, 18, 42); veya a = işlev(rakam, 11, 18, 42, 15, 13); veya a = işlev(rakam, 5);


çift işlev(int num, ????)
{

return("bu parametrelerin toplamı"/sayı);

}

Peki, o zaman, ilk akla gelen ve yukarıda önerildiği gibi - fonksiyona bir çift dizi iletin ve fonksiyonda, geçen dizinin değerlerinden gerekli değerleri hesaplayın - ayrıca öğrenebilirsiniz. sayıların sayısı ( dizi boyutu ) ve buna göre oranlarını hesaplayın. Herhangi bir dizi boyutu için yalnızca hesaplama formülü aynı kalacaktır. Formülü değiştirecekseniz, sadece dizi bu tür ihtiyaçlar için çalışmayacaktır, bir parametre daha yapmanız gerekecektir - bu, istenen hesaplama formülünü gösterecektir. Örneğin, formülün türünü (ENUM_TYPE_CALCULATED) belirten bir numaralandırma iletebilir ve bu numaralandırmanın geçirilen değerine göre, örneğin CALCULATE_SUMM, (bu örnekte) basitçe iletilen dizinin tüm değerlerinin toplamını hesaplayabilirsiniz. .

 
RomanRott :
Yani orada aktarmam gereken sayılar düzensizdir, yani evrensel oluşturulamaz.

Bu tam teşekküllü bir cevap, ancak buna tepki yok ...

çağrılırken , ihtiyaca göre bu parametreleri ayarlayıp ayarlayamamak mümkün olacaktır. Parametreler açıkça ayarlanmazsa, başlangıç değerlerini alırlar.

İkinci seçenek aşırı yüktür. Sadece aynı ada sahip, sadece farklı tipte/parametre sayısında bir fonksiyon yazın.


 
Alexey Viktorov :

Bu tam teşekküllü bir cevap, ancak buna tepki yok ...


Küme ve sayı sayısı önceden bilinmiyorsa, her yeni küme için işlevleri stoklayamazsınız.