if(tace<date_) { for(i=1;i<31;i++) { z=ds_list_find_value(ds_list_find_value(obj_Base,base[i,8],0),9) z=z-5 ds_list_insert(ds_list_find_value(obj_Base.base[i,8],0),9,z) ds_list_delete(ds_list_find_value(obj_Base.base[i,8],0),10) } tace+=1 } Пояснию кому интересно(хотя и ненужно, потому что код правильный) существует массив объектов base первое измерение массива - подразумевает собой порядковый номер объекта, 2 измерение - параметры объекта 8 элемент массива для каждого объекта - это список очереди строительства построек. То есть каждый эелемент списка очереди построек сам представляет из себя список(объект и его характеристики. под 9 характеристикой - сколько осталось пунктов до постройки) Первый в очереди разумеется строится. Код как раз с ним и взаимодействуетf Я нахожу 9 элемент в списке постройки, 0-вого эл-та в списка очереди построек, i-того объекта в массиве объектов base
В результате должно плучиться следуещее: каждый промежуток времени пункты хода строительства должны уменьшеаться на 5 А на деле уменьшается в 2 раза больше
Хочу разобраться в логике мышления ГМЛ http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Пятница, 23 Сентября 2011, 18:41
А можно нормально объяснить? или вы не поняли код?
миха если вы все же не понимаете кода, тогда попрошу вас воздержаться от комментариев. А если понимаете, то объясните как идет расчет, а не обобщенно -
Добавлено (23.09.2011, 18:46) --------------------------------------------- Я знаю как работает цикл. Я пытался вручную посчитать что происходит с кодом.
Как только date_ увеличивается на 1, в тот же шаг следом идет код хода постройки, где проверяется if(tace<date_) Т е в тот же шаг ког приходит в исполнение увеличивает tace на 1, и следуюшим шагом date_ не увеличивается(поскольку счетчик не набрался)? а tace соответственно равен date_. Так почему код исполняется 2 раза???
цикл - это все равно что кварцевые часы. только полный оборот будет составлять не 12часов а столько, сколько будет задано. предположим час - это действие. Проблема в точ, то каждый час действие совершается 2 раза. Вот что я хочу знать. Какие этому препосылки
П.С. Когда нижнюю часть кода я перенес из шага в тригер, нисколько не меняя сам код, то отниматся стало нормально по 5, в независимости от "цикла" http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Пятница, 23 Сентября 2011, 18:57
мммм, этот цикл выполнится 30 раз, и не больше и не меньше, так как параметры итерации цикла заданы константно, в первой итерации переменная i будет равна 1, в последней 30. В теле цикла 4 строчки кода. В первой строчке мы что то получаем и засовываем полученное значение в переменную z. Во второй строчке мы от переменной Z отнимаем 5 в третей засовываем z в лист или что то подобное в четвертое удаляем что то из листа.
Я не знаком с синтаксисом ГМЛ, и я хз что такое ds_list_insert ds_list_delete ds_list_find_value, но строчка кода z=z-5 выполняется только один раз за итерацию цикла )
Так почти все объекты завязаны на счетчике времени, вы представляете себе сколько надо править А там где сложные мат функции, править надо мозги иметь. Да и в отличие от данного кода, прочие написаны в других объектах, нет гарантий что баг будет везде.
+Я же написал что проблема решена. Я жду не советов, а объяснения почему произошел баг
любитель подстраивается профи - решает гений-ломает я хочу быть профи
Quote
Я не знаком с синтаксисом ГМЛ, и я хз что такое ds_list_insert ds_list_delete ds_list_find_value, но строчка кода z=z-5 выполняется только один раз за итерацию цикла )
так должно быть, но на практике отнимается по 10 если держать код в шаге объекта, а когда код переношу в тригер, тогда отнимается 5
Добавлено (23.09.2011, 23:11) --------------------------------------------- ds_list_find_value(id,pos) - функция находит элемент в позиции pos сприска с идентификатором id ds_list_insert(id,pos,value) - записывает значение val в указанную позицию списка. При этом значение в этой же позиции меняет свою позицию на +1 а поэтому ds_list_delete(id,pos)-удаляет элемент в указанной позиции
Quote
for(i=1;i<31;i++)
писал вручную .. и в ГМ часто нарываюсь на такую ошибку конечно же i+=1 http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Пятница, 23 Сентября 2011, 23:29
Понимаю негодования.Код и писал с проекта но вручную(т к на другом компе)
Quote
проверить и найти ошибку
Ошибок нет!!, код полностью функционален. И на синтаксис языка здесь смотреть необязательно
Я сначала подумал что дело в списках. Потому как в других вариантах цикла в шаге таких багов не наблюдал. Я умею пользоваться списками, но плохо себе представляю как они реализовываются компилятором. А может еще что...Нужно знать сам принцип выполнения кода http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Суббота, 24 Сентября 2011, 13:35