時間を占有する学校のウォームアップ運動 - ページ 7

 
Nikolai Semko:
そうなんですか?
今パソコンにいないんです。
試してみたつもりです。MEはこの機能を認識しておらず、F1によるヘルプでも見つけられませんでした。
私の理解では、AlgLibのライブラリである

https://www.mql5.com/ru/docs/standardlibrary/mathematics/stat/mathsubfunctions/statmathsum

 
Aleksey Nikolayev:

https://www.mql5.com/ru/docs/standardlibrary/mathematics/stat/mathsubfunctions/statmathsum

そうですね。インプリメンテーション ...

リブだから、こうなるのは当たり前なんだけどね。

1.配列が0のとき,デフォルトコンストラクタで初期化された値を返す(プリミティブの場合は0)

template<typename T>
T MathSum(const T &arr[]){
   T sum=T();
   for (int i=0,size=ArraySize(arr);i<size;sum+=arr[i++]);
   return sum;
}

2.配列がゼロの場合、実行時にクラッシュします。

template<typename T>
T MathSum(const T &arr[]){
   T sum=arr[0];
   for (int i=1,size=ArraySize(arr);i<size;sum+=arr[i++]);
   return sum;
}

3.結果コードと金額を含む構造体を返す。

template<typename T>
struct SRet{
   int retCode; //0 - Ок, -1 - Not initialized
   T res;
   SRet():retCode(-1){}
   SRet(uint code,const T &_res):retCode(code),res(_res){}
   SRet(const SRet<T> &other) {this=other;}
   bool operator !() const {return retCode!=0;}
};

template<typename T>
SRet<T> MathSum(const T &arr[]){
   int size=ArraySize(arr);
   if (!size) return SRet<T>();
   SRet<T> ret(0,arr[0]);
   for (int i=1,size=ArraySize(arr);i<size;ret.res+=arr[i++]);
   return ret;
}

好きなように」というメソッドです)))

手書きで書いたので、どこかで失敗したのかもしれません。

 
Aleksey Nikolayev:
クラマーの定理は本書に載って いる(付録、102ページ)。

ありがとうございます!(複雑な)円の定理によって、とても簡単に証明できることがわかりました。

 
Vladimir Simakov:

そうですね。インプリメンテーション ...

リブだから、こうなるのは当たり前なんだけどね。

1.配列が0のとき,デフォルトコンストラクタで初期化された値を返す(プリミティブの場合は0)

2.配列がゼロの場合、実行時にクラッシュします。

3.結果コードと金額を含む構造体を返す。

好きなように」というメソッドです)))

手書きで書いたので、どこかで失敗しているかもしれません。

まあ、C++では約束されていなかったので、「Rと同じようにやるけど、もっと速く」と書かれていたのですが。

 
Aleksey Nikolayev:

まあ、C++が約束されていないように、「Rと同じように、ただ速くする」と書かれていました。

言い訳がましい。

Rのようにすること...Rは私のスタックには入っていないのでわかりません。

ただし、C++でライブラリを書くときにテンプレートを使わないこと(見た目がC++で、C++の匂いがして、さらにUBがあれば示唆的ですが......)。- というわけで

 
Aleksey Nikolayev:

https://www.mql5.com/ru/docs/standardlibrary/mathematics/stat/mathsubfunctions/statmathsum

ヘルプに書いてあるんだけど、コンパイラが見てくれない。
私だけでしょうか?


今、見たところでは

#include <Math\Stat\Math.mqh>


もう一度言いますが、1行のコードを節約するために、プログラムに追加のライブラリを負担させる意味があるとは思えません。

 
Nikolai Semko:


もう一度言いますが、1行のコードを節約するために、プログラムに余分なライブラリを負担させる意味があるとは思えません。

特別な場合のプログラムは-である。MathSumに関する屁理屈は取るに足らないものです

この解法は、外接円の中心が図形の中に入っている場合のみ有効であることに気づきました。

つまり、適用可能かどうかの基準がもう一つ必要なのです。"これについては、結果を出すのは自由だが、これについては無理だ "と。

さて、話題はオプティマイザーの最適化に直結するのですが...。

 
Maxim Kuznetsov:

特別なケースのためのプログラムはそこにある。MathSumに関する屁理屈は取るに足らないものです

という、より本質的な問題を背景に、この解法は外接円の中心が図形の中に入っている場合にのみ有効であることに気づかされました。

つまり、適用可能かどうかの基準がもう一つ必要なのです。"これについては、結果を出すのは自由だが、これについては無理だ "と。

さて、話題はオプティマイザーの最適化に直結するのですが...。

一見すると、Rを決定する式だけが変わる。

1) 中心が内側の場合: A1+A2+...+An=2*Pi
2) 中心が外側の場合: A1-A2-...-An=0, ただしA1 は長辺に対する角度

したがって、この2つのケースをどのように区別するかということだけを考えればよいのです。

PS.一般に、半径が最大辺の半分に等しいことを条件として、角度の和Aiを計算する必要がある。2*Piより小さい場合、中心はポリゴンの外側にあり、その逆もまた然りである。

 
Maxim Kuznetsov:

特別なケースのためのプログラムはそこにある。MathSumに関する屁理屈は取るに足らないものです

という、より本質的な問題を背景に、この解法は外接円の中心が図形の中に入っている場合にのみ有効であることに気づかされました。

つまり、適用可能かどうかの基準がもう一つ必要なのです。"これについては歓迎するが、これについては無理だ "と。

今はオプティマイザーの最適化に直接関係するテーマですが...。

なぜできないのか?
ただ、過ごす時間が必要なのであって、何のために - は明確ではありません。

シマコフはもうやったと思う。本当だ、理解できていなかった。

よし、私のやり方でやってみよう。す べてを視覚的にわかりやすくすること。

 

ファイル:
Zadacha3.mq5  9 kb