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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2016, 03:54   #1
zagonicb
Пользователь
 
Регистрация: 30.03.2016
Сообщений: 14
По умолчанию Поле шахматной доски

Здравствуйте друзья, решил создать тему по задаче, я видел похожие на форуме, но нормального разбора этой задачи нет. В общем не нужно писать готовую программу, а прошу вас помочь разобраться. Есть условие:
Цитата:
Поле шахматной доски определяется парой натуральных чисел, каждое из ко-торых не превосходит 8: первое число — номер вертикали (при счете слева направо), второе — номер горизонтали (при счете снизу вверх). Даны нату-ральные числа a, b, c, d, каждое из которых не превосходит 8.
а) На поле (a, b) расположена ладья. Записать условие, при котором она угро-жает полю (c, d).
б) На поле (a, b) расположен слон. Записать условие, при котором он угрожает полю (c, d).
в) На поле (a, b) расположен король. Записать условие, при котором он может одним ходом попасть на поле (c, d).
г) На поле (a, b) расположен ферзь. Записать условие, при котором он угрожа-ет полю (c, d).
д) На поле (a, b) расположена белая пешка. Записать условие, при котором она может одним ходом попасть на поле (c, d):
1) при обычном ходе;
2) когда она "бьет" фигуру или пешку соперника.
Примечание: Белые пешки перемещаются на доске снизу вверх.
е) На поле (a, b) расположена черная пешка. Записать условие, при котором она может одним ходом попасть на поле (c, d):
1) при обычном ходе;
2) когда она "бьет" фигуру или пешку соперника.
Примечание: Черные пешки перемещаются на доске сверху вниз.
ж) На поле (a, b) расположен конь. Записать условие, при котором он угрожа-ет полю (c, d).
Ну для начала меня смущает условие, почему по-вертикали (слева направо), а не снизу вверх? И как лучше понять эту задачу?
Извините пишу на js, но думаю смысл вам будет понятен.
Код:
var a = prompt("Число, которое не превосходит 8");
var b = prompt("Число, которое не превосходит 8");
var c = prompt("Число, которое не превосходит 8");
var d = prompt("Число, которое не превосходит 8");
  if (a == c || b == d){
     console.log("Ладья угрожает полю c, d");
  }
  else{
    console.log("Ладья на своем поле");
  }
Пока не пишу продолжение, хочу от вас узнать, правильный ход мысли?
|| запинается на «правде», && запинается на «лжи».

Последний раз редактировалось zagonicb; 13.04.2016 в 04:03.
zagonicb вне форума Ответить с цитированием
Старый 13.04.2016, 06:31   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Это не условие, а пояснение, что счёт вертикалей (которые харатеризуют линию клеток сверху-вниз) производится слева (стало быть вертикаль номер 1 самая левая) направо, для горизионталей аналогично, что в итоге представляет нумерацию так, как её видит игрок белыми (т.к. для играющего чёрными картина наоброт, и для ясности такого момента и написано это уточнение).

Ход мыслей в целом корректный (для ладьи норм, только текст в else ветке странный), с парой уточненией:
1 стоит проверять выход всех введённых чисел за значения 1..8
2 обязательно уточнить, условие задачи предполагает отсутсвивие иных фигур для каждого случая или же нет ? с наличием других фигур картина угроз будет иная (надо учитывать что они могут мешать).
phomm вне форума Ответить с цитированием
Старый 13.04.2016, 09:38   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

phomm, всё в точку!

добавлю. в задаче есть вопросы про движение пешек, вот там направление важно учитывать. Впрочем, в условии про это явно сказано.

Цитата:
ж) На поле (a, b) расположен конь. Записать условие, при котором он угрожа-ет полю (c, d).
Код:
if ( (abs(a-c)*abs(b-d))==2 ) 
   угрожает
else
   не угрожает
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2016, 16:22   #4
zagonicb
Пользователь
 
Регистрация: 30.03.2016
Сообщений: 14
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
2 обязательно уточнить, условие задачи предполагает отсутсвивие иных фигур для каждого случая или же нет ? с наличием других фигур картина угроз будет иная (надо учитывать что они могут мешать).
По условию я так понял, что тут предполагает отсутствие других фигур для каждого случая. Иначе бы задача сильно усложнилась. Да и в задачники, уровень сложности задачи постепенно повышается, либо указывают, что эта задача повышенной сложности.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
phomm, всё в точку!

добавлю. в задаче есть вопросы про движение пешек, вот там направление важно учитывать. Впрочем, в условии про это явно сказано.


Код:
if ( (abs(a-c)*abs(b-d))==2 ) 
   угрожает
else
   не угрожает
Извините не совсем понял, что вы хотели сказать в своем коде, то что значение абсолютное это ладно, но можно небольшой пример?
|| запинается на «правде», && запинается на «лжи».
zagonicb вне форума Ответить с цитированием
Старый 13.04.2016, 16:38   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
По условию я так понял, что тут предполагает отсутствие других фигур для каждого случая.
да, согласен. Как минимум, тогда координаты этих фигур тоже задавались в качестве входных данных. Раз этого нет, значит, и фигур других на доске нет.

Цитата:
Извините не совсем понял, что вы хотели сказать в своем коде, то что значение абсолютное это ладно, но можно небольшой пример?
Вы знаете, как ходит конь? Буквой "Г" - на одну клеточку по одной оси и на две клеточки по другой.

Дальше всё просто. заданы два поля.
возьмите разность, сколько клеточек по горизонтали между полями (вычесть a-c),
возьмите разность, сколько клеточек по вертикали между полями (вычесть b-d),
и перемножьте эти две разности.
если получите число 2, то ходом коня можно перейти с одного поля на другое, иначе - нельзя перейти.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2016, 17:01   #6
zagonicb
Пользователь
 
Регистрация: 30.03.2016
Сообщений: 14
По умолчанию

а) Ладья
Код:
var a = prompt("Число, которое не превосходит 8");
var b = prompt("Число, которое не превосходит 8");
var c = prompt("Число, которое не превосходит 8");
var d = prompt("Число, которое не превосходит 8");
  if (a == c || b == d){
     console.log("Ладья угрожает полю c, d");
  }
  else{
    console.log("Ладья на своем поле");
  }
б) Слон
Код:
var i = prompt("количество клеток, которое должна пройти фигура не превышающая 8 клеток");
   if (a + i > c && b + i > d){
     console.log("Слон угрожает полю c, d");
  }
  else{
    console.log("Слон на своем поле");
  }

в) Король
Код:
 if (a + 1 == c && b + 1 == d){
     console.log("Король угрожает полю c, d");
  }
  else{
    console.log("Король на своем поле");
  }
г) Ферзь
Код:
var i = prompt("количество клеток, которое должна пройти фигура не превышающая 8 клеток");
   if (a + i > d && b + i > d){
     console.log("Ферзь угрожает полю c, d");
  }
  else{
    console.log("Ферзь на своем поле");
  }

Ну вот так, пока без пешки.
Да и я тут понял, что в самом начале ошибка, которые я задал переменные, т.к поле на 8 клеток, а у меня выходит на все 16
|| запинается на «правде», && запинается на «лжи».

Последний раз редактировалось zagonicb; 13.04.2016 в 17:17.
zagonicb вне форума Ответить с цитированием
Старый 13.04.2016, 17:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не понял, при чём здесь "количество клеток, которое должна пройти фигура не превышающая 8 клеток" ?!
это Вы сами придумали?
так это неверно!

ну и для Короля условие неверно.
подумайте, может ли король с клетки 5,5 перейти
- на клетку 4,4 ?
- на клетку 5,4 ?
- на клетку 4,5 ?

для короля правильный ответ:
Код:
if (abs(a-c)==1 ||  abs(b-d) == 1)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2016, 17:29   #8
zagonicb
Пользователь
 
Регистрация: 30.03.2016
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не понял, при чём здесь "количество клеток, которое должна пройти фигура не превышающая 8 клеток" ?!
это Вы сами придумали?
так это неверно!

ну и для Короля условие неверно.
подумайте, может ли король с клетки 5,5 перейти
- на клетку 4,4 ?
- на клетку 5,4 ?
- на клетку 4,5 ?

для короля правильный ответ:
Код:
if (abs(a-c)==1 ||  abs(b-d) == 1)
Да, я посмотрел на шахматную доску, и понял, для Короля действительно все просто. Главное найти зависимость и сформулировать условие. Ок, тогда попрактикуюсь и ответ позже пришлю.
|| запинается на «правде», && запинается на «лжи».
zagonicb вне форума Ответить с цитированием
Старый 16.04.2016, 15:48   #9
zagonicb
Пользователь
 
Регистрация: 30.03.2016
Сообщений: 14
По умолчанию

Я сегодня порешал, и вот что у меня получилось
а) Ладья
PHP код:
 if (== || == d){
     
console.log("Ладья угрожает полю c, d");
  }
  else{
    
console.log("Не верный ход");
  } 
б)Слон
PHP код:
 if (Math.abs(c) == Math.abs(d)){
     
console.log("Слон угрожает полю c, d");
  }
  else{
    
console.log("Не верный ход");
  } 
в) Король
PHP код:
if (Math.abs(c) == || Math.abs(d) == 1){
    
console.log("Король угрожает полю c, d");
  }
  else{
    
console.log("Не верный ход");
  } 
г)Ферзь
PHP код:
if (== || == || == 0){
    
console.log("Ферзь угрожает полю c, d");
  }
  else{
    
console.log("Не верный ход");
  } 
д)Белая пешка
PHP код:
if (== && == 1){
        
console.log("Белая Пешка угрожает полю c, d");
    }
    else if(
== && == 1){
        
console.log("Белая Пешка бьет фигуру");
    }
    else{
        
console.log("Не верный ход");
  } 
е)Черная пешка
PHP код:
       if (== && == 1){
        
console.log("Черная Пешка угрожает полю c, d");
    }
    else if(
== && == 1){
        
console.log("Черная Пешка бьет фигуру");
    }
    else{
        
console.log("Не верный ход");
  } 
ж)Конь. Спасибо за прямую подсказку Serge_Bliznykov
PHP код:
if (Math.abs(c) * Math.abs(d) == 2){
    
console.log("Конь угрожает полю c, d");
  }
  else{
    
console.log("Не верный ход");
  } 
|| запинается на «правде», && запинается на «лжи».
zagonicb вне форума Ответить с цитированием
Старый 16.04.2016, 17:00   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

а) Согласен (но нет проверки, что (a,b) не совпадает с (c,d))
б) Согласен (но нет проверки, что (a,b) не совпадает с (c,d))
в) Не согласен
Код:
!(a == c && b == d) && Math.abs(a - c) <= 1 && Math.abs(b - d) <= 1
г) Не согласен
Код:
!(a == c && b == d) && (a == c || b == d || Math.abs(a - c) == Math.abs(b - d))
д) Частично согласен
Код:
if (a == c && (d - b == 1 || (b == 2 && d - b == 2))){ 
    console.log("Белая Пешка ходит на поле c, d"); 
} else if(Math.abs(c - a) == 1 && d - b == 1){ 
    console.log("Белая Пешка бьет фигуру"); 
} else{ 
    console.log("Не верный ход"); 
}
Добавлен еще случай хода с исходной позиции
е) Лень Аналогично белой пешке
ж) Согласен
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 16.04.2016 в 17:20.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi (Lazarus). Обход шахматной доски конём Ovenvan Помощь студентам 9 12.06.2015 16:35
Красивая реализация шахматной доски BestStrikS C# (си шарп) 5 05.06.2015 11:48
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
Обход шахматной доски конем wazaaaup Помощь студентам 1 04.07.2011 20:54
Пролог. Обход конем шахматной доски Gambler Помощь студентам 9 08.12.2010 22:19