Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 19:18   #1
Antua
 
Регистрация: 23.03.2012
Сообщений: 3
По умолчанию бъет ли ферзь, установленный в поле (k, l) поле (m, n).

Здравствуйте!
Я первый раз обращаюсь за помощью, не откажите...
Всегда шахматы терпеть не могла, так вот еще и задача попалась
в моем варианте... Но что ферзь ходит во все стороны знаю.
Если это возможно, с комментарием.
Задания на VBA (Excel):
Поле шахматной доски определяется парой натуральных чисел, первое из которых задает номер вертикали, а второе – номер горизонтали. Даны натуральные числа k, l , m, n. Требуется выяснить: бъет ли ферзь, установленный в поле (k, l) поле (m, n).


Написать по-русски (прописью)

Спасибо всем кто ответит

Ой, я в чью-то тему влезла, а как удалить не знаю

Последний раз редактировалось Antua; 23.03.2012 в 19:21.
Antua вне форума Ответить с цитированием
Старый 23.03.2012, 21:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. k=m - на одной вертикали
2. l=n - на одной горизонтали
3. |k-m|=|l-n| - на одной "диагонали"
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2012, 21:18   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

если выполнено k=m то фигуры на одной горизонтали
l=n на одной вертикали
k-l = m-n на одной из диагоналей
k+l = m+n на другой диагонали

если выполнено хотя бы одно из условий то бъет
если не выполнено ни одно условие то нет.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.03.2012, 07:22   #4
Antua
 
Регистрация: 23.03.2012
Сообщений: 3
По умолчанию

Спасибо, ребята!
Обоим жму на весы (как учил один знакомый)
Antua вне форума Ответить с цитированием
Старый 24.03.2012, 08:11   #5
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию

есть программа проверки выполнения правильности хода конем. Принцип такой же:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  turn, letter1, letter2, abc, num: string;
  number1, number2, n1, n2: integer;
begin
  // Проверка правильности хода конем
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);

  abc:='ABCDEFGH';
  num:='12345678';

  read(turn);

  // Проверка на количество символов считанного хода
  if length(turn) < 5 then begin write('ERROR'); exit; end;

  // Проверка на корректность символов
  if (pos(turn[1], abc) = 0) or (pos(turn[2], num) = 0) or (turn[3] <> '-') or (pos(turn[4], abc) = 0) or (pos(turn[5], num) = 0) then begin write('ERROR'); exit; end;

  letter1:=turn[1];
  number1:=strtoint(turn[2]);

  letter2:=turn[4];
  number2:=strtoint(turn[5]);

  n1:=pos(turn[1], abc);
  n2:=pos(turn[4], abc);

  // Определяем направление хода. По горизонтали или вертикали
  // По вертикали. Разница между позициями букв не может быть больше 1. Так же проверяем разность цифр, она не может быть больше 2-х
  if ((n1-n2 = 1) or (n1-n2 = -1)) and ((number1 - number2 = 2) or (number1 - number2 = -2)) then begin write('YES'); exit; end
  // Ход по горизонтали. Проверяем разность цифр, она не может быть больше 1
  else if ((n1-n2 = 2) or (n1-n2 = -2)) and ((number1 - number2 = 1) or (number1 - number2 = -1)) then begin write('YES'); exit; end
  // Если эти условия не подходят, значит конем так не ходят =)
  else write('NO');

end.
ros.pro вне форума Ответить с цитированием
Старый 24.03.2012, 12:03   #6
vova_
Форумчанин
 
Аватар для vova_
 
Регистрация: 07.11.2011
Сообщений: 100
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
1. k=m - на одной вертикали
2. l=n - на одной горизонтали
3. |k-m|=|l-n| - на одной "диагонали"
а в коде использовать условие if (k-m)*(l-n)*(abs(k-m)-abs(l-n))<>0 then ...
vova_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверить по позициям на шахматной доске бьёт ли ферзь заданное поле (Delphi) kaznachey1993 Помощь студентам 19 29.05.2014 20:58
Как из простого мемо записать в поле БД Access в поле тоже типа мемо с сохранением всех абзацев пробелов Speeker БД в Delphi 2 28.11.2011 16:22
Уникальное поле и поле счетчик в IBexpert Ist Помощь студентам 4 28.05.2011 09:14
Значения в поле подстановок зависят от значения в другом поле pyhtelka Microsoft Office Access 4 13.06.2010 10:42
После ввода в поле по Enter нужно перейти на другое поле! •ScReam•™ Помощь студентам 2 16.06.2009 08:47