20:44

у королевы всегда есть кофе (с)
Добрый вечер.
Пишу для ролевой игры имитацию броска кубика и подсчета суммы выброшенных значений (плюс модификаторы). Подсчет написан. Вывод результата числом работает. Однако хочу сделать дополнительный вывод результата в формате:
n1+n2+...nm, где n - значение, выпавшее на кубике, а m - количество кубиков (количество оборотов цикла). Сталкиваюсь с ошибкой, скриншот который выложу чуть ниже.

Итак, код программы


компиляцию проходим успешно. вводим значения, нажимаем button1. программа выдает такую ошибку:


если комменчу строчку mass[i]:=bufzn; все прекрасно. подскажите, что я делаю не так?

з.ы.: с сессией вопрос никак не связан, пишу для семейного пользования)

@темы: Delphi

Комментарии
09.01.2012 в 20:49

Злогадень Добродушный
элементы массива нумеруются от 0 и до n-1 его длины.
09.01.2012 в 20:50

Еще хорошо бы знать, на каком шаге итерации происходит ошибка.
Но скорей всего причина ошибки указана выше.
09.01.2012 в 20:52

у королевы всегда есть кофе (с)
aspid, то есть мне следовало бы указать SetLength (mass, nkub+1), так?
Trotil, попробую сейчас с этим советом разобраться. если не получится, научите меня, пожалуйста, отслеживать, на каком шаге итерации ошибка происходит.
09.01.2012 в 21:04

у королевы всегда есть кофе (с)
неа. не помогает. та же самая ошибка выходит.
пыталась обозначать, как SetLength (mass, nkub+1), через nn:=nkub+1; SetLength (mass, nn) - ну мало ли, вдруг не воспринимает из-за +1, где nn - обозначена как integer.

или я неправильно как-то исправляю?
09.01.2012 в 21:28

у королевы всегда есть кофе (с)
однако, если пишу: nn:=nkub+100 - все работает.
спасибо, товарищи. навели на истину.

но расскажите, пожалуйста, если кто в курсе, почему nn:=nkub+1; не работает, а nn:=nkub+100 - работает. не догоняю толком.
09.01.2012 в 21:57

Православные красные звёзды над Кремлём канонично горят ©

Где нынче так Паскаль преподают? :facepalm: Оставьте в условии только chk1.Checked, оно само по себе либо 1 либо 0.



Оно у вас и не будет работать, вы вместо последовательного наращивания строки каждый раз присваиваете ей новое значение.
Рекомендую сначала собрать строку целиком через String := String + [что у вас там следующее], и только потом 1 раз записать её в Edt4.text
И не злоупотребляйте IntToStr и StrToInt в теле программы, если это можно сделать один раз перед выводом. Кстати, выводить советую в Memo или в listbox, чтобы сохранялась история бросков, иногда полезно.

Построчный прогон программы обычно называется step by step, поищите в хэлпе вашего средства разработки или рядом с кнопкой запуска проекта. Или F7.
09.01.2012 в 22:43

у королевы всегда есть кофе (с)
спасибо. попробуем.
09.01.2012 в 22:53

Злогадень Добродушный
стоп. куча мелких глюков.


09.01.2012 в 23:02

Злогадень Добродушный
и опять стоп. зачем инициализация в общем списке? лучше тогда объявить их внутри процедуры. тем более, вы каждый раз задаете новый размер массива кол-ва бросков


10.01.2012 в 12:19

у королевы всегда есть кофе (с)
aspid, да, вы правы. особенно с тем, что я забыла обнулить st.

спасибо всем отвечавшим. помогли разобраться. теперь все работает, как задумывалось)