Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 99

Написать программу, которая по шахматному ходу определяет корректный ли это ход ферзя

20.09.2016, 17:37. Показов 12979. Ответов 13

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void Main()
{
    TestMove("a1", "d4");
    TestMove("f4", "e7");
    TestMove("a1", "a4");
    FinalTesting();
}
 
public static void TestMove(string from, string to)
{
    Console.WriteLine("{0}-{1} {2}", from, to, IsCorrectMove(from, to));
}
 
 
public static bool IsCorrectMove(string from, string to)
{
    var dx = Math.Abs(to[0] - from[0]); //смещение фигуры по горизонтали
    var dy = Math.Abs(to[1] - from[1]); //смещение фигуры по вертикали
    
}


Написать программу, которая по шахматному ходу определяет корректный ли это ход ферзя. Координаты исходной и конечной позиции хода передаются строкой в обычной шахматной нотации, например, "a1". Вроде ве бы ничего, нужно просто дописать метод isCorrectMove(), но я вообще не понимаю, как мы можем строку, преобразовать в модуль, не имея числа да еще и не конвертируя ее в число. То есть, что значат строки var dx = Math.Abs(to[0] - from[0]); и пр.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2016, 17:37
Ответы с готовыми решениями:

Написать программу, которая определяет соответствие графов и будет выводить это графически
Написать программу которая определяет насколько гарфу А соответствует граф B и будет выводить это графически (графы строятся рандомно)

Корректный ли это ход на пустой шахматной доске
Дана начальная и конечная клетки на шахматной доске. Корректный ли это ход на пустой доске для: слона, коня, ладьи, ферзя, короля?

Строка: Написать программу, которая читает строку и определяет, что это, Ваше имя, фамилия или отчество.
Написать программу, которая читает строку и определяет, что это, Ваше имя, фамилия или отчество. Если ни то, ни другое и не третье, то...

13
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
20.09.2016, 17:42
научитесь наконец называть темы информативно.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
20.09.2016, 17:50
Bein,
 Комментарий модератора 
Хотелось бы еще научить Вас выделять программный код с помощью специальных тегов.
Это очень просто. Выделяете текст с кодом программы, а затем щелкаете по кнопке над полем ввода, соответствующей языку программирования. В данном случае это кнопка "C#".
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
20.09.2016, 17:51
Цитата Сообщение от Bein Посмотреть сообщение
как мы можем строку
to[0] это не строка, а char это примерно то же самое, что и ushort (беззнаковое целое число)
Цитата Сообщение от Bein Посмотреть сообщение
преобразовать в модуль
модуль это модуль, число это число. Преобразовать в модуль нельзя, можно вычислить модуль числа
Цитата Сообщение от Bein Посмотреть сообщение
не имея числа да еще и не конвертируя ее в число
см. пункт 1 + неявные преобразования типов
0
0 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 99
20.09.2016, 17:55  [ТС]
Хорошо, я буду стараться. Прост недавно тут

Добавлено через 1 минуту
КОП, дак а как мы из char вычитаем char и получаем букуву?

Добавлено через 2 минуты
КОП, и как можно у символа вычислить модуль?
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
20.09.2016, 18:10
Цитата Сообщение от Bein Посмотреть сообщение
и как можно у символа вычислить модуль
каким боком тут вообще модуль участвует в вычитании?
Цитата Сообщение от Bein Посмотреть сообщение
дак а как мы из char вычитаем char и получаем букуву
Пронумеруй алфавит к примеру, тогда А=1 Б=2, В=3. Теперь нехитрая математика Б+В=2+3=5=Д. Ну тут по аналогии, только вместо алфавита таблица кодировки

Добавлено через 9 минут
PS: вместо вычисления прочитал вычитание, первая строка не в тему получилась
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
20.09.2016, 18:12
Bein,
как-то так:
C#
1
2
3
4
5
6
public static bool IsCorrectMove(string from, string to)
{
    int d1 = char.ToUpper(from[0]) - char.ToUpper(to[0]);
    int d2 = int.Parse(from[1].ToString()) - int.Parse(to[1].ToString());
    return (d1 == d2 || d1 == 0 || d2 == 0 && from != to);
}
Это без проверки на выход за пределы доски
0
0 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 99
20.09.2016, 18:16  [ТС]
Исходный код изменять нельзя, только дописывать. Мне главное объясните подробнее, что значат строки

C#
1
2
var dx = Math.Abs(to[0] - from[0]); 
var dy = Math.Abs(to[1] - from[1]
);
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
20.09.2016, 18:28
Лучший ответ Сообщение было отмечено Bein как решение

