|
Вопрос # 1 196/ вопрос открыт / |
|
Здравствуйте, эксперты!
Описать логическую функцию HodLadia(pole1,pole2), проверяющую может ли ладья за один ход перейти с pole1 на pole2 шахматной доски, использовать типы:
Veryical= (a,b,c,d,e,f,g,h) и
Pole = record
Vert: Vertical;
Horiz: 1..8
end;
 |
Вопрос задал: istra (статус: Посетитель)
Вопрос отправлен: 13 декабря 2007, 19:45
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Николай Рубан
Здравствуйте, istra!
type Vertical = (a,b,c,d,e,f,g,h);
Pole = record
Vert: Vertical;
Horiz: 1..8
end;
function HodLadia(pole1,pole2:Pole):Boolean; {функция возвращает значение TRUE,
если ладья может за один ход перейти с pole1 на pole2, и FALSE в противном случае}
begin
Result:=(pole1.Vert=pole2.Vert) or (pole1.Horiz=pole2.Horiz);
end;
var p1,p2:Pole;
begin
p1.Vert:=b; p1.Horiz:=2; {ввод данных}
p2.Vert:=b; p2.Horiz:=3;
writeln(HodLadia(p1,p2)); {вывод результата}
readln;
end.
Но есть одно НО при данном типе Вам будет проблематично ввести данные в поле Vert: Vertical;, поскольку оно описано пользовательским типом и для ввода данных прийдется дополнительно организовывать обработку данных. Поэтому предлагаю Вам немного видиизменитьь тип до такого вида:
Vertical = 'a'..'h';
Соответственно Вам прийдется вводить данные классического символьного типа (char). Например так:
var p1,p2:Pole;
begin
readln(p1.Vert); readln(p1.Horiz);
readln(p2.Vert); readln(p2.Horiz);
writeln(HodLadia(p1,p2));
readln;
end.
Good Luck!!!
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 13 декабря 2007, 20:24
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, istra!
сделаю поправку к предыдущему ответу.
Во первых, ладья не может пойти в ту же клетку, в которой она стоит на данный момент, точнее это не есть ходом.
Поэтому в функции нужно исправить. и второе, ладья, в отличии от коня не может прыгать через другие фигуры, хотя может стать на место фигуры противоположного цвета.
type Horizontal = 1..8;
function HodLadia(pole1,pole2:Pole):Boolean; {функция возвращает значение TRUE,
если ладья может за один ход перейти с pole1 на pole2, и FALSE в противном случае}
var
V: Vertical;
h:Horizontal;
begin
Result:=(pole1.Vert=pole2.Vert) xor (pole1.Horiz=pole2.Horiz);
if not result then exit; //дальше бессмысленно делать проверки.
if pole1.Vert=pole2.Vert then
begin
for h := pole1.horiz to pred(pole2.horiz) do
if not check(h,pole1.Vert) then begin result := false; exit;end;
for v := pole1.vert to pred(pole2.vert) do
if not check(pole1.horiz,v) then begin result := false; exit;end;
result := true;
end;
end;
где check(h:Horizontal; v:vertical):boolean; - функция, которая проверяет, свободна ли клетка.
в коде есть небольшой допуск - я предположил, что pole2.horiz > pole1.horiz и pole2.vert > pole1.vert, но я думаю, вы с этим справитесь:)
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 14 декабря 2007, 01:17
Оценка за ответ: 5
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|