Erro ao adicionar dados ao array.

 
Bom dia amigos, estou com uma dúvida com array multidirecional.


Eu preciso marcar cinco regiões no gráfico e conforme o preço andar, preciso adicionar mais cinco regiões conforme a movimentação do dia. Pensei em adicionar estas informações em um array da seguinte forma.


double DadosCanal[][5];



   DadosCanal[0][1] = preço 1;
   DadosCanal[0][2] = preço 2;
   DadosCanal[0][3] = preço 3;
   DadosCanal[0][4] = preço 4;
   DadosCanal[0][5] = preço 1;
   
   Conforme o preço  muda adiciono as informações no array, formando assim um banco de dados com as regiões dos preços.
   
   DadosCanal[1][1] = Novo preço 1;
   DadosCanal[1][2] = Novo preço 2;
   DadosCanal[1][3] = Novo preço 3;
   DadosCanal[1][4] = Novo preço 4;
   DadosCanal[1][5] = Novo preço 1;
   
   
   Porem quando o preço atualiza acontece o erro: array out of range.
   
   Alguem sabe onde estou errando?
   
 
abimael Silva:
Bom dia amigos, estou com uma dúvida com array multidirecional.


Eu preciso marcar cinco regiões no gráfico e conforme o preço andar, preciso adicionar mais cinco regiões conforme a movimentação do dia. Pensei em adicionar estas informações em um array da seguinte forma.


double DadosCanal[][5];



   DadosCanal[0][1] = preço 1;
   DadosCanal[0][2] = preço 2;
   DadosCanal[0][3] = preço 3;
   DadosCanal[0][4] = preço 4;
   DadosCanal[0][5] = preço 1;
   
   Conforme o preço  muda adiciono as informações no array, formando assim um banco de dados com as regiões dos preços.
   
   DadosCanal[1][1] = Novo preço 1;
   DadosCanal[1][2] = Novo preço 2;
   DadosCanal[1][3] = Novo preço 3;
   DadosCanal[1][4] = Novo preço 4;
   DadosCanal[1][5] = Novo preço 1;
   
   
   Porem quando o preço atualiza acontece o erro: array out of range.
   
   Alguem sabe onde estou errando?
   

Abimael,

Eu não sou um expert em MQL5 então me desculpe se a resposta não resolver sua pergunta, mas vale tentar... E tive esse mesmo problema. Então lendo sobre arrays vi que ele sempre inicia no 0, porém eu estava contanto range a partir do 1. Então apenas aumentei +1 na abertura do meu range e resolveu. Ou seja, neste seu caso, em vez de 

double DadosCanal[][5];

eu tentaria com

double DadosCanal[][6];
 
Ruy Christian Hoffmann:

Abimael,

Eu não sou um expert em MQL5 então me desculpe se a resposta não resolver sua pergunta, mas vale tentar... E tive esse mesmo problema. Então lendo sobre arrays vi que ele sempre inicia no 0, porém eu estava contanto range a partir do 1. Então apenas aumentei +1 na abertura do meu range e resolveu. Ou seja, neste seu caso, em vez de 

eu tentaria com


Eu tentei isso, ele até compila, mas na hora em que carrego o arquivo no gráfico da erro array out of range.


 
abimael Silva:


Eu tentei isso, ele até compila, mas na hora em que carrego o arquivo no gráfico da erro array out of range.


Você tem que usar ArrayResize(), mesmo para arrays dinâmicos como o seu...


E tome cuidado porque como é bidimensional, quando vc usa ArraySize() pra saber o tamanho ele lê tudo como se fosse unidimensional.

Portanto, a cada novo elemento:

ArrayResize( DadosCanal, ArraySize(DadosCanal)/5 + 1 );

;)

 

Se você usa intensamente esta linha de adição de elementos, sugiro isolar o uso do ArraySize() e usar ao invés disso, um contador, já que vc sabe previamente qual é o tamanho do seu vetor...

Dependendo do tamanho do seu vetor, ArraySize() pode se tornar lento...

;)

 
Flavio Jarabeck:

Se você usa intensamente esta linha de adição de elementos, sugiro isolar o uso do ArraySize() e usar ao invés disso, um contador, já que vc sabe previamente qual é o tamanho do seu vetor...

Dependendo do tamanho do seu vetor, ArraySize() pode se tornar lento...

;)

Flávio, desculpe minha ignorancia, mas eu tentei fazer isso:


   DadosCanal[0][1] = preço 1;

   DadosCanal[0][2] = preço 2;

   DadosCanal[0][3] = preço 3;

   DadosCanal[0][4] = preço 4;

   DadosCanal[0][5] = preço 1;

   

   ArrayResize( DadosCanal, ArraySize(DadosCanal)/5 + 1 );   

   

   DadosCanal[1][1] = Novo preço 1;

   DadosCanal[1][2] = Novo preço 2;

   DadosCanal[1][3] = Novo preço 3;

   DadosCanal[1][4] = Novo preço 4;

   DadosCanal[1][5] = Novo preço 1;


Não funcionou



   

 
abimael Silva:

Flávio, desculpe minha ignorancia, mas eu tentei fazer isso:


   DadosCanal[0][1] = preço 1;

   DadosCanal[0][2] = preço 2;

   DadosCanal[0][3] = preço 3;

   DadosCanal[0][4] = preço 4;

   DadosCanal[0][5] = preço 1;

   

   ArrayResize( DadosCanal, ArraySize(DadosCanal)/5 + 1 );   

   

   DadosCanal[1][1] = Novo preço 1;

   DadosCanal[1][2] = Novo preço 2;

   DadosCanal[1][3] = Novo preço 3;

   DadosCanal[1][4] = Novo preço 4;

   DadosCanal[1][5] = Novo preço 1;


Não funcionou



   

Poste sempre seu código-fonte usando o botão abaixo:

E poste o código completo da função, onde todos os elementos estão sendo inicializados, etc... do contrário estaremos voando às cegas...

Experimente colocar antes do ArrayResize(),  ArrayPrint(DadosCanal), para ver a estrutura do seu vetor...

 
E poste a tela com a mensagem de erro...
 
Flavio Jarabeck:
E poste a tela com a mensagem de erro...

Segue! Erro

 
abimael Silva:

Segue!

Não existe DadosCanal[1][5], não seria 0 (ZERO) ?
 
Flavio Jarabeck:
Não existe DadosCanal[1][5], não seria 0 (ZERO) ?

Cara muito obrigado!!! JA tinha feito um milhão de coisas e já estava pensando em como fazer o negocio sem array. Valeu mesmo, era este o erro!!!

Razão: