//+------------------------------------------------------------------+//| передача параметров по ссылке |//+------------------------------------------------------------------+double SecondMethod(int &i,int &j)
{
double res;
//---
i*=2;
j/=2;
res=i+j;
//---return(res);
}
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---.int a=14,b=8;
Print("a и b перед вызовом:",a," ",b);
double d= SecondMethod(a,b);
Print("a и b после вызова:",a," ",b);
}
//+------------------------------------------------------------------+//--- результат выполнения скрипта// a и b перед вызовом: 14 8// a и b после вызова: 28 4
struct str1
{
int time[];// в массиве порядка 10 тыс элементов
};
struct str2
{
str1 arr[];// в массиве порядка 1 тыс элементов
};
str2 m_name[]; // в массиве порядка 100 элементовint ArrFull[]; // массив в который нужно собрать отсортированное время без повторений//+------------------------------------------------------------------+voidOnStart()
{
// считаем что m_name[] ранее уже заполнилиint tempArr[];// объявляю дополнительный массивint size1 = ArraySize(m_name);
for(int i = 0; i < size1; i++)
{
int size2 = ArraySize(m_name[i].arr);
for(int j = 0; j < size2; j++)
{
// копирую в дополнительный массив все массивы времени из структурArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
}
}
// сортирую дополнительный массивArraySort(tempArr);
int size = ArraySize(tempArr);
ArrayResize(ArrFull, size);
ArrFull[0] = tempArr[0];
int j = 1;
// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работатьfor(int i = 1; i < size; i++)
if(ArrFull[j - 1] != tempArr[i])
{
ArrFull[j] = tempArr[i];
j++;
}
size = ArrayResize(ArrFull, j);
// дальше продолжение. много много букв
}
//+------------------------------------------------------------------+
ありがとう、アレクサンダー。あなたの修正でコードが機能するようになりました。正直なところ、私自身、三本松で混乱していたことに気づきました。関数に引数を渡すことをもう一度勉強する必要がある。 どうやら私はここで完全な誤解をしているようだ。
ありがとう、ウラジミール。
グローバル領域に変数を出力することは、関数に引数を渡すことではない。
関数の入力で変数名の前に&をつければ、すべての問題は解決する。
グローバル・スコープに変数を出力することは、関数に引数を渡すことではない...
関数の入力で変数名の前に&をつければ、すべての問題は解決する。
こんにちは、アレクセイ!ありがとうございます! 私の頭はすべて壊れていました!脳みそだけでは足りないことがわかったよ!!!!))
ありがとう、ウラジーミル。
関数の入力で変数名の前に&をつければ、すべての問題は解決する
リファレンスを使った関数についてのビデオを 見つけたので見た。このビデオレッスンを見て、私は単なる初心者向けのMQL5レッスンではなく、特にバカな才能を持った初心者向けのMQL5 レッスンが必要だと気づいた。要するに、私は何も理解していなかったのだ。一般的には、受け取った情報をすべて消化し、このビデオを5回でも6回でも見直す必要がある。でも、暇なときにやることはあるだろう!))
ありがとう、ウラジミール。
リンクのある関数についてのビデオを見つけて見た。このビデオレッスンから、私は単なる初心者 向けの MQL5 レッスンではなく、特にバカの才能に恵まれた初心者向けのMQL5 レッスンが必要だと気づいた。要するに、私は何も理解していなかったのだ。一般的には、受け取った情報をすべて消化し、このビデオを5回も6回も見直す必要がある。でも、暇なときにやることはあるだろう!))
ありがとう、ウラジミール。
たとえ使うところがなくても、時間を無駄にしてはいけない。先生」の名前が物語っている。ディレッタントはディレッタントだ。
このビデオは3分間しか役に立たない。そして残りは気が散るだけで、有益な情報を失ってしまう。
ドキュメントを 注意深く読み、例を使って実験した方がいい。
時間を無駄にするな、たとえ無駄な場所がなくても。先生」の名前だけでわかる、素人は素人。
このビデオに有益な情報は3分しかない。あとは気が散るだけで、有益な情報を失ってしまう。
ドキュメントを 注意深く読み、例題で実験した方がいい。そうすればすべてを理解できるだろう。
アレクセイ、ありがとう。ビデオレッスンの方が有益で役に立つと思ったが、まったく逆だった。MQL5リファレンスマニュアルのパラメータ送信の セクションも同じように読みましたが、「本を見ると図が見える!」という有名なことわざのようになってしまいました。何も理解できなかった。要するに、もちろん、もう何回か読み直して実験してみるつもりだ。))
ありがとう、ウラジミール。
ビデオ・チュートリアルを見たり、MQL5リファレンス・マニュアルで参照渡しの引数について 読んだりした結果、だいたい理解できたように思います。しかし、リファレンス・マニュアルで紹介されているコードを分析したところ、ある断片がまだ当惑を引き起こしていました:
この点に関して、MQL5プログラミングの専門家に質問があります。なぜOnStart()のd 変数にSecondMethod(a,b ) 関数を「押し込んだ」のでしょうか?スクリプトを正しく動作させるための前提条件なのでしょうか、それとも私がまた何か誤解しているのでしょうか?
語句, ウラジミール.
助けてください。
時刻を持つ多くの配列があり、これらの配列のいくつかの要素の時刻が一致することがあります。
私は、時間の値を繰り返すことなく、それらを1つの配列に収集する必要があります。
私はこのようにしました:
しかし、とても遅いコードになってしまった。もっと速くする必要がある。どうすればいい?
この点に関して、MQL5プログラミングの専門家に質問があります。なぜOnStart()のd 変数にSecondMethod(a,b ) 関数を「押し込んだ」のでしょうか?スクリプトを正しく動作させるための前提条件なのでしょうか?
ヴラジミール。
変数dには、関数の実行結果が代入されます。
Artyomさん、ご回答ありがとうございます!代入 なしで 関数SecondMethod(a,b)だけを 使用する ことは不可能 ですか?
よろしくお願いします。
Artyomさん、回答ありがとうございます!代入 せずに SecondMethod(a,b) という関数だけを使う ことはできないのでしょうか?
ウラジミールさん、よろしくお願いします。