Um exercício de aquecimento escolar para ocupar seu tempo - página 7

 
Nikolai Semko:
Será?
No momento, não no computador.
Acho que já tentei. ME não reconheceu esta função e não a encontrou na ajuda de F1
Meu entendimento é que se trata de uma biblioteca 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

Sim. Implementação ...

É uma libra, é suposto ser assim:

1. Com matriz zero retorna valor inicializado por construtor padrão (para primitivos é 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. Com matriz zero, ele cai em tempo de execução.

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. Devolve uma estrutura contendo o código de resultado e o montante

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

O método é chamado de "o que você quiser")))

Eu o escrevi à mão, então talvez eu tenha feito asneira em algum lugar.

 
Aleksey Nikolayev:
O teorema de Cramer está neste livro (Apêndice, página 102).

Obrigado! afinal é muito fácil de provar através do teorema (complicado) do círculo.

 
Vladimir Simakov:

Sim. Implementação ...

É uma libra, é suposto ser assim:

1. Com matriz zero retorna valor inicializado por construtor padrão (para primitivos é 0)

2. Com matriz zero, ele cai em tempo de execução.

3. Devolve uma estrutura contendo o código de resultado e o montante

O método é chamado de "o que você quiser")))

Eu o escrevi à mão, então talvez eu tenha feito asneira em algum lugar.

Bem, foi escrito "fazemos como em R mas mais rápido", como em C++ não foi prometido.

 
Aleksey Nikolayev:

Bem, foi escrito "fazer como em R, somente mais rápido", como em C++ não está prometido.

Desculpa fraca.

Fazendo como em R... Não sei, R não está na minha pilha.

Exceto, não usar modelos ao escrever uma biblioteca em C+++ (se parecer C+++, cheirar como C++ e até tem UB, isso é sugestivo...) - é de alguma forma ...

 
Aleksey Nikolayev:

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

Está na ajuda, mas o compilador não o vê.
É só eu?


Acabei de ver que você tem

#include <Math\Stat\Math.mqh>

Portanto, deve ser uma biblioteca externa.
Mais uma vez, não vejo o objetivo de sobrecarregar seu programa com bibliotecas adicionais apenas para salvar uma única linha de código.

 
Nikolai Semko:


Mais uma vez, não vejo o objetivo de sobrecarregar seu programa com bibliotecas extras para salvar uma única linha de código.

O programa para o caso especial é - é. As questiúnculas sobre o MathSum são insignificantes

sobre o fundo de um problema mais essencial: acima notamos que esta solução só funciona se o centro do círculo circunscrito entrar dentro da figura.

Ou seja, precisamos de outro critério para a aplicabilidade. "para este você é bem-vindo para obter resultados, mas para este eu não posso".

Agora o tema está diretamente relacionado à otimização do otimizador...

 
Maxim Kuznetsov:

o programa para o caso especial está lá - ele está lá. As questiúnculas sobre o MathSum são insignificantes

sobre o fundo de um problema mais essencial: acima notamos que esta solução só funciona se o centro do círculo circunscrito cair dentro da figura.

Ou seja, precisamos de outro critério para a aplicabilidade. "para este você é bem-vindo para obter resultados, mas para este eu não posso".

Agora o tema está diretamente relacionado à otimização do otimizador...

À primeira vista, somente a equação para determinar R mudará.

1) No caso do centro dentro: A1+A2+...+An=2*Pi
2) No caso do centro fora: A1-A2-...-An=0, onde A1 é o ângulo para o lado mais longo.

Portanto, só precisamos determinar como distinguir entre os dois casos.

PS. Em geral, você precisa calcular a soma dos ângulos Ai desde que o raio seja igual à metade do lado máximo. Se for menos de 2*Pi, então o centro está fora do polígono e vice versa.

 
Maxim Kuznetsov:

o programa para o caso especial está lá - ele está lá. As questiúnculas sobre o MathSum são insignificantes

sobre o fundo de um problema mais essencial: acima notamos que esta solução só funciona se o centro do círculo circunscrito cair dentro da figura.

Ou seja, precisamos de outro critério para a aplicabilidade. "para este você é bem-vindo, mas para este eu não posso".

Agora o assunto está diretamente relacionado à otimização do otimizador...

Por que eu não posso fazer isso?
Você só precisa de tempo para gastar, mas para que propósito - não está claro.

Eu acho que Simakov já o fez. É verdade, eu não o entendi.

Tudo bem, vou tentar do meu jeito. Para deixar tudo visualmente claro.

 

Arquivos anexados:
Zadacha3.mq5  9 kb
Razão: