Un exercice d'échauffement scolaire pour occuper votre temps - page 7

 
Nikolai Semko:
C'est le cas ?
Je ne suis pas devant l'ordinateur pour le moment.
Je crois que je l'ai essayé. ME n'a pas reconnu cette fonction et ne l'a pas trouvée dans l'aide par F1.
Je crois savoir qu'il s'agit d'une bibliothèque 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

Oui. Mise en œuvre ...

C'est une librairie, c'est censé être comme ça :

1. A zéro le tableau retourne la valeur initialisée par le constructeur par défaut (pour les primitives c'est 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. A zéro tableau, il se plante en cours d'exécution.

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. Renvoie une structure contenant le code de résultat et le montant.

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

La méthode s'appelle "ce que vous voulez"))))

Je l'ai écrit à la main, donc peut-être que j'ai merdé quelque part.

 
Aleksey Nikolayev:
Le théorème de Cramer est dans ce livre (annexe, page 102).

merci ! il s'avère que c'est très facile à prouver grâce au théorème du cercle (compliqué).

 
Vladimir Simakov:

Ouaip. Mise en œuvre ...

C'est une librairie, c'est censé être comme ça :

1. A zéro le tableau retourne la valeur initialisée par le constructeur par défaut (pour les primitives c'est 0).

2. A zéro tableau, il se plante en cours d'exécution.

3. Renvoie une structure contenant le code de résultat et le montant.

La méthode s'appelle "ce que vous voulez"))))

Je l'ai écrit à la main, donc peut-être que j'ai merdé quelque part.

Eh bien, il était écrit : "nous le faisons comme en R mais plus rapidement", comme en C++ ce n'était pas promis.

 
Aleksey Nikolayev:

Eh bien, il a été écrit "faire comme dans R, mais plus rapidement", comme dans C++ n'est pas promis.

Faible excuse.

Faire comme dans R... Je ne sais pas, R n'est pas dans ma pile.

À l'exception de la non-utilisation de modèles lors de l'écriture d'une bibliothèque en C++ (si elle ressemble à C++, sent C++ et possède même UB, c'est suggestif...). - c'est en quelque sorte...

 
Aleksey Nikolayev:

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

C'est dans l'aide, mais le compilateur ne le voit pas.
C'est juste moi ?


Je viens de voir que vous avez

#include <Math\Stat\Math.mqh>

Il doit donc s'agir d'une bibliothèque externe.
Une fois encore, je ne vois pas l'intérêt d'alourdir votre programme avec des bibliothèques supplémentaires juste pour économiser une seule ligne de code.

 
Nikolai Semko:


Encore une fois, je ne vois pas l'intérêt d'alourdir votre programme avec des bibliothèques supplémentaires pour sauver une seule ligne de code.

Le programme pour le cas particulier est - est. Les quolibets sur MathSum sont insignifiants.

sur le fond d'un problème plus essentiel : on a remarqué plus haut que cette solution ne fonctionne que si le centre du cercle circonscrit se trouve à l'intérieur de la figure.

C'est-à-dire que nous avons besoin d'un autre critère d'applicabilité. "pour celui-là, tu es le bienvenu, mais pour celui-là, je ne peux pas".

Maintenant, le sujet est directement lié à l'optimisation de l'optimiseur...

 
Maxim Kuznetsov:

le programme pour le cas particulier est là - il est là. Les problèmes liés à MathSum sont insignifiants.

sur le fond d'un problème plus essentiel : on a remarqué plus haut que cette solution ne fonctionne que si le centre du cercle circonscrit se trouve à l'intérieur de la figure.

C'est-à-dire que nous avons besoin d'un autre critère d'applicabilité. "pour celui-ci, tu es le bienvenu pour obtenir des résultats, mais pour celui-là, je ne peux pas".

Maintenant le sujet est directement lié à l'optimisation de l'optimiseur...

A première vue, seule l'équation permettant de déterminer R va changer.

1) Dans le cas du centre intérieur : A1+A2+...+An=2*Pi
2) Dans le cas du centre extérieur : A1-A2-...-An=0, où A1 est l'angle du côté le plus long.

Il nous suffit donc de déterminer comment distinguer les deux cas.

PS. En général, vous devez calculer la somme des angles Ai à condition que le rayon soit égal à la moitié du côté maximum. Si elle est inférieure à 2*Pi, alors le centre est à l'extérieur du polygone et vice versa.

 
Maxim Kuznetsov:

le programme pour le cas particulier est là - il est là. Les quolibets sur MathSum sont insignifiants.

sur le fond d'un problème plus essentiel : on a remarqué plus haut que cette solution ne fonctionne que si le centre du cercle circonscrit se trouve à l'intérieur de la figure.

Autrement dit, nous avons besoin d'un autre critère d'applicabilité. "pour celui-là, tu es le bienvenu, mais pour celui-là, je ne peux pas".

Maintenant, le sujet est directement lié à l'optimisation de l'optimiseur...

Pourquoi je ne peux pas le faire ?
Vous avez juste besoin de temps à passer, mais dans quel but - n'est pas clair.

Je pense que Simakov l'a déjà fait. C'est vrai, je ne l'ai pas compris.

Très bien, je vais essayer à ma façon. Pour que tout soit visuellement clair.

 

Dossiers :
Zadacha3.mq5  9 kb
Raison: