Mizuwokiru 181 Опубликовано 17 сентября, 2015 Всем привет! Тут такое дело, на лабораторке выдали задачу: "Есть шахматный конь и доска 8х8. Случайным образом задается начальная позиция коня. Последующие шаги тоже загадываются рандомом, но при этом учитывается правила ходьбы конем, невозможность пересечь границы доски и ограничение на ходы (а именно то, что нельзя ходить в одну и ту же клетку дважды). Доска - матрица 8х8, содержащая в себе значения типа byte. Каждое значение - это номер хода, на котором данная клетка была занята (если она еще ни кем не была занята - значение равно нулю)". Ну я написал, так сказать, вроде как самый простой и краткий код, но вот беда - на одном из ходов выбивает ошибку 201 (либо выхожу за рамки массива, либо выхожу за границы типов). Котелок сейчас вообще не варит, да и FreePascal даже не показывает, где эта ошибка. Хелпаните кто-то. Вот код - http://pastebin.com/5vgQFR5B Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 17 сентября, 2015 if ((table[validateStep(stepX,1), validateStep(stepX,2)]=0) or (table[validateStep(stepX,-1), validateStep(stepX,2)]=0) or (table[validateStep(stepX,1), validateStep(stepX,-2)]=0) or (table[validateStep(stepX,-1), validateStep(stepX,-2)]=0) or (table[validateStep(stepX,2), validateStep(stepX,1)]=0) or (table[validateStep(stepX,-2), validateStep(stepX,1)]=0) or (table[validateStep(stepX,2), validateStep(stepX,-1)]=0) or (table[validateStep(stepX,-2), validateStep(stepX,-1)]=0)) then Может я чего не понимаю, но почему здесь только Х? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mizuwokiru 181 Опубликовано 17 сентября, 2015 Может я чего не понимаю, но почему здесь только Х? Странно, что этого не заметил, ппц. Но все равно, не из-за этого ошибку выбивает. Я вот думаю, мб тут с минусом что-то не то творится. Долбанный паскаль... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 17 сентября, 2015 (изменено) Епт=) Ну ты конечно накосячил=) Смотри. Проверяешь, validateStep, не ходил ли ты на клетку, но не учел одной ошибки. Допустим Х = 1 У = 6, при любом ходе. Проверяем проверкой: (table[validateStep(stepX,-1), validateStep(stepY,-2)]=0) При проверке ты выйдешь за рамки и изменишь validateStep и если выдаст, что 0 (не было хода) If пройдет и начнётся выбор хода и опять же на этой проверке выдаст, что 0 (можно ходить, т.к. валидейтСтеп ты изменяешь принудительно на нужное тебе, а не сообщаешь об ошибке). И тут привет, у тебя Х становится 0 и ты выходишь за рамки доски. Делай проверку в validateStep, если if (step = 1) and (n < 0), то ход не верен, а не изменяй переменные. Надеюсь поймешь, а то рассказчик из меня еще тот=) З.Ы. Как же бесит синтаксис паскаля, после явы=) А 8-9 лет назад, после бейсика, казался нормальным=) Изменено 17 сентября, 2015 пользователем Naik 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mizuwokiru 181 Опубликовано 18 сентября, 2015 Епт=) Ну ты конечно накосячил=) Смотри. Проверяешь, validateStep, не ходил ли ты на клетку, но не учел одной ошибки. Допустим Х = 1 У = 6, при любом ходе. Проверяем проверкой: (table[validateStep(stepX,-1), validateStep(stepY,-2)]=0) При проверке ты выйдешь за рамки и изменишь validateStep и если выдаст, что 0 (не было хода) If пройдет и начнётся выбор хода и опять же на этой проверке выдаст, что 0 (можно ходить, т.к. валидейтСтеп ты изменяешь принудительно на нужное тебе, а не сообщаешь об ошибке). И тут привет, у тебя Х становится 0 и ты выходишь за рамки доски. Делай проверку в validateStep, если if (step = 1) and (n < 0), то ход не верен, а не изменяй переменные. Надеюсь поймешь, а то рассказчик из меня еще тот=) З.Ы. Как же бесит синтаксис паскаля, после явы=) А 8-9 лет назад, после бейсика, казался нормальным=) Кусок текста "При проверке..." было лень читать, увидел 1 и 6, -1 и -2, ппц, доперло, как я мог это пропустить... Спасибо, выручил. P.S.: И не говори, я как в тех поступил с начинаниями явы - начали мусолить паскаль... А после этого вроде и перешли на плюсы, но вот уже 3-ий курс - опять паскаль. :/ Они видать издеваются... В общем, если кому понадобится, стоит создать функцию типа boolean, к примеру isValidStep, с аргументами: шахматная доска, координаты клетки, в которой находится конь и куда нужно двигаться. Ну либо просто координаты клетки, куда надо двигаться, если глобальные переменные объявлены в начале. Вот решение, если что - http://pastebin.com/VP0tuQS5 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 19 сентября, 2015 P.S.: И не говори, я как в тех поступил с начинаниями явы - начали мусолить паскаль... А после этого вроде и перешли на плюсы, но вот уже 3-ий курс - опять паскаль. :/ Они видать издеваются... Я тебя еще сильнее огорчу, в институте еще и фортраны всякие изучают, по крайне мере у меня было так. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты