4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
1

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

03.04.2015, 18:03. Показов 4235. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите решить задачку и написать программу на С++!
Шахматный конь.
Вася решил научиться играть в шахматы. Он нашел книгу с записями партий и внимательно их изучает. Может быть, когда-нибудь Вася станет великим шахматистом, но пока он еще учится в начальной школе, и ему нелегко дается шахматная нотация. Больше всего трудностей у Васи вызывают ходы шахматного коня. Он попросил вас написать программу, которая сможет сообщить Васе, на какие клетки можно пойти конем с заданной клетки.

Вы, наверное, тоже знаете, что конь в шахматах всегда перемещается либо на две клетки по горизонтали и на одну по вертикали, либо на одну по горизонтали и на две по вертикали. Вертикали обозначаются маленькими латинскими буквами от a до h, а горизонтали - цифрами от 1 до 8. Любая клетка на шахматной доске обозначается буквой соответствующей вертикали и цифрой соответствующей горизонтали, например, c6 или e2.


Пример:
1) Вводим: е2
Выводим: c1
c3
d4
f4
g1
g3

2) Вводим: а1
Выводим: b3
c2

Схема первого примера во вложении.
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2015, 18:03
Ответы с готовыми решениями:

Может ли шахматный конь за один ход попасть из одного поля в другое?
5.Заданы координаты двух полей на шахматной доске: px1 py1 и px2 py2. Гарантируется (т.е. не надо...

Может ли шахматный конь за один ход попасть из одного поля в другое?
Заданы координаты двух полей на шахматной доске: px1 py1 и px2 py2. Гарантируется (т.е. не надо...

Выясните, может шахматный конь за один ход попасть с ячейки с координатами (x1, y1) в ячейку с координатами (x2, y2)
4.Выясните, может шахматный конь за один ход попасть с ячейки с координатами (x1, y1) в ячейку с...

Шахматный конь за один ход может переместиться с одного заданного поля на другое(каждое поле задано двумя коо
Напишите понятным языком.:cry: Шахматный конь за один ход может переместиться с одного...

17
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 18:23  [ТС] 2
P.S. Другие похожие темы искала, ничего не нашла(
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.04.2015, 18:30 3
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
 
const int size = 8;
 
void tryMove(int rows, int cols)
{
    if ( rows >= 0 && rows < size && cols >= 0 && cols < size)
    {
        cout << (char)(rows + 'a') << cols + 1 << endl;
    }
}
int charToNumber(const char symbol)
{
    if (symbol >= 'a' && symbol <= 'z')
        return symbol - 'a';
    else
        return symbol - '1';
}
int main()
{
    cout << "Enter horse coord:" << endl;
    char* buffer = new char[3];
    cin >> buffer;
 
    int rows = charToNumber(buffer[0]);
    int cols = charToNumber(buffer[1]);
    cout << "Horse on : "<<rows << " " << cols << " " << endl;
    
    tryMove(rows -2, cols+1);
    tryMove(rows -2, cols-1);
    tryMove(rows +2, cols-1);
    tryMove(rows +2, cols+1);
 
    tryMove(rows -1, cols+2);
    tryMove(rows +1, cols+2);
    tryMove(rows +1, cols-2);
    tryMove(rows -1, cols-2);
    
    delete buffer;
}
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 18:48  [ТС] 4
rikimaru2013, спасибо, но Вы можете мне прокомментировать Ваши действия? Я не все функции знаю, которые Вы употребили в программе.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.04.2015, 18:51 5
потому что я их выдумал только что? и описал их поведение в строках 6 и 13. В коде нету ничего не понятного там сложили, там отняли, тут сравнили, там вывели на экран. Присмотритесь ... . Всё просто
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 19:13  [ТС] 6
rikimaru2013, а что значит это?

C++
1
2
3
4
5
6
7
8
9
10
11
tryMove(rows -2, cols+1);
    tryMove(rows -2, cols-1);
    tryMove(rows +2, cols-1);
    tryMove(rows +2, cols+1);
 
    tryMove(rows -1, cols+2);
    tryMove(rows +1, cols+2);
    tryMove(rows +1, cols-2);
    tryMove(rows -1, cols-2);
    
    delete buffer;
Мб,
C++
1
delete buffer;
очищение памяти?


Да, и можно чуть-чуть покороче?

Добавлено через 20 минут
Всё, про tryMove разобралась. Остался один вопрос. Что значит этот if:
C++
1
2
3
4
if (symbol >= 'a' && symbol <= 'z')
        return symbol - 'a';
    else
        return symbol - '1';
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.04.2015, 19:19 7
В ANCI таблице символ имеет своё числовое представление:
C++
1
2
a = 97
b = 98
Приходит в функцию буква 'e' это 101 вроде бы: итого
C++
1
2
3
4
5
6
7
8
if( 102 >= 97 && 102 <= 122)
{
   return 102 - 97;
}
else // пришла не буква - значит цифра
{
    return число_цифры - 49;
}
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
03.04.2015, 19:31 8
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Покороче.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <math.h>
#include <conio.h>
 
int main()
{
    char x;
    int a,b;
    std::cin>>x>>b;
    a=x-'a'+1;
    for (int i=1;i<=8;i++)
        for (int j=1;j<=8;j++)
            if ((abs(i-a)==1 && abs(j-b)==2) || (abs(i-a)==2 && abs(j-b)==1))
                std::cout<<char(i+'a'-1)<<j<<std::endl;
    getch();
}
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 21:06  [ТС] 9
Новичок, благодарю!


Но опять глупые вопросы...
Что это значит?
C++
1
a=x-'a'+1;
И это:
C++
1
cout<<char(i+'a'-1)<<j<<endl;
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
03.04.2015, 21:35 10
Лучший ответ Сообщение было отмечено Goffrua как решение

Решение

Goffrua, смотрите. Пользователь вводит координату буквой и число от 1 до 8.Так вот букву нужно как-бы в число перевести. Как это сделать?Вот так,
C++
1
a=x-'a'+1;
Попробуем вместо x подставить 'a' тогда получим a=1 что нам и нужно.Возьмем x='b',тогда 'b'-'a'+1=('a'+1)-'a'+1=2,b=2 а оно так и есть b - это второй столбец.
Цитата Сообщение от Goffrua Посмотреть сообщение
cout<<char(i+'a'-1)<<j<<endl;
Тоже самое только наоборот.
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 21:51  [ТС] 11
Новичок, то-есть, когда в этой "функции" стоит -1, то переводится из числа в букву, а если +1, то из буквы в число? Я правильно поняла? Если нет, то для чего это нужно?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
03.04.2015, 21:53 12
Цитата Сообщение от Goffrua Посмотреть сообщение
Новичок, то-есть, когда в этой "функции" стоит -1, то переводится из числа в букву, а если +1, то из буквы в число? Я правильно поняла?
Да,именно так.
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 21:58  [ТС] 13
Новичок, ещё вопрос. Что значит этот элемент строки?
C++
1
2
cout<<char(i+'a'-1)<<j<<endl;
char(i+'a'-1)
У меня вопрос: как можно выводить, объявляя char? Или это также перевод из char в int?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
03.04.2015, 22:00 14
Цитата Сообщение от Goffrua Посмотреть сообщение
i+'a'-1
Дело в том что если написать вот так без char() то выведет число. А char(i+'a'-1) - это явное преобразование типа в char.
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 22:01  [ТС] 15
Новичок, т.е., этим действием выводится буква, верно?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
03.04.2015, 22:19 16
Goffrua, да, буква. Хватит уже такие вопросы задавать.
1
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
03.04.2015, 22:21  [ТС] 17
Новичок, прошу прощения.
Спасибо, что всё мне объяснили! Без Вас бы я не справилась!
0
0 / 0 / 0
Регистрация: 19.01.2020
Сообщений: 11
05.02.2020, 20:19 18
а можно на паскале?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2020, 20:19
Помогаю со студенческими работами здесь

Определить поля в которые может попасть конь за n ходов из указанной позиции
помогите, пожалуйста!!! на шахматной доске определить поля в которые может попасть конь за n ходов...

На шахматной доске определить поля, в которые может попасть конь за n ходов из указанной позиции (рекурсия)
На шахматной доске определить поля, в которые может попасть конь за n ходов из указанной...

Определить может ли конь попасть с первой клетки на вторую одним ходом?
Добрый день. Задача: Шахматный конь ходит буквой “Г” — на две клетки по вертикали в любом...

Проверить, может ли шахматный король попасть из одного поля в другое
Помогите написать прогу для проверки может ли попасть король из 1 поле в другое.


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru