Inicialização da matriz

 

Tenho aprendido sobre arrays do guia mql4, e me deparei com um tópico com o qual estou tendo problemas; a inicialização de arrays é um pouco desconcertante; não entendo a afirmação abaixo

"

Inicialização do Array


Uma matriz só pode ser inicializada por constantes de um tipo correspondente. As matrizes unidimensionais e multidimensionais são inicializadas por uma seqüência unidimensional de constantes separadas por vírgulas. A seqüência é incluída entre parênteses curvos:

int Mas_i[3][4] = { 0, 1, 2, 3,   10, 11, 12, 13,   20, 21, 22, 23 };
 
double Mas_d[2][3] = { 0.1, 0.2, -0.3,    -10.2, 1.5, 7.0 };
 
bool Mas_b[5] = { false, true, false, true, true }

"

Não estou confuso pelo fato de que uma matriz só pode ser inicializada por constantes de um tipo correspondente, mas estou confuso pelo conceito de inicialização de matriz e pelo fato de que uma seqüência unidimensional pode iniciar uma matriz multidimensional.

Fico confuso com o seguinte.

"

Na seqüência inicializada, uma ou várias constantes podem ser omitidas. Neste caso, os elementos da matriz correspondente do tipo numérico são inicializados por zero, os elementos das matrizes do tipo string são inicializados pelo valor da string "" (aspas sem espaço), ou seja, por uma linha vazia (não deve ser confundida com um espaço). O próximo programa exibe valores de arrays, inicializados por uma seqüência com omissão de alguns valores (script arrayalert.mq4):

//--------------------------------------------------------------------
// arrayalert.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
  {
   string Mas_s[4] = {"a","b", ,"d"};           // String array
   int Mas_i[6] = { 0,1,2, ,4,5 };              // Integer type array
   Alert(Mas_s[0],Mas_s[1],Mas_s[2],Mas_s[3]);  // Displaying
   Alert(Mas_i[0],Mas_i[1],Mas_i[2],Mas_i[3],Mas_i[4],Mas_i[5]);
   return;                                      // Exit start()
  }
//--------------------------------------------------------------------

"

Em última análise, não estou entendendo o conceito de inicialização da matriz.

 

Você entende o conceito de arrays pensado corretamente ? uma variável com múltiplos índices ?

Tudo o que a inicialização faz é definir um valor inicial para todos os índices.

Você pode definir um valor para cada índice separadamente, como nos exemplos que você postou ou,

se você quiser que o valor inicial seja o mesmo para todos os índices, você pode digitar o valor uma vez assim,

int myarray[100]={0};   //initializes all 100 indexes to value zero

ou,

int myarray[100][5]={-1}; //multi dimensions, initializes all 500 indexes to -1.

Esteja ciente também de que há alguns erros no livro mql4. Acho que no segundo exemplo, quando ele diz,

"Na seqüência inicializada, uma ou várias constantes podem ser omitidas. Neste caso, os elementos da matriz correspondente do tipo numérico são inicializados por zero, os elementos das matrizes do tipo string são inicializados pelo valor da string "" (aspas sem espaço), ou seja, por uma linha vazia (não deve ser confundida com um espaço)".

e depois mostra este exemplo,

string Mas_s[4] = {"a","b", ,"d"};           // String array

provavelmente estava destinado a ser:

string Mas_s[4] = {"a","b","","d"};           // String array
também diz em algum lugar no livro "todas as arrays são do tipo estático por padrão" que também é um erro que elas são como outras variáveis, não estáticas a menos que definidas como estáticas, exceto quando elas são globais.
 
SDC:

Você entende o conceito de arrays pensado corretamente ? uma variável com múltiplos índices ?

Tudo o que a inicialização faz é definir um valor inicial para todos os índices.

Se você quiser que o valor inicial seja o mesmo para todos os índices, você pode inserir o valor uma vez assim

int myarray[100] {0} //inicializa todos os 100 índices para valor zero.


Certo

Ainda estou um pouco confuso.

Portanto, se eu tiver um array

Duplo myarray[100]

Declarei o tipo de Array (duplo), nome do Array (myarray) e número de índices (100) .

O valor do array MyArray pode ser atribuído usando Double myarray[100] = {1, 2, 3, ....}, de modo que myarray[1]=1 e myarray[2]=2 ect.

Até agora eu só construí arrays com o propósito de obter valores de loops e mesmo assim o array foi usado de forma muito frouxa.

Obrigado, apontando esse erro esclareceu uma pequena questão que eu tinha.

 

O primeiro índice de matriz é zero, portanto, se você o fizer,

double myarray[100] = {1,2,3 .....};

que fará, myarray[0] == 1, myarray[1] ==2 etc

 

Ah certo ok.

Então e se eu tiver um Array multidimensional

Double Myarray[3][4] = {0.1,0.2,0.3,0.3,0.4,0.5} (desculpe, eu notei que usei inteiros antes)

Como posso chamar um valor?

 

você a chama como myarray[index,index]; ou myarray[index][index]; faz a mesma coisa.

val = myarray[2,2]; // esquece o valor do array index 2,2 o coloca em val.

Imprime[myarray[2,2]); //imprime-o

Alerta(myarray[2][2]); //alerta-o

 

Qual seria o valor?

Double Myarray[3][4] = {0.1,0.2,0.3,0.3,0.4,0.5}

Myarray[1][3]=?

 
zero porque você não atribuiu nada a ele
 

você tem 3 x 4 array

duplo Myarray[3][4] = {0.1,0.2,0.3,0.3,0.4,0.5} ;

ele preencheria assim

Myarray[0,0] = 0,1;

Myarray[0,1] = 0,2;

Myarray[0,2] = 0,3;

Myarray[0,3] = 0,4;

Myarray[1,0] = 0,5;

Myarray[1,1] = 0,0;

Myarray[1,2] = 0,0;

etc

 
Como o array[0,0] tem um valor que foi declarado para Myarray[3][4]?
 

Estou sem pistas neste momento...

Myarray[3][4] não é multi-dimensional, se assim é, por que só posso chamar valores mudando o valor de uma das dimensões?