template<typename T>
class A { protected:
A( T t ) : t( t ) {}
T t;
};
class B : A<int> {
B() : A<int>( 1 ) {} //'<' - member(s) initialization expected
};
voidOnStart()
{
int Kol_Kan=10; //Количество элементов для копированияdouble HI[]; //массив для хранения максимумов на интервалеdouble LO[]; //массив для хранения минимумов на интервалеCopyHigh(_Symbol,0,2,Kol_Kan,HI);//копируем значения максимумовCopyLow(_Symbol,0,2,Kol_Kan,LO); //копируем значения минимумовArrayResize(HI,Kol_Kan); //устанавливаем размер массиваArrayResize(LO,Kol_Kan);
int in_max=0; //индекс максимального значения в массивеint in_min=0;
in_max=ArrayMaximum(HI,WHOLE_ARRAY,0); //Находим индексы максимума и мин в массивах
in_min=ArrayMinimum(LO,WHOLE_ARRAY,0);
double hi_max; // максимальное значение цены double lo_min; // минимальное значение цены
hi_max=HI[in_max]; //Переносим значения максимумов и мин в переменные
lo_min=LO[in_min];
Alert(hi_max,"___",lo_min);
}
MT 4. OnTick() 内の MathRand()乱数発生器。 ふくろうのテストでは、同じ設定で再度実行すると、異なる結果が得られます。生成された数値がアルゴリズムに影響を与えるのであれば、これは当然のことです。
最適化を行うと、なぜか同じ設定で2回目の実行でも同じ結果が得られます。つまり、最適化モードではMathRand()は動作しないのですね。
次に、(ここで間違いを犯すかもしれないので、Alexander Puzanovに 訂正してもらいたいのですが)プログラマが何らかの理由で動的配列に インデックス20の項目を追加することにしても、何も悪いことは起こりません。配列はこの次元を取り、そこに値を書き込み、「足りない」インデックスをゼロ値で初期化します。
その通りです。なぜ「ゼロ」なのか?EMPTY_VALUEにすべきなのでは?それともWRONG_VALUE?
このような暗黙の代入の問題は、まさにその暗黙の性質にあります。コンパイラがあるコードを導入すると、あるプログラマはある方法を考え、別のプログラマは異なる方法を考えるかもしれません。
さらに非効率的です。変数をすぐに初期化する必要があるとは限りませんし、ループの中で大きな配列を初期化すると、速度が著しく低下してしまうからです。
そして3つ目は、プログラマーが次元と使用するインデックスをコントロールすることを誰も妨げないという ことですただ一つ違うのは、今はそれをせざるを 得ないということだ)))
もしコンパイラが配列の次元そのものを記録していたら、どのクラスもこのコードをクリーンアップすることはできないでしょう。効率が落ちる可能性は大いにあります。
同時に、コンパイラがこの作業を行わない場合、プログラマはこれを行うクラスを書き、必要に応じてゼロで拡張・初期化される配列を使用することができます。
2番目のケースでは、柔軟性が高くなります。
ですから、あなたが提案するものは、多くの場合、良い解決策にもなります。しかし、効率が悪くなる可能性があり、それは良くないことです。
これは原理的に、動的配列に 通常充填される方法の簡単な例である。長いことCで書いてないので覚えていませんが、phpでは配列はこうやって埋めるんですねー。すべてが論理的で理解しやすい。配列に要素を追加する(arr[] = x)と、配列は自動的に展開され、その要素は配列の末尾に追加されます。しかも、自分で伸ばす必要もないし、要素のインデックスを自分で指定する必要もない。しかし、ここでは絶対に無駄な動きをしなければならない。
その差は歴然としている...。
私見ですが、はっきり言っておかしいと思います ))))
プログラミング言語は、厳密に型付けされたものとそうでないものに分けられる。あなたが使っているPHPやRなどの関数型言語は、非厳格型に属します。MQLやC#、Javaのような厳格な型付き言語では、このような曖昧なデータ操作は許されない。そして、これは特にプログラマー自身の安全のために行われます。厳密な型付けとは、各手続きが極めて特殊であることを意味します。「配列のインデックス0の要素を取り出す」という手続きは特殊で明確ですが、あなたはそれを「配列から何かを取り出して、コンパイラが最初に返すと決めたものに追加する」と置き換えようと提案しているのです。- これでは埒が明かないということで合意したのでしょう。
一方、もちろん、面倒な配列のサイズ変更や、ユーザーによる頻繁な並べ替えのない、シンプルでハイレベルなコンストラクトも欲しいところです。そのための標準ライブラリなのです。基本的な配列を使用する代わりに、Arrayグループのクラスに切り替えてください。例えば、CArrayInt配列に0から16まで足すとこんな感じです。
ご覧のように、自然すぎることはありません。また、現在の配列の大きさなど、並べ替えに頭を悩ませる必要もありません。厳密なタイピングの範囲内で、すべてをあなたに代わって行い、あなたはユーザータスクに直接集中するよう誘われるのです。これがOOPのパワーであり、ポイントなのです。
フル収録はしておりません。コンパイルエラー
どこが間違っているのかがわからない。
課題は、ある区間における最大 値と最小値を求める ことである
ArrayMaximum()、ArrayMinimum()の引数の順序が正しくない。
どこが間違っているのかがわからない。
課題は、ある区間における最大 値と最小値を求める ことである
機能
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//極大値のコピー
CopyLow(_Symbol,0,2,Kol_Kan,LO); //極小 値のコピー
は、すでに配列のサイズを変更しています。
これは不要です
ArrayResize(HI,Kol_Kan); //配列サイズを設定 する。
ArrayResize(LO,Kol_Kan) です。
Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().
その通りです))そして、ここで私は考えました。
機能
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//極大値のコピー
CopyLow(_Symbol,0,2,Kol_Kan,LO); //極小 値のコピー
は、すでに配列のサイズを変更しています。
これは不要です
ArrayResize(HI,Kol_Kan); //配列サイズを設定 する。
ArrayResize(LO,Kol_Kan) です。
これを知っておきます、ありがとうございました。
一方、著者はすでにそれを理解している。))
PabloEs:
その通りです))そして、ここで私は考えました。