ponteiro para um pedaço de dados de tamanho 4 ou 8 bytes.
O tamanho depende da plataforma por causa do alinhamento. Se você usar algo como pragma pack 1, o tamanho será o mesmo (1 byte provavelmente)
Às vezes eu também procuro no VS C++, compilar em modo de listagem porsm e depois olho para ele, muita coisa fica clara. Sim, parece assustador, mas o asm é a verdade absoluta em último recurso. E a linguagem não é difícil de entender. É difícil escrevê-lo corretamente))
Это рекурсия просто. Быстрая сортировка как раз таки и применяет рекурсивный вызов функции. О принципах, преимуществах и недостатках ее использования можете почитать в интернете. И да, это применительно к любому ЯП. В кратце скажу, что главное требование рекурсии - это то, что бы последующий вызов рекурсии приближал алгоритм к завершению. Ну и главный недостаток это требование к оперативной памяти при большое обработке данных, так как каждый вызов такой рекурсии будет блокировать память.... Простой пример с рекурсией на том же си и нахождению факториала в 2 вариациях.
1) Рекурсия внутри 1 функции:
longlong Factorial(int n){
if(n == 1) return1;
return n * Factorial(n-1); // Здесь выполнил требование приближение рекурсии к завершению(то есть n стремится к 1(где исполнится условие выше))
}
2) Рекурсия между несколькими функциями:
int Fun2(int); // Прототип.int Fun1(int i){
if(i == -5){return i;}
return i + Fun2(i-1);
}
int Fun2(int i){
if(i == -5){return i;}
return i + Fun1(i-1);
}
SZZY: pesquisado no Google e não encontrei nenhum outro código fonte Hamming, links para outras fontes são bem-vindos (não a rede Hopfield!!! - o google sempre os dá juntos)
Quero portar este código fonte para a MQL, mas não tenho certeza se posso lidar com std::deque.
é uma lista bidirecional. o código acima só tem push_back, então é possível que você possa substituí-lo por um vetor.
se não, você pode fazer uma simples implementação de deque via array com uma reserva desde o início e fim. em STL é de alguma forma implementado dessa forma.
esta é uma lista bidirecional. no código acima só existe o push_back, portanto há uma chance de que ele possa ser substituído por um vetor.
Caso contrário, você pode fazer uma simples implementação de deque através de matriz com redundância inicial e final.
Eu pesquisei std::deque e é como você escreve, mas... Não sei como usá-lo e apenas substituí-lo por um vetor... Em geral, o exemplo é um tutorial, eu não gostaria de fazer asneira e ter certeza de que é assim que deve funcionar mal ))))
ZS: Há também um exemplo em F# - mas eu acho que é demais ;)
SZY: Google, que eu não encontrei em tempo real outras fontes da rede Hamming, links para outras fontes também são bem-vindos (não é rede Hopfield!!! - google sempre os dá juntos)
Igor, eu não acho razoável escrever um deque, um vetor será suficiente na grande maioria dos casos. Eu reescrevi seu exemplo usando um vetor da linha sobre stl:
#include <myincl/1_mystd.mqh>
template <typename T>
void fill_vector_from_array(vector_fund<T> &dest, const T &src[]) {
dest.clear();
for (int i = 0; i < ArraySize(src); ++ i)
dest.push_back(src[i]);
}
template <typename T>
void fill_vector(vector_fund<T> &dest, T val) {
for (uint i = 0; i < dest.size(); ++ i)
dest.a[i] = val;
}
class net
{ vector_ref<vector_fund<float>> w; // весовые коэффициенты (== это образцам)constuint n; // количество входов сетиfloat activation(float v) const {
return v>n?n:v<0?0:v;
}
public:
net(unsigned numInputs):n(numInputs){}
unsigned learnImage(constfloat &image[]) {
vector_fund<float> tmp;
fill_vector_from_array(tmp, image);
w.push_back(tmp);
return w.size();
}
unsigned recognizeImage(constfloat &image[]) const {
vector_fund<float> axons(this.w.size());
fill_vector<float>(axons, 0);
float sum1=.0, sum2=.0, e=0.95 f/w.size();
unsigned i,j;
vector_fund<float> image_vec;
fill_vector_from_array(image_vec, image);
for(i=0; i < w.size(); ++i) { // цикл инициализации сетиfor(j=0; j < n; ++j)
axons.a[i] += image_vec.a[j]*w.a[i].a[j];
sum1 += axons.a[i] = activation(0.5 f*(axons.a[i]+float(n) ) );
}
while( sum2 != sum1 ) { // цикл пока выходы сети изменяются
sum1 = 0.0 f * ( sum2 = sum1 );
for(i=0; i < w.size(); ++i)
sum1 += axons.a[i] = activation( axons.a[i]-e*(sum2-axons.a[i]) );
}
for(i=w.size()-1; i!=(uint)-1 && !axons.a[i--];); // поиск активного аксона сети return i;
}
};
unsigned fn() {
// создал несколько массивов, отказывается мкл передавать многомерные массивы.
float a1_0[15] = {1.,1.,1., 1.,-1.,-1., 1.,-1.,-1., 1.,-1.,-1., 1.,1.,1.}; // символ Сfloat a1_1[15] = {1.,1.,1., 1.,-1.,-1., 1.,1.,-1., 1.,-1.,-1., 1.,1.,1.}; // Символ Efloat a1_2[15] = {1.,1.,1., 1.,-1.,1., 1.,-1.,1., 1.,-1.,1., 1.,1.,1.}; // Символ Оfloat a1_3[15] = {1.,1.,1., 1.,-1.,1., 1.,-1.,1., 1.,-1.,1., 1.,1.,1.}; // искаженный
net n(15);
n.learnImage( a1_0 );
n.learnImage( a1_1 );
n.learnImage( a1_2 );
return n.recognizeImage( a1_3 );
}
voidOnStart()
{
Alert( fn() );
}
Não quero estragar tudo e ter certeza de que deve funcionar de forma imprópria ))))
Para verificar isso, eu testei o código fonte e o µl code
Igor, eu não acho que seja razoável escrever um deque, um vetor é suficiente na grande maioria dos casos. Eu reescrevi seu exemplo usando o vetor da linha sobre stl:
Para verificar, eu executei com fonte plus e código µl como
em ambos os casos obteve: 1 1 0 4294967295
HH: a propósito, no código fonte pareceu ser um erro - overrun array (o camarada esqueceu de adicionar -1)
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
ponteiro para um pedaço de dados de tamanho 4 ou 8 bytes.
O tamanho depende da plataforma por causa do alinhamento. Se você usar algo como pragma pack 1, o tamanho será o mesmo (1 byte provavelmente)
Às vezes eu também procuro no VS C++, compilar em modo de listagem porsm e depois olho para ele, muita coisa fica clara. Sim, parece assustador, mas o asm é a verdade absoluta em último recurso. E a linguagem não é difícil de entender. É difícil escrevê-lo corretamente))
Sim, obrigado... como eles dizem, eu sabia mas esqueci, pois não sou programador e raramente o faço :)
Quero portar este código fonte para a MQL, mas não tenho certeza se posso lidar com std::deque.
retirado daqui:https://habr.com/ru/sandbox/43916/
SZZY: pesquisado no Google e não encontrei nenhum outro código fonte Hamming, links para outras fontes são bem-vindos (não a rede Hopfield!!! - o google sempre os dá juntos)
Quero portar este código fonte para a MQL, mas não tenho certeza se posso lidar com std::deque.
é uma lista bidirecional. o código acima só tem push_back, então é possível que você possa substituí-lo por um vetor.
se não, você pode fazer uma simples implementação de deque via array com uma reserva desde o início e fim. em STL é de alguma forma implementado dessa forma.
esta é uma lista bidirecional. no código acima só existe o push_back, portanto há uma chance de que ele possa ser substituído por um vetor.
Caso contrário, você pode fazer uma simples implementação de deque através de matriz com redundância inicial e final.
Eu pesquisei std::deque e é como você escreve, mas... Não sei como usá-lo e apenas substituí-lo por um vetor... Em geral, o exemplo é um tutorial, eu não gostaria de fazer asneira e ter certeza de que é assim que deve funcionar mal ))))
ZS: Há também um exemplo em F# - mas eu acho que é demais ;)
Quero portar este código fonte para MQL, mas não tenho certeza se posso lidar com std::Alert( n.recognImage( a1_3 ) );
retirado daqui:https://habr.com/ru/sandbox/43916/
SZY: Google, que eu não encontrei em tempo real outras fontes da rede Hamming, links para outras fontes também são bem-vindos (não é rede Hopfield!!! - google sempre os dá juntos)
Igor, eu não acho razoável escrever um deque, um vetor será suficiente na grande maioria dos casos. Eu reescrevi seu exemplo usando um vetor da linha sobre stl:
Não quero estragar tudo e ter certeza de que deve funcionar de forma imprópria ))))
Para verificar isso, eu testei o código fonte e o µl code
em ambos os casos obteve: 1 1 0 4294967295
HH: a propósito, parecia haver um erro na fonte - ir além dos limites da matriz (o camarada esqueceu de acrescentar -1)
Igor, eu não acho que seja razoável escrever um deque, um vetor é suficiente na grande maioria dos casos. Eu reescrevi seu exemplo usando o vetor da linha sobre stl:
Para verificar, eu executei com fonte plus e código µl como
em ambos os casos obteve: 1 1 0 4294967295
HH: a propósito, no código fonte pareceu ser um erro - overrun array (o camarada esqueceu de adicionar -1)
О! Isso foi tão rápido! Obrigado HUMAN!!!