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

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

Если выводит нули, то лучше приложить код, а не объяснять на пальцах.

Если объявляется открытый массив, то желательно делать ArrayResize, или сразу объявлять большую размерность.

 
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);
  }

Скриптик чисто поржать, а еще можно отлавливать Alert(GetLastError()); получая

ERR_ARRAY_INDEX_OUT_OF_RANGE4002Индекс массива - вне диапазона
 
splxgf:

Если выводит нули, то лучше приложить код, а не объяснять на пальцах.

Если объявляется открытый массив, то желательно делать ArrayResize, или сразу объявлять большую размерность.

Код я уже приложил в первом посте. Там просто где-то нужно добавить пару правильных строчек по формированию массива. Это как раз и был основной вопрос.)

По сути, я думаю, что где-то должно быть наподобие:

ArrayResize(Mas,n);

Mas[n]={diff};

n - это новая размерность, diff значения полученных разностей.

Но так не работает, выводит разницу 0.00000. Я уже в цикле и за циклом и даже в условии пробовал вставлять.

Короче, я в ступоре.)

Если знаешь как это написать, буду очень тебе признателен.

 
splxgf:

Скриптик чисто поржать, а еще можно отлавливать Alert(GetLastError()); получая

ERR_ARRAY_INDEX_OUT_OF_RANGE4002Индекс массива - вне диапазона

Не, ну здесь получается, что явно в коде указываешь и размерность и значение массива. Вот это я как раз и в статье ещё понял как делать.

А вот с моим примером как-то не выходит.(

 
NickXXX:

явно в коде указываешь и размерность и значение массива

Других вариантов нет.

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

Элементы не создаются при обращении к ним.

 
splxgf:

Других вариантов нет.

Элементы не создаются при обращении к ним.

Так, смотри. Я правильно понимаю?

В твоем примере ты создаешь одномерный массив, состоящий из одного значения 89.

Я кстати под размерностью подразумевал именно количество элементов в одномерном массиве. Мне казалось, что с течением программы можно менять. Ведь не зря же изначально мы задаем наш массив не явно. Т.е., например:

double Mas[]; //инициализируем одномерный массив

int n=0; //пригодится для кол-ва элементов массива

дальше, например как у меня в примере делаем цикл обработки

for(...)

{

if(...)//интересующее нас условие

{

n++;// считаем сколько раз сработало

diff=... интересующие нас значения

}

}

а вот дальше где-то уже набиваем наш одномерный массив Mas[n] значениям diff, n - кол-во элементов

Мне казалось что это вполне нормально и так можно делать... Или нет?

 

Перед for добавь ArrayResize на нужное количество элементов

К примеру сточка

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

ориентируется на количество баров графика в текущем окне, ну или вместо iBars можно просто указать любое близкое к астрономическому число.

Изначально массив создается пустой, перед обращением к нему нужно указать сколько в нем хочешь хранить элементов. Выложи полностью код, так будет легче ориентироваться.

 
splxgf:

Перед for добавь ArrayResize на нужное количество элементов

К примеру сточка

ориентируется на количество баров графика в текущем окне, ну или вместо iBars можно просто указать любое близкое к астрономическому число.

Но перед for мы ещё не знаем количество элементов, узнаем только когда посчитаем количество отработанного условия if. Пробовал ставить ArrayResize после for выводит 0 в качестве элементов.
 

В примере я показываю что нельзя использовать массив в котором не обозначено количество элементов.

Первые два обращения вызывают ошибку и возвращают 0.

Для убирания своих тараканов пропиши сразу

double mas[999999];

если будет работать, разбирайся с тараканами.

 
splxgf:

В примере я показываю что нельзя использовать массив в котором не обозначено количество элементов.

Первые два обращения вызывают ошибку и возвращают 0.

Для убирания своих тараканов пропиши сразу

если будет работать, разбирайся с тараканами.

Да не обязательно изначально задавать количество элементов, конструкция double Mas[] тоже является подходящей.

Причина обращения: