[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 22

 

Pessoal, ajudem-me!

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

Estou escrevendo este código (isto é um trecho), todas as variáveis e arrays estão definidos, o contador conta. Inicialmente contarDH=0. Mas há um problema: nada é escrito para a matriz xDelH. A impressão (High[j], Time[j], countDH) retorna resultados corretos, enquanto xDelH[countDH][0] sempre dá 0. A verificação através do tamanho da matriz também retorna 0.

Mesmo que você escreva xDelH[countDH][0]=0,01; ele ainda dá 0. O que quer que eu faça, não importa onde eu coloque este código, ele não funciona em nenhum lugar.

O que pode ser devido a isso? Qual é a razão? Por favor, me ajude!

 
WindSW:

Pessoal, ajudem-me!

Estou escrevendo este código (isto é um fragmento), todas as variáveis e arrays estão definidas, contador conta. Mas eu tenho um problema com a matriz xDelH, nada é escrito a ela. A impressão (High[j], Time[j], countDH) me dá o resultado correto, mas xDelH[countDH][0] sempre retorna 0. A verificação via tamanho da matriz também retorna 0. Qual pode ser o motivo? Qual é a razão? Por favor, me ajude!

Mesmo que eu escreva xDelH[countDH][0]=0,01; ele ainda produz 0.

Verifique se xDelH é do tipo duplo. Isto se for por dentro. O operador do break está de alguma forma equivocadamente colocado. Se você fizer isso como abaixo, o que acontecerá?

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

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

Pessoal, ajudem-me!

Estou escrevendo este código (este é um trecho), todas as variáveis e matrizes estão definidas, o contador conta. Inicialmente contarDH=0. Mas há um problema: nada é escrito para a matriz xDelH. A impressão (High[j], Time[j], countDH) retorna resultados corretos, enquanto xDelH[countDH][0] sempre dá 0. A verificação através do tamanho da matriz também retorna 0.

Mesmo que você escreva xDelH[countDH][0]=0,01; ele ainda dá 0. O que quer que eu faça, não importa onde eu coloque este código, ele não funciona em nenhum lugar.

O que pode ser devido a isso? Qual é a razão? Por favor, me ajude!

Outro motivo pode não ser declarado o tamanho da matriz xDelH[][][].
 
Tenho o dobro xDelH[][2]; se for em dois para, um dos quais passa por j. O código que você escreveu funciona - ele dá 0,01
 
WindSW:
Tenho o dobro xDelH[][2]; se for em dois para, um dos quais passa por j. O código que você escreveu funciona - ele produz 0,01

Em sua versão, o tamanho da matriz não está especificado na dimensão 0, mas no exemplo acima está:

double xDelH [1][1];
 

Obrigado! Tudo isso está funcionando. Selecionou o tamanho da seguinte forma: ArrayResize(xDelH,100);

Mais uma pergunta: se o array preencher todas as 100 células, e contarDH contará até 120 por exemplo, o tamanho do array aumentará automaticamente para 120, ou terei que redimensionar o array regularmente de outra forma?

 
WindSW:

Obrigado! Tudo isso está funcionando. Selecionou o tamanho da seguinte forma: ArrayResize(xDelH,100);

Mais uma pergunta: se o array preencher todas as 100 células, e contarDH contará até 120 por exemplo, o tamanho do array aumentará automaticamente para 120, ou terei que redimensionar o array regularmente de outra forma?

Nada será feito automaticamente. Se necessário:

ArrayResize (xDelH, countDH + 1);
 
TarasBY:

Nada será feito automaticamente. Se necessário:


Obrigado!
 

Alternativamente, você pode definir mais células de uma vez, por exemplo 1000, se você souber que não haverá mais de 1000. Se você preencher a matriz dentro para, então no mesmo para você define o número máximo de iterações e antes para você pode mudar o tamanho da matriz, por exemplo:

double xDelH[][2];

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

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

Alternativamente, você pode definir mais células de uma vez, por exemplo 1000, se você souber que não haverá mais de 1000. Se você preencher o array dentro para, então no mesmo para você definir o número máximo de iterações e antes para você poder redimensionar o array, por exemplo..:


Em meu código, é mais conveniente definir o número de iterações através do ArrayRange.

Por que, se eu escrever xDelH[countDH][0]=HBar[countH][0]; ele dará 0 (embora HBar[countH][0] já esteja preenchido e tenha seu próprio valor). Posso fazer isso de jeito nenhum?

Razão: