Цитата
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0
5 6 7 8
9 10 11 12
13 14 15 0
(...правильно! игра в "15")
Я, не особо крутой программер, решил этот вопрос примерно так:
Код
i:=1;
result := false;
for х:=1 to 4 do
for у:=1 to 4 do
begin
if i<16 then
begin
if pole[x][y] <> i then exit;
i := i+1;
end;
end;
result := true;
imho должно работать. Не работает! Лезу в отладчик, смотрю значения переменных х и у. Что за лажа... в первой же итерации х=4, и у=4. Во второй итерации х=3, у=4. Протираю глаза, смотрю в код - да нет же! У меня там нет никакого downto! А прога работает так, будто у меня цикл построен с убыванием индексов. Ладно. Может, я и идиот. Вывожу значения х не только в отладчике, а еще пишу их в caption формы. Ага! Теперь х пошел от 1 до 4, а вот у по-прежнему считается от 4 до 1. Нормально? Если я в программе написал for y:=1 to 4 do, то я вообще-то рассчитываю, что программа именно это и сделает! Даже если я отвернулся! ;) И не компиляторова ума это дело втихаря мой код переиначивать! Даже если он дурацкий! Что ли, отключить оптимизацию в опциях компилятора?...
...слегка поостыв, вижу в своем коде ошибочку... таки я идиот... циклы по х и по у надо поменять местами. Меняю... Опа! Прога заработала, так, как я и хотел. Но почему в отладчике индексы идут по-прежнему "задом наперед"??? Это ж еще зачем???? Чтобы не быть голословным, даю скриншот. Самая первая итерация цикла. По замыслу должно быть х=1, у=1, i=1, Pole[x][y]=1. В отладчике - то, что на скрине. х=4, у=4, i=1, Pole[x][y]=0. Но прога при этом работает "по замыслу", вот что меня убивает. Если бы отладчик был прав, то был бы выход из процедуры. А его не происходит. Не, забью я на программирование... пойду в балерины...
Сообщение отредактировано: Бродяжник -