Inicialización de matrices

 

He estado aprendiendo sobre arrays en la guía de mql4, y me he encontrado con un tema con el que estoy teniendo problemas; la inicialización de los arrays es un poco desconcertante no entiendo la siguiente declaración

"

Inicialización de arrays


Un array sólo puede ser inicializado por constantes de un tipo correspondiente. Los arrays unidimensionales y multidimensionales se inicializan mediante una secuencia unidimensional de constantes separadas por comas. La secuencia se incluye entre corchetes:

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 }

"

No me confunde el hecho de que un array sólo pueda ser inicializado por constantes de un tipo correspondiente, pero sí me confunde el concepto de inicialización de un array y el hecho de que una secuencia unidimensional pueda iniciar un array multidimensional.

Me confunde lo siguiente.

"

En la secuencia inicializada se pueden omitir una o varias constantes. En tal caso los elementos correspondientes de los arrays de tipo numérico se inicializan por cero, los elementos de los arrays de tipo cadena se inicializan por el valor de la cadena "" (comillas sin espacio), es decir, por una línea vacía (no debe confundirse con un espacio). El siguiente programa muestra los valores de las matrices, inicializados por una secuencia con omisión de algunos 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()
  }
//--------------------------------------------------------------------

"

Al final no estoy entendiendo el concepto de inicialización de arrays.

 

¿Entiendes el concepto de arrays, verdad? ¿Una variable con múltiples índices?

Todo lo que hace la inicialización es establecer un valor inicial para todos los índices.

Usted puede establecer un valor a cada índice por separado como en los ejemplos que usted ha publicado o,

si quieres que el valor inicial sea el mismo para todos los índices puedes introducir el valor una vez así,

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

o,

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

También ten en cuenta que hay algunos errores en el libro de mql4. Creo que en el segundo ejemplo cuando dice,

"En la secuencia inicializada se pueden omitir una o varias constantes. En tal caso los elementos correspondientes de los arrays de tipo numérico se inicializan por cero, los elementos de los arrays de tipo cadena se inicializan por el valor de la cadena "" (comillas sin espacio), es decir por una línea vacía (no debe confundirse con un espacio)."

y luego muestra este ejemplo,

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

que probablemente era lo que se pretendía:

string Mas_s[4] = {"a","b","","d"};           // String array
también dice en alguna parte del libro "todos los arrays son de tipo estático por defecto" eso también es un error son como otras variables, no son estáticas a menos que se definan como estáticas, excepto cuando son globales.
 
SDC:

¿Entiendes el concepto de arrays, verdad? ¿Una variable con múltiples índices?

Todo lo que hace la inicialización es establecer un valor inicial para todos los índices.

Si quieres que el valor inicial sea el mismo para todos los índices puedes introducir el valor una vez así

int myarray[100] {0} //inicializa los 100 índices al valor cero.


A la derecha

Todavía estoy un poco confundido.

Así que si tengo un array

Double myarray[100]

He declarado el tipo de Array (double), el nombre del Array (myarray) y el número de índices (100) .

¿Se puede asignar el valor de la matriz MyArray utilizando Double myarray[100] = {1, 2, 3, ....}, de modo que myarray[1]=1 y myarray[2]=2 ect.

Hasta ahora sólo he construido arrays con el fin de coger valores de los bucles e incluso entonces el array se utilizaba de forma muy poco precisa.

Gracias, señalar ese error me ha aclarado una pequeña duda que tenía.

 

El primer índice del array es cero por lo que si haces

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

que hará, mi matriz[0] == 1, mi matriz[1] ==2 etc

 

Ah, sí, de acuerdo.

Entonces, ¿qué pasa si tengo un Array multidimensional

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} (perdón, me di cuenta de que usé enteros antes)

¿Cómo puedo llamar a un valor?

 

lo llamas como miarray[índice,índice]; o miarray[índice][índice]; hace lo mismo.

val = miarray[2,2]; //obtiene el valor del array índice 2,2 lo pone en val.

Print(miarray[2,2]); //lo imprime

Alert(miarray[2][2]); //lo alerta

 

¿Cuál sería el valor?

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

Mi matriz[1][3]=?

 
cero porque no le asignaste nada
 

tienes un array de 3 x 4

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

se llenaría así

Mi matriz[0,0] = 0,1;

Mi matriz[0,1] = 0,2;

Mi matriz[0,2] = 0,3;

Mi matriz[0,3] = 0,4;

Mi matriz[1,0] = 0,5;

Mi matriz[1,1] = 0,0;

Mi matriz[1,2] = 0,0;

etc.

 
¿Cómo es que array[0,0] tiene un valor que fue declarado para Myarray[3][4]?
 

Ahora mismo no tengo ni idea..

¿No es Myarray[3][4] multidimensional, si es así por qué sólo puedo llamar a los valores cambiando el valor de una de las dimensiones?