Eine Aufwärmübung für die Schule, um Ihre Zeit zu vertreiben - Seite 7

 
Nikolai Semko:
Ist es das?
Im Moment nicht am Computer.
Ich glaube, ich habe es ausprobiert. ME kannte diese Funktion nicht und fand sie auch nicht in der Hilfe unter F1
Meines Wissens handelt es sich um eine AlgLib-Bibliothek

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

 
Aleksey Nikolayev:

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

Ja, ja. Umsetzung ...

Es ist eine Lib, sie sollte so ablaufen:

1. Bei Null gibt das Array den vom Standardkonstruktor initialisierten Wert zurück (bei Primitiven ist es 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. Bei null Array stürzt es zur Laufzeit ab.

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. Gibt eine Struktur zurück, die den Ergebniscode und den Betrag enthält.

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;
}

Die Methode heißt "Was immer Sie wollen")))

Ich habe sie mit der Hand geschrieben, vielleicht habe ich also irgendwo einen Fehler gemacht.

 
Aleksey Nikolayev:
Das Cramersche Theorem ist in diesem Buch enthalten (Anhang, Seite 102).

Danke! Es stellt sich heraus, dass es sehr einfach ist, durch den (komplizierten) Kreissatz zu beweisen.

 
Vladimir Simakov:

Ja, das stimmt. Umsetzung ...

Es ist eine Lib, sie sollte so ablaufen:

1. Bei Null gibt das Array den vom Standardkonstruktor initialisierten Wert zurück (bei Primitiven ist es 0)

2. Bei null Array stürzt es zur Laufzeit ab.

3. Gibt eine Struktur zurück, die den Ergebniscode und den Betrag enthält.

Die Methode heißt "Was immer Sie wollen")))

Ich habe es mit der Hand geschrieben, vielleicht habe ich also irgendwo einen Fehler gemacht.

Nun, es wurde geschrieben: "Wir machen es wie in R, aber schneller", denn in C++ wurde es nicht versprochen.

 
Aleksey Nikolayev:

Nun, es wurde geschrieben "tun wie in R, nur schneller", wie in C++ ist nicht versprochen.

Schwache Ausrede.

Tun wie in R... Ich weiß es nicht, R ist nicht in meinem Stapel.

Außer, dass man keine Templates verwendet, wenn man eine Bibliothek in C++ schreibt (wenn sie wie C++ aussieht, wie C++ riecht und sogar UB hat, ist das ein Hinweis...) - es ist irgendwie ...

 
Aleksey Nikolayev:

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

Es steht zwar in der Hilfe, aber der Compiler sieht es nicht.
Geht es nur mir so?


Ich habe gerade gesehen, dass Sie

#include <Math\Stat\Math.mqh>

Es muss sich also um eine externe Bibliothek handeln.
Noch einmal: Ich sehe keinen Sinn darin, Ihr Programm mit zusätzlichen Bibliotheken zu belasten, nur um eine einzige Codezeile zu sparen.

 
Nikolai Semko:


Noch einmal: Ich sehe keinen Sinn darin, Ihr Programm mit zusätzlichen Bibliotheken zu belasten, um eine einzige Codezeile zu sparen.

Das Programm für den Sonderfall ist - ist. Die Spitzfindigkeiten über MathSum sind unbedeutend

auf dem Hintergrund eines wesentlicheren Problems: oben wurde festgestellt, dass diese Lösung nur funktioniert, wenn der Mittelpunkt des umschriebenen Kreises innerhalb der Figur liegt.

Das heißt, wir brauchen ein weiteres Kriterium für die Anwendbarkeit. "Für dieses kannst du gerne, aber für dieses kann ich nicht".

Jetzt ist das Thema direkt mit der Optimierung des Optimierers verbunden...

 
Maxim Kuznetsov:

das Programm für den Sonderfall ist da - es ist da. Die Spitzfindigkeiten über MathSum sind unbedeutend

auf dem Hintergrund eines wesentlicheren Problems: oben wurde festgestellt, dass diese Lösung nur funktioniert, wenn der Mittelpunkt des umschriebenen Kreises innerhalb der Figur liegt.

Das heißt, wir brauchen ein weiteres Kriterium für die Anwendbarkeit. "Für diesen Fall können Sie gerne Ergebnisse erzielen, aber für diesen Fall kann ich das nicht".

Jetzt ist das Thema direkt mit der Optimierung des Optimierers verbunden...

Auf den ersten Blick ändert sich nur die Gleichung zur Bestimmung von R.

1) Im Falle der Mitte innen: A1+A2+...+An=2*Pi
2) Im Falle der Mitte außen: A1-A2-...-An=0, wobei A1 der Winkel für die längste Seite ist.

Wir müssen also nur festlegen, wie wir zwischen den beiden Fällen unterscheiden können.

PS. Im Allgemeinen muss man die Summe der Winkel Ai berechnen, vorausgesetzt, der Radius ist gleich der Hälfte der maximalen Seite. Ist er kleiner als 2*Pi, dann liegt der Mittelpunkt außerhalb des Polygons und umgekehrt.

 
Maxim Kuznetsov:

das Programm für den Sonderfall ist da - es ist da. Die Spitzfindigkeiten über MathSum sind unbedeutend

auf dem Hintergrund eines grundlegenderen Problems: oben wurde festgestellt, dass diese Lösung nur funktioniert, wenn der Mittelpunkt des umschriebenen Kreises innerhalb der Figur liegt.

Das heißt, wir brauchen ein weiteres Kriterium für die Anwendbarkeit. "Für dieses kannst du gerne, aber für dieses kann ich nicht".

Das Thema steht nun in direktem Zusammenhang mit der Optimierung des Optimierers...

Warum kann ich es nicht tun?
Sie brauchen nur Zeit zu verbringen, aber für welchen Zweck - ist nicht klar.

Ich glaube, Simakov hat es bereits getan. Stimmt, ich habe es nicht verstanden.

In Ordnung, ich versuche es auf meine Art. Um alles visuell zu verdeutlichen.

 

Dateien:
Zadacha3.mq5  9 kb