[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 22

 

Люди, помогите разобраться!

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

Пишу такой код (это фрагмент), все переменные и массивы заданы, счетчик считает. Первоначально countDH=0. Но есть проблема, в массив xDelH ничего не записывается. Вывод через Print (High[j], Time[j], countDH) дает правильные результаты, а  xDelH[countDH][0] всегда выдает 0. Проверка через размер массива тоже дает 0.

Даже если написать xDelH[countDH][0]=0,01; все равно выдает 0. Чтобы я не делал, в каком бы месте не поставил этот код, он нигде не работает.

Из-за чего это может быть? В чем причина? Пожалуйста, помогите!  

 
WindSW:

Люди, помогите разобраться!

Пишу такой код (это фрагмент), все переменные и массивы заданы, счетчик считает. Но есть проблема в массив xDelH ничего не записывается. Вывод через Print (High[j], Time[j], countDH) дает правильные результаты, а  xDelH[countDH][0] всегда выдает 0. Проверка через размер массива тоже дает 0. Из-за чего это может быть? В чем причина? Пожалуйста, помогите!

Даже если написать xDelH[countDH][0]=0,01; все равно выдает 0

 

Проверьте, является ли xDelH типом double. Находится ли этот if внутри for. Оператор break как-то не правильно у вас помещён. А если сделаете как ниже, что будет

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

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

Люди, помогите разобраться!

Пишу такой код (это фрагмент), все переменные и массивы заданы, счетчик считает. Первоначально countDH=0. Но есть проблема, в массив xDelH ничего не записывается. Вывод через Print (High[j], Time[j], countDH) дает правильные результаты, а  xDelH[countDH][0] всегда выдает 0. Проверка через размер массива тоже дает 0.

Даже если написать xDelH[countDH][0]=0,01; все равно выдает 0. Чтобы я не делал, в каком бы месте не поставил этот код, он нигде не работает.

Из-за чего это может быть? В чем причина? Пожалуйста, помогите!  

Ещё причиной может служит не объявленный размер массива xDelH[][].
 
У меня double xDelH[][2]; if находится в двух for, один из которых перебирает j. Написаный вами код работает - выдает 0,01
 
WindSW:
У меня double xDelH[][2]; if находится в двух for, один из которых перебирает j. Написаный вами код работает - выдает 0,01

В Вашем варианте размер массива не задан в 0-ом измерении, а в приведённом примере задан:

double xDelH [1][1];
 

Спасибо! Все заработало. Выделил размер следующим образом: ArrayResize(xDelH,100); 

Возник еще один вопрос: если массив заполнит все 100 ячеек, а countDH будет считать например до 120, то размер массива будет автоматически увеличиваться до 120 или прийдется регулярно изменять размер массива другим способом?

 
WindSW:

Спасибо! Все заработало. Выделил размер следующим образом: ArrayResize(xDelH,100); 

Возник еще один вопрос: если массив заполнит все 100 ячеек, а countDH будет считать например до 120, то размер массива будет автоматически увеличиваться до 120 или прийдется регулярно изменять размер массива другим способом?

Автоматом ничего делаться не будет. При необходимости:

ArrayResize (xDelH, countDH + 1);
 
TarasBY:

Автоматом ничего делаться не будет. При необходимости:


Спасибо!
 

Как вариант можно сразу задать больше ячеек, напр. 1000 если знаете что более 1000 не будет. Если вы массив заполняете внутри for, то в этом же for определяете максимальное число итераций и перед for можно изменять размер массива, напр.:

double xDelH[][2];

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

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

Как вариант можно сразу задать больше ячеек, напр. 1000 если знаете что более 1000 не будет. Если вы массив заполняете внутри for, то в этом же for определяете максимальное число итераций и перед for можно изменять размер массива, напр.:


У меня по коду удобнее определять кол-во итераций через ArrayRange

А почему если написать xDelH[countDH][0]=HBar[countH][0]; , то будет выдаваться 0 (хотя HBar[countH][0] уже заполнен и имеет свое значение) . Так вообще можно делать?