Erros, bugs, perguntas - página 2467

 
Igor Makanu:

Pela primeira vez tentei fazer uma classe de embalagem para uma matriz bidimensional, mas não consegui sobrecarregar [] para tratá-la como uma matriz bidimensional normal[1][2].

Tal problema foi resolvido há 4-5 anos atrás, havia um ramo separado com soluções prontas.
Poucos dos participantes activos sobreviveram até hoje, a maior parte deles foram banidos...

P.s. Não era uma matriz bidimensional, mas uma matriz tridimensional sobre classes.

 
Oh, acho que encontrei esse fiohttps://www.mql5.com/ru/forum/6729
В MQL5 всегда есть место подвигу ! ;)
В MQL5 всегда есть место подвигу ! ;)
  • 2012.05.16
  • www.mql5.com
Общее обсуждение: В MQL5 всегда есть место подвигу ! ;)
 
Sergey Dzyublik:

Tal problema foi resolvido há 4-5 anos atrás, havia um ramo separado com soluções prontas.
Dos participantes activos, poucos sobreviveram até hoje, a maioria foi novamente banida.

P.s. Não era uma matriz bidimensional, mas uma matriz tridimensional sobre classes.

Bem, eu fui e procurei nesse tópico - não há uma única conta que tenha sido banida ou apagada. Todas as pessoas daquele ramo estão lá, e ainda vivas.

Foi assim que decidiu criar um escândalo, atirando-o à administração? É uma tolice, não é? Pare de ver o mal por aqui.

 
Sergey Dzyublik:
Oh, acho que encontrei esse ramohttps://www.mql5.com/ru/forum/6729

Acho que li este tópico no mês passado, vou procurar novamente esta noite

mas as minhas experiências com sobrecarga [][] terminaram em perceber que posso implementar tanto o valor L como o valor R em MQL usando sobrecarga [][].

Se tem uma solução completa para uma matriz bidimensional dinâmica - coloque-a em CodeBase, é uma coisa útil - não tenho melhor aspecto que CMatrixDouble de MT: #include Math Alglib

 
class A{
public:
   uchar data1;
};

A func(){
   A a;
   a.data1 = 1;
   return a;      //object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
}


void OnStart(){  
   A a;

   //1
   A aa = a;
   a = aa;
   
   //2
   a = func();   
}

Qual é a diferença entre //1 e //2 ?
Infelizmente, este problema não pode ser evitado quando se utilizam modelos em contentores com um tipo de dados arbitrário.

Como caso especial, para resolver o problema, podemos implementar a herança, definir um construtor de cópias para a classe mãe e substituir o tipo de retorno na função problema desde a base até ao pai.

 
Desenvolvedores:
Acrescentar uma função que devolve a Capacidade de uma matriz (o número de elementos para os quais o espaço é reservado na memória). Não confundir com o parâmetro de reserva para o ArrayResize.
StringBufferLen para cordel mas nadapara matriz.
 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

Sergey Dzyublik, 2019.05.22 16:01

Mais uma vez obrigado aoTheXpert por ter fornecido o código.
Temos os seguintes resultados no ArrayResize capacidade MT5(build 2057):


Resultado:
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205

 

Boa noite!

Alguém me pode dizer o que se está a passar?

Esta é a primeira vez que vejo isto acontecer. Código simples em uma das funções.

double yyy=28/50*100;
   
Print("test yyy=", yyy);

Resultado:

"2019.05.21 19:38:29.364 2019.04.01 00:05:00 teste yyyyy=0.0"


 
Michael2K:

Boa noite!

Alguém me pode dizer o que se está a passar?

int(28) / int(50) * int(100) == int(0) * int(100) == int(0) == duplo(0.0)


Utilizar uma paragem completa para especificar o tipo duplo:

double yyy=28./50*100;
 
Sergey Dzyublik:
Por favor, forneça também um pseudo-código para usar o parâmetro reserve_size em ArrayResize.
Não há descrição de como o sistema se comporta quando um novo valor de tamanho_de_reserva é definido para o próximo ArrayResize.
Sergey Dzyublik:


É a seguinte suposição correcta quando se telefona sequencialmente:

Tanto quanto me lembro, a capacidade só é aumentada quando o tamanho da matriz excede esta capacidade. Embora, claro, algo pudesse ter mudado.

E a função de obter o valor de uma saracidade é realmente muito útil.