IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> ШАХМАТЫ, ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: CyberrMann

Репутация: -  0  +


Помогите!!! Ато убился уже!

Шахматы
(Время: 1 сек. Память: 16 Мб Сложность: 18%)

Совсем недавно Вася занялся программированием и решил реализовать собственную программу для игры в шахматы. Но у него возникла проблема определения правильности хода конем, который делает пользователь. Т.е. если пользователь вводит значение «C7-D5», то программа должна определить это как правильный ход, если же введено «E2-E4», то ход неверный. Так же нужно проверить корректность записи ввода: если например, введено «D9-N5», то программа должна определить данную запись как ошибочную. Помогите ему осуществить эту проверку!

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


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

В выходной файл OUTPUT.TXT нужно вывести «YES», если указанный ход конем верный, если же запись корректна (в смысле правильности записи координат), но ход невозможен, то нужно вывести «NO». Если же координаты не определены или заданы некорректно, то вывести сообщение «ERROR».


входной ---- выходной
C7-D5 ----- YES
E2-E4 ---- NO
BSN --- ERROR

Сообщение отредактировано: Cyber -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Держи. Решал на сайте олимпиадного программирования.

uses sysutils;
{$M-}
type point = record
x,y:byte;
end;

var f:textfile;
lets:set of char=['A','B','C','D','E','F','G','H'];
hod:string[10];
h1,h2:point;

Procedure er;
begin
writeln(f,'ERROR');
closefile(f);
halt;
end;

Procedure yes;
begin
writeln(f,'YES');
closefile(f);
halt;
end;

Procedure no;
begin
writeln(f,'NO');
closefile(f);
halt;
end;

function voz(c:char):byte;
var i:char;
sc:byte;
begin
sc:=0;
for i:='A' to 'H' do begin
inc(sc);
if i=c then begin
result:=sc;
exit;
end;
end;
end;

begin
assignfile(f,'input.txt');
reset(f);
readln(f,hod);
closefile(f);
assignfile(f,'output.txt');
rewrite(f);
if length(hod)<>5 then er;
if (not(hod[1] in lets)) or (not(hod[4] in lets)) then er;
if (not(hod[2] in ['1'..'8'])) or (not(hod[5] in ['1'..'8'])) then er;
if hod[3]<>'-' then er;
h1.x:=voz(hod[1]);
h1.y:=strtoint(hod[2]);
h2.x:=voz(hod[4]);
h2.y:=strtoint(hod[5]);
if (h1.x-1=h2.x) and (h1.y+2=h2.y) then yes;
if (h1.x+1=h2.x) and (h1.y+2=h2.y) then yes;
if (h1.x-2=h2.x) and (h1.y+1=h2.y) then yes;
if (h1.x-2=h2.x) and (h1.y-1=h2.y) then yes;
if (h1.x-1=h2.x) and (h1.y-2=h2.y) then yes;
if (h1.x+1=h2.x) and (h1.y-2=h2.y) then yes;
if (h1.x+2=h2.x) and (h1.y-1=h2.y) then yes;
if (h1.x+2=h2.x) and (h1.y+1=h2.y) then yes;
no;
end.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


ну и условия...
Проще сделать условие
(abs (x1-x2)=1 and abs(y1-y2)=2) or (abs (x1-x2)=2 and abs(y1-y2)=1)
(вроде так)
и проверки на вхождение в размеры доски
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Проще сделать условие
Проще проверить вот так:
  if (abs(h1.x - h2.x) * abs(h1.y - h2.y)) = 2 then yes else no;
. Да и Voz зачем-то переусложнен... Все проще:
function voz(c:char):byte;
begin
voz := Ord( с ) - Ord('A') + 1;
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Цитата
Проще проверить вот так:
Хитро, проще уже точно некуда smile.gif

Сообщение отредактировано: Client -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: CyberrMann

Репутация: -  0  +


вот я как сделал:
Код
abs( ord( s[1])- ord( s[4]))+ abs( ord( s[2])-ord (s[5]))= 3

но блин по програме тестеру не проходит даже 1ый тест.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


1. Пользуйся, пожалуйста, тэгами code=pas и /code (см. правила вверху страницы).
Цитата(Cyber @ 8.03.2010 7:46) *
вот я как сделал:
Код
abs( ord( s[1])- ord( s[4]))+ abs( ord( s[2])-ord (s[5]))= 3

но блин по програме тестеру не проходит даже 1ый тест.
Ессно. Пример хода, который годится по твоему тесту, но на самом деле неверен:
A1-A4
Бери алгоритм volvo.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Levitra 10 Mg Bayer Precio
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Hidradenitis Suppurativa Amoxicillin
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 22:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name