Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 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
Сообщений: 19,053
По умолчанию

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

если выполнено 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
Сообщений: 99
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
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_ вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверить по позициям на шахматной доске бьёт ли ферзь заданное поле (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


23:19.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.