![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 20.02.2009
Сообщений: 6
|
![]()
Подскажите пожалуйста! Есть такая игра,.. задача логическая, "Ход конём". Нужно написать программу, которая будет решать эту задачу. Суть игры: заполнить шахматные клетки цифрами от 1 до 64 (доска 8х8) идя конём. Есть формула: i:=i+ci[k], j:=j+cj[k], где i и j - координаты следующей цифры.
Это то, что есть: Код:
Последний раз редактировалось rpy3uH; 19.03.2009 в 07:47. |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Дык а что требуется?
Чего подсказывать то?
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 20.02.2009
Сообщений: 6
|
![]()
Проблема в правильной постановке условий и циклов. Есть процедура, которая делает 1 ход, если тупик, то она делает шаг назад, есди и оттуда нельзя больше хода сделать- ещё шаг назад и.т.д. до тех пор поку не найдёт позицию, с которой можно продолжить.
|
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ну вот ябы делал примерно так:
В цикле от клетки (0,0) начал подниматься так: 1. Три_вверх-Один_вправо 2.Три_вверх-Один_влево 3. Один_вверх-Три_вправо Потом тоже самое но вниз И так четыре (если не ошибаюсь) раза.
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 20.02.2009
Сообщений: 6
|
![]()
Конь начинает ходить с позиции (1,1).
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 20.02.2009
Сообщений: 6
|
![]()
uses crt;
const ci:array [1..8] of integer=(1,2,-1,-1,-2,-2,2,1); cj:array [1..8] of integer=(2,1,2,-2,1,-1,-1,-2); type mas=array [1..8,1..8] of integer; mas2=array [1..64] of integer; var a:mas; i,j,n,k,b:integer; r:mas2; procedure shag(var a:mas; var i,j,n,k:integer; var r:mas2); begin i:=i+ci[k]; j:=j+cj[k]; a[i,j]:=n; r[n]:=k; writeln(a[i,j],' ',i,' ',j,' ',k,' ',r[n]); readln; end; begin clrscr; i:=1; j:=1; a[1,1]:=1; k:=1; for n:=2 to 64 do begin if (a[i+ci[k],j+cj[k]]=0) and (i+ci[k]<=8) and (j+cj[k]<=8) and (i+ci[k]>=1) and (j+cj[k]>=1) then begin shag(a,i,j,n,k,r); k:=1; end else if ((a[i+ci[k],j+cj[k]]<>0) or (i+ci[k]>8) or (j+cj[k]>8) or (i+ci[k]<1)or(j+cj[k]<1))and(k<8)then begin k:=k+1; n:=n-1; writeln(k,' ',n); end Вот когда дело доходит до этого условия он должен делать шаг назад, но почему-то не получается ![]() else if ((a[i+ci[k],j+cj[k]]<>0) or (i+ci[k]>8)or(j+cj[k]>8)or(i+ci[k]<1)or(j+cj[k]<1))and((k=8)or(k=r[n-1]))then begin b:=r[n-2]; i:=i-ci[r[n-2]]; j:=j-cj[r[n-2]]; n:=n-2; k:=1; writeln(i,' ; ',j,' ; ',n,' ; ',k,' ; ',r[n],' ; ',a[i,j],' ; ',b);readln; end; end; readln; end. |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Как-то Вы слишком усложняете условия. Ниже код - примерное решение. Только вряд ли Вы дождетесь в обозримое время результата. Эта задача решается по другому. Попробуйте что-нибудь почитать на эту тему. Вот, например:
Классические задачи программирования Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перевод кода из Pascal в Object Pascal | zemskov77 | Общие вопросы Delphi | 1 | 03.01.2009 09:37 |
Need help, Pascal | Бедный студент | Помощь студентам | 0 | 31.05.2008 01:38 |