[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 184

 
   double Mas[];//массив куда надо заносить данные

Si da ceros, es mejor adjuntar el código en lugar de explicarlo con los dedos.

Si se declara un array abierto, es aconsejable hacer ArrayResize, o declarar una dimensión mayor de inmediato.

 
double mas[];
int start()
  {
  double v1=mas[1];
  mas[1]=89;
  double v2=mas[1];
  ArrayResize(mas,iBars(NULL,0));
  double v3=mas[1];
  mas[1]=89;
  double v4=mas[1];
  Alert(v1,"-",v2,"-",v3,"-",v4);
  return(0);
  }

El script es puramente por diversión, pero también puede atrapar Alert(GetLastError()); obteniendo

ERR_ARRAY_INDEX_OUT_OF_RANGE4002El índice del array está fuera de rango
 
splxgf:

Si da ceros, es mejor adjuntar el código en lugar de explicarlo con los dedos.

Si se declara un array abierto, es aconsejable hacer ArrayResize, o declarar una dimensión mayor de inmediato.

Ya he adjuntado el código en el primer post. Sólo hay que añadir un par de líneas correctas en alguna parte para formar la matriz. Esa era exactamente la cuestión principal).

De hecho, creo que debería ser algo así en alguna parte:

ArrayResize(Mas,n);

Mas[n]={diff};

n es la nueva dimensionalidad, valores diff de las diferencias resultantes.

Pero no funciona así, imprime la diferencia 0,00000. Ya he probado a introducir la diferencia en el bucle, detrás del bucle e incluso en la condición.

En resumen, estoy en un estado de estupor).

Si sabes cómo escribirlo, te estaré muy agradecido.

 
splxgf:

El script es puramente por diversión, pero también puede atrapar Alert(GetLastError()); obteniendo

ERR_ARRAY_INDEX_OUT_OF_RANGE4002El índice del array está fuera de rango

Pues bien, resulta que en el código se especifica explícitamente tanto el tamaño como el valor del array. Es esto mismo lo que he entendido en el artículo.

Pero de alguna manera no puedo hacerlo con mi ejemplo.(.

 
NickXXX:

especificar explícitamente tanto la dimensión como el valor del array en el código

No hay otras opciones.

  double v1=mas[1];
  mas[1]=89;
  Alert(GetLastError());
  double v2=mas[1];
  Alert(GetLastError());
  ArrayResize(mas,iBars(NULL,0));

Los elementos no se crean cuando se accede a ellos.

 
splxgf:

No hay otras opciones.

Los elementos no se crean cuando se accede a ellos.

Vale, mira. ¿Lo he entendido bien?

En tu ejemplo, estás creando un array unidimensional que consiste en un único valor de 89.

Por cierto, con dimensionalidad me refería al número de elementos de una matriz unidimensional. Pensé que se podía cambiar a lo largo del programa. Al fin y al cabo, no en vano especificamos inicialmente nuestra matriz de forma no explícita. Es decir, por ejemplo:

double Mas[]; //inicializar array unidimensional

int n=0; //será útil para el número de elementos del array

Además, como en mi ejemplo, hacemos el siguiente bucle

para(...)

{

if(...)//la condición que nos interesa

{

n++;// contar cuántas veces ha funcionado

diff=... valores que nos interesan

}

}

y en otro lugar rellenamos nuestro array unidimensional Mas[n] con valores diff, siendo n el número de elementos

Pensé que era bastante normal y que se podía hacer así... ¿O no?

 

Antes de para, añade un ArrayResize al número de elementos necesarios

Por ejemplo, el punto

  ArrayResize(mas,iBars(NULL,0));

se orienta en el número de barras del gráfico en la ventana actual, o simplemente puede especificar cualquier número cercano a lo astronómico en lugar de iBars.

El array se crea inicialmente vacío, antes de acceder a él hay que especificar cuántos elementos se quieren almacenar en él. Publica el código completo, será más fácil de navegar.

 
splxgf:

Antes de para, añade un ArrayResize al número de elementos necesarios

Por ejemplo, el punto

se orienta en el número de barras del gráfico en la ventana actual, o simplemente puede especificar cualquier número cercano a lo astronómico en lugar de iBars.

Pero antes para que no sepamos el número de elementos, lo sabremos sólo cuando calculemos el número de condiciones if. He intentado poner ArrayResize después de for, sale 0 como elementos.
 

En el ejemplo muestro que no se puede utilizar un array que no tenga un número de elementos marcado.

Las dos primeras llamadas provocan un error y devuelven 0.

Para deshacerse de las cucarachas, basta con escribir

double mas[999999];

Si funciona, lidia con las cucarachas.

 
splxgf:

En el ejemplo muestro que no se puede utilizar un array que no tenga un número de elementos marcado.

Las dos primeras llamadas provocan un error y devuelven 0.

Para deshacerse de las cucarachas que tienes.

Si funciona, lidia con las cucarachas.

No es necesario especificar el número de elementos desde el principio, la construcción doble Mas[] también es adecuada.