С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 36
1

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

09.11.2018, 22:53. Показов 1233. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, всё никак не могу решить задание на с++, желательно в виде 2д на консоли.
Само задание: Задана шахматная доска, содержащая черного короля,черных пешек и белого ферзя. Определить какими пешками можно совершить ход, чтобы черный король не был под ударом ферзя.

Вот что успел набросать, пока просто поле с расстановкой фигур, со своими недочётами конечно.

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include "pch.h"
#include <iostream>
#include <string>
#include <Windows.h>
#include <ctime>
 
using namespace std;
 
const int n = 8;
int arr[n];
int  ferzeY, y, y2, y3, y4, y5, y6, y7, y8, KingY, ferzeX, x, x2, x3, x4, x5, x6, x7, x8, KingX;
void Draw();
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(NULL));
 
    string ask;
    cout << "Вы хотите сами ввести координаты?" << endl;
    cin >> ask;
    if (ask == "Да" || ask == "да") {
        cout << "Введите координаты ферзя в порядке строка, столбец:" << endl;
        cin >> ferzeX >> ferzeY;
        cout << "Введите координаты 1-й пешки в порядке строка, столбец:" << endl;
        cin >> x >> y;
        cout << "Введите координаты 2-й пешки в порядке строка, столбец:" << endl;
        cin >> x2 >> y2;
        cout << "Введите координаты 3-й пешки в порядке строка, столбец:" << endl;
        cin >> x3 >> y3;
        cout << "Введите координаты 4-й пешки в порядке строка, столбец:" << endl;
        cin >> x4 >> y4;
        cout << "Введите координаты 5-й пешки в порядке строка, столбец:" << endl;
        cin >> x5 >> y5;
        cout << "Введите координаты 6-й пешки в порядке строка, столбец:" << endl;
        cin >> x6 >> y6;
        cout << "Введите координаты 7-й пешки в порядке строка, столбец:" << endl;
        cin >> x7 >> y7;
        cout << "Введите координаты 8-й пешки в порядке строка, столбец:" << endl;
        cin >> x8 >> y8;
        cout << "Введите координаты Короля в порядке строка, столбец:" << endl;
        cin >> KingX >> KingY;
        Draw();
    }
    else {
        x = rand() % 8 + 2;
        y = rand() % 7 + 2;
        x2 = rand() % 8 + 2;
        y2 = rand() % 7 + 2;
        if (x2 == x && y2 == y) {
            do {
                x2 = rand() % 8 + 2;
                y2 = rand() % 7 + 2;
            } while (x2 == x && y2 == y);
        }
        x3 = rand() % 8 + 2;
        y3 = rand() % 7 + 2;
        if (x3 == x && y3 == y || x3 == x2 && y3 == y2) {
            do {
                x3 = rand() % 8 + 2;
                y3 = rand() % 7 + 2;
            } while (x3 == x && y3 == y || x3 == x2 && y3 == y2);
        }
        x4 = rand() % 8 + 2;
        y4 = rand() % 7 + 2;
        if (x4 == x && y4 == y || x4 == x2 && y4 == y2 && x4 == x3 && y4 == y4) {
            do {
                x4 = rand() % 8 + 2;
                y4 = rand() % 7 + 2;
            } while (x4 == x && y4 == y || x4 == x2 && y4 == y2 && x4 == x3 && y4 == y4);
        }
        x5 = rand() % 8 + 2;
        y5 = rand() % 7 + 2;
        if (x5 == x && y5 == y || x5 == x2 && y5 == y2 && x5 == x3 && y5 == y4 || x5 == x4 && y5 == y4) {
            do {
                x5 = rand() % 8 + 2;
                y5 = rand() % 7 + 2;
            } while (x5 == x && y5 == y || x5 == x2 && y5 == y2 && x5 == x3 && y5 == y4 || x5 == x4 && y5 == y4);
        }
        x6 = rand() % 8 + 2;
        y6 = rand() % 7 + 2;
        if (x6 == x && y6 == y || x6 == x2 && y6 == y2 && x6 == x3 && y6 == y4 || x6 == x4 && y6 == y4 || x6 == x5 && y6 == y5) {
            do {
                x6 = rand() % 8 + 2;
                y6 = rand() % 7 + 2;
            } while (x6 == x && y6 == y || x6 == x2 && y6 == y2 && x6 == x3 && y6 == y4 || x6 == x4 && y6 == y4 || x6 == x5 && y6 == y5);
        }
        x7 = rand() % 8 + 2;
        y7 = rand() % 7 + 2;
        if (x7 == x && y7 == y || x7 == x2 && y7 == y2 && x7 == x3 && y7 == y4 || x7 == x4 && y7 == y4 || x7 == x5 && y7 == y5 || x7 == x6 && y7 == y6) {
            do {
                x7 = rand() % 8 + 2;
                y7 = rand() % 7 + 2;
            } while (x7 == x && y7 == y || x7 == x2 && y7 == y2 && x7 == x3 && y7 == y4 || x7 == x4 && y7 == y4 || x7 == x5 && y7 == y5 || x7 == x6 && y7 == y6);
        }
        x8 = rand() % 8 + 2;
        y8 = rand() % 7 + 2;
        if (x8 == x && y8 == y || x8 == x2 && y8 == y2 && x8 == x3 && y8 == y4 || x8 == x4 && y8 == y4 || x8 == x5 && y8 == y5 || x8 == x6 && y8 == y6 || x8 == x7 && y8 == y7) {
            do {
                x8 = rand() % 8 + 2;
                y8 = rand() % 7 + 2;
            } while (x8 == x && y8 == y || x8 == x2 && y8 == y2 && x8 == x3 && y8 == y4 || x8 == x4 && y8 == y4 || x8 == x5 && y8 == y5 || x8 == x6 && y8 == y6 || x8 == x7 && y8 == y7);
        }
        KingX = rand() % 8 + 1;
        KingY = rand() % 8 + 1;
        if (KingX == x && KingY == y || KingX == x2 && KingY == y2 && KingX == x3 && KingY == y4 || KingX == x4 && KingY == y4 || KingX == x5 && KingY == y5 || KingX == x6 && KingY == y6 || KingX == x7 && KingY == y7 || KingX == x8 && KingY == y8) {
            do {
                KingX = rand() % 8 + 1;
                KingY = rand() % 8 + 1;
            } while (KingX == x && KingY == y || KingX == x2 && KingY == y2 && KingX == x3 && KingY == y4 || KingX == x4 && KingY == y4 || KingX == x5 && KingY == y5 || KingX == x6 && KingY == y6 || KingX == x7 && KingY == y7 || KingX == x8 && KingY == y8);
        }
        ferzeX = rand() % 8 + 1;
        ferzeY = rand() % 8 + 1;
        if (ferzeX == x && ferzeY == y || ferzeX == x2 && ferzeY == y2 && ferzeX == x3 && ferzeY == y4 || ferzeX == x4 && ferzeY == y4 || ferzeX == x5 && ferzeY == y5 || ferzeX == x6 && ferzeY == y6 || ferzeX == x7 && ferzeY == y7 || ferzeX == KingX && ferzeY == KingY || ferzeX == x8 && ferzeY == y8) {
            do {
                ferzeX = rand() % 8 + 1;
                ferzeY = rand() % 8 + 1;
            } while (ferzeX == x && ferzeY == y || ferzeX == x2 && ferzeY == y2 && ferzeX == x3 && ferzeY == y4 || ferzeX == x4 && ferzeY == y4 || ferzeX == x5 && ferzeY == y5 || ferzeX == x6 && ferzeY == y6 || ferzeX == x7 && ferzeY == y7 || ferzeX == KingX && ferzeY == KingY || ferzeX == x8 && ferzeY == y8);
        }
        Draw();
    }
 
    return 0;
}
 
void Draw() {
    cout << " ";
    for (char i = 'A'; i <= 'H'; i++)
    {
        cout << i;
    }
    cout << endl;
 
    for (int i = n; i >= 1; i--)
    {
        for (int j = 0; j <= n+1; j++)
        {
            if (j == 0 || j == n) 
                cout << i;
            if (ferzeX == i && ferzeY == j && ferzeX==i && ferzeY == j)
                cout << "F";
            else if (x == i && y == j)
                cout << "1";
            else if (x2 == i && y2 == j)
                cout << "2";
            else if (x3 == i && y3 == j)
                cout << "3";
            else if (x4 == i && y4 == j)
                cout << "4";
            else if (x5 == i && y5 == j)
                cout << "5";
            else if (x6 == i && y6 == j)
                cout << "6";
            else if (x7 == i && y7 == j)
                cout << "7";
            else if (x8 == i && y8 == j)
                cout << "8";
            else if (KingX == i && KingY == j)
                cout << "K";
            else
            cout << " ";
        }
        cout << endl;
    }
    cout << " ";
    for (char i = 'A'; i <= 'H'; i++)
    {
        cout << i;
    }
    cout << endl;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2018, 22:53
Ответы с готовыми решениями:

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

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

Составить блок-схему алгоритма поиска всех клеток, находящихся под ударом ферзя
Составить блок-схему алгоритма следующей задачи: Даны координаты ферзя, который находится на...

Проверить, перед пешками король или за ними
Дан файл file1 с текстом: nnnnnnnn nnnnnnnn WWWWWWWW nnnnnnnn nnnnKnnn nnnnnnnn nnnnnnnn...

1
720 / 680 / 110
Регистрация: 29.05.2015
Сообщений: 4,099
10.11.2018, 07:17 2
Лучший ответ Сообщение было отмечено Megabuzz как решение

Решение

1. Нужно поле, массив напр. int pole[8][8]
2. Придумать, какими цифрами что обозначать на поле, напр. 0 - белая клетка, 1 - черная клетка, 2 - пешка, 5 - ферзь, 9 - король
3. Клетки, которые бъются ферзём, допустим добавлять 10, т.е. это будут клетки 10 и 11
4. Написать функцию, которая в текущей позиции вычисляет клетки, бъющиеся ферзём (т.е. прибавляет к ним 10)
и проверяет, не под боем ли король
5. Написать функцию рисования всего этого добра на экран

Ну и далее сам процесс:
1. Расставляем фигуры на доску
2. Рисуем на экране
3. Проверяем короля, если сразу бъётся, то ответ - никакой пешкой нельзя совершить такой ход
4. По очереди делаем ход каждой пешкой и проверяем короля - ну тут всё понятно, какой-то одной пешкой нельзя.
5. Если все пешки походили, а король не под боем - то всеми пешками можно.

Где-то так.

Добавлено через 9 минут
Судя по тому, что вы написали выше, о массивах вы понятия не имеете, и задача эта будет для вас сложной.
1
10.11.2018, 07:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2018, 07:17
Помогаю со студенческими работами здесь

Определить может ли король добраться из клетки x1 y1 в клетку x2 y2 за 1 ход
2 задача.Требуется вывести 1 если король сможет добраться из клетки x1 y1 в клетку x2 y2 за 1 ход...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru