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

Определить поля(отметить символом +), на которые может пойти первая фигура, не попав под удар второй фигуры

24.04.2017, 18:00. Показов 1324. Ответов 3
Метки нет (Все метки)

Шахматную доску будем представлять в виде квадратного символьного массива размерность 8 на 8. Дано натуральные числа v1 и g1, которые указывают номера вертикали ( при счете слева направо) и горизонтали ( при счете снизу вверх) для поля, на котором стоит белая шахматная фигура, и числа v2 и g2 - которые указывают соответствующие координаты другой черной фигуры. Определить поля(отметить символом +), на которые может пойти первая фигура, не попав под удар второй фигуры. Рассмотреть вариант сочетания фигур: тура и ферзь
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2017, 18:00
Ответы с готовыми решениями:

Может ли белая фигура пойти на поле (e,f), не попав при этом под удар черной фигуры
Дураку уж помогите(((( 1. Поле шахматной доски определяется парой натуральных чисел, каждое из...

Определить, может ли белая фигура пойти на поле, не попав при этом под удар черной фигуры
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми:...

Определить, может ли белая фигура пойти на поле (e,f), не попав при этом под удар черной фигуры
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми:...

Определить, может ли белая фигура пойти на поле (e, f), не попав при этом под удар черной фигуры
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми:...

3
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
24.04.2017, 18:07 2
Цитата Сообщение от vebster12 Посмотреть сообщение
которые указывают номера вертикали ( при счете слева направо)
По-моему вертикаль это когда сверху вниз. С горизонталью тоже самое. А проще говорить строка и столбец
0
78 / 40 / 24
Регистрация: 03.02.2017
Сообщений: 106
25.04.2017, 07:55 3
Лучший ответ Сообщение было отмечено vebster12 как решение

Решение

Цитата Сообщение от no swear Посмотреть сообщение
По-моему вертикаль это когда сверху вниз. С горизонталью тоже самое.
В шахматах столбцы называются вертикалями и нумеруются слева направо по оси х.
Строки называются горизонталями и нумеруются снизу вверх по оси у.
Это если смотреть со стороны белых фигур. У ТС всё правильно написано.

Добавлено через 13 часов 5 минут
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <ctime> // time()
#include <cmath> // abs() - по модулю
 
int main()
{
    srand(static_cast<int>(time(NULL)));
    const char ROOK = 'R'; // белая ладья (тура)
    const char QUEEN = 'Q'; // чёрный ферзь
    const size_t SIZE = 8; // размер доски
    char bord[SIZE][SIZE]; // шахматная доска
    int v1, g1; // координаты белой ладьи
    int v2, g2; // координаты чёрного ферзя
 
    for (unsigned i = 0; i < SIZE; i++) // инициализация доски
        for (unsigned j = 0; j < SIZE; j++)
            bord[i][j] = '.'; // точки для визуализации клеток доски
 
    v1 = rand() % SIZE; // случайная позиция ладьи
    g1 = rand() % SIZE;
 
    do {
        v2 = rand() % SIZE; // случайная позиция ферзя
        g2 = rand() % SIZE;
    } while (v1 == v2 && g1 == g2); // позиции не должны совпасть
 
    // помещаем фигуры на доску
    bord[g1][v1] = ROOK; // белая ладья
    bord[g2][v2] = QUEEN; // чёрный ферзь
 
    if (g1 != g2) { // если фигуры на разных горизонталях
        for (int i = g1, j = 0; j < SIZE; j++) {  // возможные ходы по горизонтали
    // если(клетка не занята ладьёй && клетка не занята ферзём && не ход под удар ферзя по вертикали && не ход под удар ферзя по диагонали)
            if ((bord[i][j] != ROOK) && (bord[i][j] != QUEEN) && (j != v2) && (abs(v2 - j) != abs(g2 - i)))
                bord[i][j] = '+';
        }
    }
    if (v1 != v2) { // если фигуры на разных вертикалях
        for (int i = 0, j = v1; i < SIZE; i++) { // возможные ходы по вертикали
    // если(клетка не занята ладьёй && клетка не занята ферзём && не ход под удар ферзя по горизонтали && не ход под удар ферзя по диагонали)
            if ((bord[i][j] != ROOK) && (bord[i][j] != QUEEN) && (i != g2) && (abs(v2 - j) != abs(g2 - i)))
                bord[i][j] = '+';
        }
    }
 
    for (int i = 0; i < SIZE; i++) // выводим результат на экран
    {
        for (unsigned j = 0; j < SIZE; j++)
            std::cout << bord[i][j];
        std::cout << '\n';
    }
    std::cout << '\n';
 
    system("pause");
}
Добавлено через 23 минуты
&& клетка не занята ферзём
&& (bord[i][j] != QUEEN)

Излишество, ведь проверка что фигуры на разных вертикалях \ горизонталях уже выполнена.
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 935
27.04.2017, 19:48 4
Тоже как вариант
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
 
int main()
{
    srand( time( 0 ) );
    const int size = 8;
    int R_i, R_j, Q_i, Q_j;
    char **Chess_board = new char* [size];
 
    for(int i=0;i<size;++i)
        Chess_board[i] = new char [size];
 
    R_i = rand() % 8; Q_i = rand() % 8;
    R_j = rand() % 8; Q_j = rand() % 8;
 
    while(R_i == Q_i && R_j == Q_j)
        Q_i = rand() % 8, Q_j = rand() % 8;
 
    for(int i=0;i<size;++i)
        for(int j=0;j<size;++j)
            Chess_board[i][j] = '-';
 
 
 
 
    for(int i=0;i<size;++i)
        Chess_board[Q_i][i] = '1';
 
    for(int i=0;i<size;++i)
        Chess_board[i][Q_j] = '1';
 
 
 
 
    for(int i=1; (Q_i + i < size && Q_j + i < size); ++i)
        Chess_board[Q_i + i][Q_j + i] = '1';
 
    for(int i=1; (Q_i - i >= 0 && Q_j - i >= 0); ++i)
        Chess_board[Q_i - i][Q_j - i] = '1';
 
    for(int i=1; (Q_i + i < size && Q_j - i >= 0); ++i)
        Chess_board[Q_i + i][Q_j - i] = '1';
 
    for(int i=1; (Q_i - i >= 0 && Q_j + i < size); ++i)
        Chess_board[Q_i - i][Q_j + i] = '1';
 
 
 
    for(int i=0;i<size;++i)
        if(Chess_board[R_i][i] != '1')
            Chess_board[R_i][i] = '+';
 
    for(int i=0;i<size;++i)
        if(Chess_board[i][R_j] != '1')
            Chess_board[i][R_j] = '+';
 
 
    for(int i=0;i<size;++i)
        for(int j=0;j<size;++j)
            if(Chess_board[i][j] != '+')
                Chess_board[i][j] = '-';
 
 
 
    Chess_board[Q_i][Q_j] = 'Q';
    Chess_board[R_i][R_j] = 'R';
 
    for(int i=0;i<size;++i)
    {
        for(int j=0;j<size;++j)
            cout << setw(2) << Chess_board[i][j];
        cout << endl;
    }
 
    cout << endl;
    cout << Q_i << " " << Q_j;
 
    for(int i=0;i<size;++i)
        delete [] Chess_board [i];
 
    delete [] Chess_board;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2017, 19:48
Помогаю со студенческими работами здесь

Шахматы: может ли белая фигура пойти на поле ef, не попав при этом под удар черной фигуры?
Поле шахматной доски определяется парой чисел, каждое из которых не превосходит 8: 1е число - номер...

Определить, может ли белая ладья пойти на заданное поле, не попав при этом под удар чёрной ладьи
Даны натуральные числа a,b,c,d,e,f каждое из которых не превосходит восьми.На поле(a,b) шахматной...

Сможет ли белая фигура перейти на ячейку, не попав под удар черной фигуры
Даны координаты трех ячеек шахматной доски. На клетке (x1, y1) расположена белая фигура, на ячейке...

На доске стоят два ферзя. Указать поля, на которые может пойти белый ферзь, чтобы не попасть под удар черного
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!! :wall: Поле шахматной доски задается парой натуральных чисел: первое...


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

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

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