Решение

Цитата Сообщение от Bein Посмотреть сообщение
Исходный код изменять нельзя
тогда
C#
1
2
3
4
5
6
public static bool IsCorrectMove(string from, string to)
{
    var dx = Math.Abs(to[0] - from[0]);
    var dy = Math.Abs(to[1] - from[1]);
    return (dx == dy || dx == 0 || dy == 0 && from != to);
}
Но если ввести a1 и B2, то выдаст false.
Объяснение var dx = Math.Abs(to[0] - from[0]):
to[0] - первый символ строки to (тип char)
from[0] - первый символ строки from
Char является не просто символьным типом, но и целочисленным, при использовании в математических операциях автоматически преобразуемым в значение типа int, хранящее код соответствующего символа.
Таким образом вычитая to[0] - from[0] получаем смещение ферзя по горизонтали (например, 'c'-'a'=2).
Math.Abs - модуль разности, т.к. ферзь может перемещаться как влево, так и вправо.
Вместо var можно записать int.
1
2 / 2 / 0
Регистрация: 07.11.2013
Сообщений: 71
05.03.2018, 02:04
Даценд, у меня не совсем правильно отрабатывает Ваша программа: а1-а1 записывает в true. Видимо, сложновато для одной строки. Есть такой варик:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
bool res=true;
            
            var dx = Math.Abs(to[0] - from[0]); //смещение фигуры по горизонтали
            var dy = Math.Abs(to[1] - from[1]); //смещение фигуры по вертикали
            if(dx == 0 && dy == 0)// или if(from == to)
                res = false;
            else if(dx == 0 || dy == 0) 
                res = true;
            else if(dx == dy)
                res = true;
            else res = false;
            
            return res;
0
Модератор
Эксперт функциональных языков программирования
3137 / 2284 / 469
Регистрация: 26.03.2015
Сообщений: 8,888
05.03.2018, 02:38
Цитата Сообщение от Даценд Посмотреть сообщение
return (dx == dy || dx == 0 || dy == 0 && from != to);
Скобок не хватает. Последнее условие проверяется, только когда dx != 0.
1
Модератор
Эксперт функциональных языков программирования
3137 / 2284 / 469
Регистрация: 26.03.2015
Сообщений: 8,888
05.03.2018, 02:52
Djey40,
"if(condition) return true;" можно заменить на "return condition".

Вашу последовательность if-else можно формально заменить на:
!(dx == 0 && dy == 0) && ((dx == 0 || dy == 0) || (dx == dy))
После упрощения:
(dx != 0 || dy != 0) && (dx == 0 || dy == 0 || dx == dy)

Так как числа не отрицательные, можно записать так (но при этом теряется ясность кода):
dx + dy > 0 && dx*dy*(dx-dy) == 0
1
2 / 2 / 0
Регистрация: 07.11.2013
Сообщений: 71
05.03.2018, 10:37
Shamil1:
Скобок не хватает. Последнее условие проверяется, только когда dx != 0.
Да, осознал - всего две пары скобок и всё в порядке. Спасибо за решения, последнее так - вообще.
0
0 / 0 / 0
Регистрация: 06.12.2022
Сообщений: 1
06.12.2022, 02:40
C#
1
2
3
4
5
6
public static bool IsCorrectMove(string from, string to)
{
    var dx = Math.Abs(to[0] - from[0]); //смещение фигуры по горизонтали
    var dy = Math.Abs(to[1] - from[1]); //смещение фигуры по вертикали
    return (dx == dy | dx == 0 | dy == 0 && from != to);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2022, 02:40
Помогаю со студенческими работами здесь

Написать программу, которая определяет число Фибоначчи под номером N и проверяет, является ли это число возрастающим
Доброго времени! Есть задача: "Написать программу, которая определяет число Фибоначчи под номером N и проверяет, является ли это...

Написать программу, которая проверяет ход на выигрыш
Помогите исправить ошибку в программе, пожалуйста. Паскаль. Задача: Была создана лотерея по следующему принципу: при нажатии на...

Составить программу, которая по номеру года определяет: високосный это год или нет
Составить программу, которая по номеру года определяет: високосный это год или нет

Создать программу, которая определяет по порядковому номеру дня в году, какой это день недели (1-7)
Пусть в не високосном году 1 января - понедельник. Пусть k - порядковый номер с начала года (1<=k<=365).Создать программу,которая...

Написать программу, которая определяет количество инверсий
Задан одномерный массив из 100 целых чисел. Написать программу, которая определяет количество инверсий в этом массиве (количество пар...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru