Вопрос исключительно для Дельфистов и Паскалистов.
Возможно, не только у меня бывало, что счетчик в цикле начинал вести себя, как ему хочется, а не хочется мне. Пример:
for i := 1 to n do
writeln('Bla-bla-bla');
При этом i идет от n + 1 до 2. Или еще какой-то порядок, неизвестный ни мне, ни отладчику.
Как с этим бороться?
for j := 0 to length(coor) - 1 do
if coor[j][0] = buses[a].t then
for k := 1 to length(coor[j]) - 1 do
buses[a].res := (buses[a].res + buses[numbs[coor[j][k]]].res) mod eps;
Попробуйте второе. Если проблема убьётся, значит, как обычно, виноват оптимизатор :)
Стоит D+,O-.
Продолжает неправильно работать.
Почему?
А кому мне еще верить, неправильному ответу?
Поэтому при неаккуратной работе со строками (особенно с st[0] - нулевой ячейкой литерного массива) может происходить всё что угодно. Более конкретно, не имея всего кода программы, сказать трудно.
Кажется так, впрочем, Ваш результат нахождения причины такого поведения мне тоже интересен.
Ведь ведёт себя эта функция по прежнему так, как сказано выше - она берёт свое значение с нулевой ячейки.
UPD: Если Вы, конечно, не написали свою функцию под таким именем, - тогда все мои высказывания выше можно не учитывать. Я говорил о встроенной в Делфи ф-ции и её неадекватном поведении.
В цикле for j := 0 to length(coor) - 1 do значение length(coor) вычисляется только один раз до начала цикла и не перевычисляется в работе цикла, даже если размер массива изменился.
Похоже из-за этого всё, видимо, и происходит. Хотя опять же - не имея полного кода программы точнее ответить затруднительно.
Для переменных такого типа применимы только циклы while и repeat ... until ...