[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 22

 

¡Gente, ayudadme!

                      if(OPrazH<razH && OPrazH>0)              
                        {
                         f1=1;                                 
                         xDelH[countDH][0]=High[j];            
                         xDelH[countDH][1]=Time[j];
                         Print(xDelH[countDH][0]);
                         countDH++;
                         break;
                        }

Estoy escribiendo este código (esto es un fragmento), todas las variables y arrays están establecidos, el contador cuenta. Inicialmente countDH=0. Pero hay un problema: no se escribe nada en la matriz xDelH. Print (High[j], Time[j], countDH) devuelve el resultado correcto pero xDelH[countDH][0] siempre da 0. La comprobación a través del tamaño del array también devuelve 0.

Aunque escriba xDelH[countDH][0]=0,01; sigue dando 0. Haga lo que haga, no importa dónde ponga este código, no funciona en ningún sitio.

¿A qué puede deberse? ¿Cuál es la razón? Por favor, ayúdenme.

 
WindSW:

¡Gente, ayudadme!

Estoy escribiendo este código (esto es un fragmento), todas las variables y matrices están establecidas, el contador cuenta. Pero hay un problema con el array xDelH, no se escribe nada en él. Print (High[j], Time[j], countDH) me da un resultado correcto pero xDelH[countDH][0] siempre devuelve 0. La comprobación a través del tamaño del array también devuelve 0. ¿Cuál puede ser la razón? ¿Cuál es la razón? Por favor, ayúdenme.

Incluso si escribo xDelH[countDH][0]=0.01; sigue produciendo 0.

Comprueba si xDelH es de tipo doble. Es esto si dentro para. El operador de ruptura está de alguna manera mal colocado. Si lo haces así, ¿qué pasará?

double xDelH [1][1];
int countDH=0;

xDelH[countDH][0]=0.01; // точка а не запятая
Print(DoubleToStr(xDelH[countDH][0],2));
 
WindSW:

¡Gente, ayudadme!

Estoy escribiendo este código (esto es un fragmento), todas las variables y arrays están establecidos, el contador cuenta. Inicialmente countDH=0. Pero hay un problema: no se escribe nada en la matriz xDelH. Print (High[j], Time[j], countDH) devuelve el resultado correcto pero xDelH[countDH][0] siempre da 0. La comprobación a través del tamaño del array también devuelve 0.

Aunque escriba xDelH[countDH][0]=0,01; sigue dando 0. Haga lo que haga, no importa dónde ponga este código, no funciona en ningún sitio.

¿A qué puede deberse? ¿Cuál es la razón? Por favor, ayúdenme.

Otra razón puede ser el tamaño no declarado del array xDelH[][].
 
Tengo el doble xDelH[][2]; si está en dos for, uno de los cuales pasa por j. El código que escribiste funciona - da 0.01
 
WindSW:
Tengo el doble xDelH[][2]; si está en dos for, uno de los cuales pasa por j. El código que escribiste funciona - produce 0.01

En su versión, el tamaño del array no se especifica en la dimensión 0, pero en el ejemplo anterior sí:

double xDelH [1][1];
 

Gracias. Todo está funcionando. Seleccione el tamaño de la siguiente manera: ArrayResize(xDelH,100);

Una pregunta más: si el array llena las 100 celdas, y countDH contará hasta 120, por ejemplo, ¿el tamaño del array aumentará automáticamente hasta 120, o tendré que redimensionar regularmente el array de otra manera?

 
WindSW:

Gracias. Todo está funcionando. Seleccione el tamaño de la siguiente manera: ArrayResize(xDelH,100);

Una pregunta más: si el array llena las 100 celdas, y countDH contará hasta 120, por ejemplo, ¿el tamaño del array aumentará automáticamente hasta 120, o tendré que redimensionar el array regularmente de otra manera?

Nada se hará automáticamente. Si es necesario:

ArrayResize (xDelH, countDH + 1);
 
TarasBY:

Nada se hará automáticamente. Si es necesario:


Gracias.
 

Alternativamente, puede establecer más celdas a la vez, por ejemplo 1000 si sabes que no habrá más de 1000. Si rellenas el array dentro del for, entonces en el mismo for defines el número máximo de iteraciones y antes del for puedes cambiar el tamaño del array, por ejemplo:

double xDelH[][2];

int N=120;
ArrayResize(xDelH, N);

for (int i=0; i<=N; i++)
{
// ...
}
 
paladin80:

Alternativamente, puede establecer más celdas a la vez, por ejemplo 1000 si sabes que no habrá más de 1000. Si rellenas el array dentro del for, entonces en el mismo for defines el número máximo de iteraciones y antes del for puedes redimensionar el array, por ejemplo..:


En mi código, es más conveniente definir el número de iteraciones a través de ArrayRange.

Por qué, si escribo xDelH[countDH][0]=HBar[countH][0]; dará 0 (aunque HBar[countH][0] ya está lleno y tiene su propio valor). ¿Puedo hacer esto?

Razón de la queja: