Un esercizio di riscaldamento scolastico per occupare il tuo tempo - pagina 7

 
Nikolai Semko:
Lo è?
Non al computer in questo momento.
Credo di averla provata. ME non ha riconosciuto questa funzione e non l'ha trovata nell'aiuto con F1
La mia comprensione è che si tratta di una libreria 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

Sì... Attuazione ...

È un lib, dovrebbe andare così:

1. A zero l'array restituisce il valore inizializzato dal costruttore di default (per le primitive è 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 zero array, si blocca in runtime.

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. Restituisce una struttura contenente il codice del risultato e l'importo

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

Il metodo si chiama "come vuoi tu")))

L'ho scritto a mano, quindi forse ho sbagliato da qualche parte.

 
Aleksey Nikolayev:
Il teorema di Cramer è in questo libro (Appendice, pagina 102).

Grazie! risulta essere molto facile da dimostrare attraverso il teorema del cerchio (complicato).

 
Vladimir Simakov:

Sì. Attuazione ...

È un lib, dovrebbe andare così:

1. A zero l'array restituisce il valore inizializzato dal costruttore di default (per i primitivi è 0)

2. A zero array, si blocca in runtime.

3. Restituisce una struttura contenente il codice del risultato e l'importo

Il metodo si chiama "come vuoi tu")))

L'ho scritto a mano, quindi forse ho sbagliato da qualche parte.

Beh, è stato scritto: "lo facciamo come in R ma più velocemente", come in C++ non è stato promesso.

 
Aleksey Nikolayev:

Beh, è stato scritto "fai come in R, solo più veloce", come in C++ non è promesso.

Una scusa debole.

Fare come in R... Non lo so, R non è nella mia pila.

Eccetto, non usare template quando si scrive una libreria in C++ (se sembra C++, odora come C++ e ha anche UB, è suggestivo...) - è in qualche modo ...

 
Aleksey Nikolayev:

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

È nell'aiuto, ma il compilatore non lo vede.
Sono solo io?


Ho appena visto che hai

#include <Math\Stat\Math.mqh>

Quindi deve essere una libreria esterna.
Ancora una volta, non vedo il senso di appesantire il vostro programma con librerie aggiuntive solo per salvare una singola riga di codice.

 
Nikolai Semko:


Ancora una volta, non vedo il senso di appesantire il vostro programma con librerie extra per salvare una sola riga di codice.

Il programma per il caso speciale è - è. I cavilli su MathSum sono insignificanti

sullo sfondo di un problema più essenziale: sopra abbiamo notato che questa soluzione funziona solo se il centro del cerchio circoscritto si trova all'interno della figura.

Cioè, abbiamo bisogno di un altro criterio di applicabilità. "Per questo sei il benvenuto, ma per questo non posso".

Ora l'argomento è direttamente collegato all'ottimizzazione dell'ottimizzatore...

 
Maxim Kuznetsov:

il programma per il caso speciale è lì - è lì. I cavilli su MathSum sono insignificanti

sullo sfondo di un problema più essenziale: sopra si è notato che questa soluzione funziona solo se il centro del cerchio circoscritto cade all'interno della figura.

Cioè, abbiamo bisogno di un altro criterio di applicabilità. "per questo sei il benvenuto a ottenere risultati, ma per questo non posso".

Ora l'argomento è direttamente collegato all'ottimizzazione dell'ottimizzatore...

A prima vista, cambia solo l'equazione per determinare R.

1) Nel caso del centro interno: A1+A2+...+An=2*Pi
2) Nel caso del centro esterno: A1-A2-...-An=0, dove A1 è l'angolo del lato più lungo.

Quindi, dobbiamo solo determinare come distinguere i due casi.

PS. In generale, bisogna calcolare la somma degli angoli Ai a condizione che il raggio sia uguale alla metà del lato massimo. Se è inferiore a 2*Pi, allora il centro è fuori dal poligono e viceversa.

 
Maxim Kuznetsov:

il programma per il caso speciale è lì - è lì. I cavilli su MathSum sono insignificanti

sullo sfondo di un problema più essenziale: sopra si è notato che questa soluzione funziona solo se il centro del cerchio circoscritto cade all'interno della figura.

Cioè, abbiamo bisogno di un altro criterio di applicabilità. "Per questo sei il benvenuto, ma per questo non posso".

Ora l'argomento è direttamente collegato all'ottimizzazione dell'ottimizzatore...

Perché non posso farlo?
Hai solo bisogno di tempo da spendere, ma per quale scopo - non è chiaro.

Credo che Simakov l'abbia già fatto. È vero, non l'ho capito.

Va bene, proverò a modo mio. Per rendere tutto visivamente chiaro.

 

File:
Zadacha3.mq5  9 kb