Задача "Шахматный конь"

программирование математика pascal шахматы паскаль

Задача A. Шахматный конь
(Время: 1 сек. Память: 16 Мб Баллы: 100)

Вася решил научиться играть в шахматы. Он нашел книгу с записями партий и внимательно их изучает. Может быть, когда-нибудь Вася станет великим шахматистом, но пока он еще учится в начальной школе, и ему нелегко дается шахматная нотация. Больше всего трудностей у Васи вызывают ходы шахматного коня. Он попросил вас написать программу, которая сможет сообщить Васе, на какие клетки можно пойти конем с заданной клетки.

Вы, наверное, тоже знаете, что конь в шахматах всегда перемещается либо на две клетки по горизонтали и на одну по вертикали, либо на одну по горизонтали и на две по вертикали. Вертикали обозначаются маленькими латинскими буквами от a до h, а горизонтали - цифрами от 1 до 8. Любая клетка на шахматной доске обозначается буквой соответствующей вертикали и цифрой соответствующей горизонтали, например, c6 или e2.

Входные данные

Во входном файле INPUT.TXT записано 2 символа – координаты клетки, где стоит конь.

Выходные данные

В выходной файл OUTPUT.TXT в произвольном порядке выведите все координаты клеток, на которые за один ход может попасть конь, находящийся на заданной клетке.


Уже есть код (далеко не идеальный), но он показывает ответы с отрицательными числами и нулями.



var
masb:array[1..10] of integer;
masc:array[1..10] of integer;
n,n1,n2:string;
code,a,b,i:integer;
begin
{assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);}
read(n);
n1:=copy(n,1,1);
n2:=copy(n,2,1);
val(n2,a,code);
if n1='a' then b:=1 else
if n1='b' then b:=2 else
if n1='c' then b:=3 else
if n1='d' then b:=4 else
if n1='e' then b:=5 else
if n1='f' then b:=6 else
if n1='g' then b:=7;
masc[1]:=a+1;
masc[2]:=a+2;
masc[3]:=a+2;
masc[4]:=a+1;
masc[5]:=a-1;
masc[6]:=a-2;
masc[7]:=a-2;
masc[8]:=a-1;
masb[1]:=b-2;
masb[2]:=b-1;
masb[3]:=b+1;
masb[4]:=b+2;
masb[5]:=b+2;
masb[6]:=b+1;
masb[7]:=b-1;
masb[8]:=b-2;
for i:=1 to 8 do
if ((masc[i]>=1) and (masc[i]<=8)) or ((masb[i]>=1
) and (masb[i]<=8)) then begin
case masb[i] of
1:begin; write('a',masc[i]);writeln; end;
2:begin; write('b',masc[i]);writeln; end;
3:begin; write('c',masc[i]);writeln; end;
4:begin; write('d',masc[i]);writeln; end;
5:begin; write('e',masc[i]);writeln; end;
6:begin; write('f',masc[i]);writeln; end;
7:begin; write('g',masc[i]);writeln; end;
8:begin; write('h',masc[i]);writeln; end;
end;
end;
end.

В чем ошибка?
Ответы:
((masc[i]>=1) and (masc[i]<=8)) or ((masb[i]>=1) and (masb[i]<=8)) —  тут по середине and, а не or.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.