Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
58 / 40 / 41
Регистрация: 26.09.2013
Сообщений: 341
Записей в блоге: 1
1

Проверить, не находится ли король под боем

28.10.2014, 04:20. Показов 1585. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть такая задача. На шахматной доске стоят три белые ладьи (ладья бьет по горизонтали и вертикали) и черный король. Проверить, не находится ли король под боем, а если есть угроза, то от какой именно ладьи.
Вот решение:
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
#include <stdio.h>
 
int main()
{
    int x, y, x1, y1, x2, y2, x3, y3;
    printf("Введите координаты короля: \n");
    scanf("%d", &x);
    scanf("%d", &y);//ввод координат короля
    printf("Введите координаты первой ладьи: \n");
    scanf("%d", &x1);
    scanf("%d", &y1);//ввод координат 1 ладьи
    printf("Введите координаты второй ладьи: \n");
    scanf("%d", &x2);
    scanf("%d", &y2);//ввод координат 2 ладьи
    printf("Введите координаты третьей ладьи: \n");
    scanf("%d", &x3);
    scanf("%d", &y3);//ввод координат 3 ладьи
    if (((x != x1) || (y != y1)) && ((x != x2) || (y != y2)) && ((x != x3) || (y != y3)) && ((x1 != x2) || (y1 != y2)) && ((x1 != x3) || (y1 != y3)) && ((x2 != x3) || (y2 != y3)))
    {
        if ((x == x1) || (y == y1))
        {
            printf(" x = %d; y = %d \n x1 = %d;  y1 = %d \n Угроза от первой ладьи", x, y, x1, y1);
        }
        else
        {
            if ((x == x2) || (y == y2))
            {
                printf(" x = %d; y = %d \n x2 = %d;  y2 = %d \n Угроза от второй ладьи\n", x, y, x2, y2);
            }
            else
            {
                if ((x == x3) || (y == y3))
                {
                    printf(" x = %d ; y = %d \n x3 = %d ;  y3 = %d \n Угроза от третьей ладьи\n", x, y, x3, y3);
                }
                else
                {
                    printf(" x = %d ; y = %d \n x1 = %d ;  y1 = %d \n x2 = %d ;  y2 = %d \n x3 = %d ;  y3 = %d \n Угрозы нет", x, y, x1, y1, x2, y2, x3, y3);
                }
            }
 
        }
    }
    else
    {
        printf("Ошибка*");
    }
    getchar();
    getchar();
    return 0;
}
Преподаватель сделал замечания к программе: Вы не учитываете, что ладьи могут "мешать" друг другу. На факт угрозы это не повлияет, но она будет исходить от другой ладьи. Вы не учитываете, что угрожать может не только одна ладья, а несколько. Помогите исправить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2014, 04:20
Ответы с готовыми решениями:

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

Определить, находится ли черная шашка под боем белой
Помогите организовать задачу в Delphi. Белая шашка расположена на поле (х, n). Черная шашка...

Сколько клеток находится под боем шахматного коня
есть задача. http://acm.timus.ru/problem.aspx?space=1&amp;num=1197 написал решение: #include...

Определить, находится ли черная шашка под боем белой дамки
Белая дамка расположена на поле (х, n). Черная шашка находится на поле (y, m). Находится черная...

1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
28.10.2014, 09:38 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
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
typedef struct {
    int x, y;
}   Coord;
 
//-----------------------------------------------------------------------------
bool CheckCoord(Coord a, const Coord* b, size_t size) {
    int i, j;
    for (i = 0; i < size; ++i) {
        if ((a.x == b[i].x) && (a.y == b[i].y)) {
            return false;
        }
    }
    for (i = 0; i < size - 1; ++i) {
        for (j = i + 1; j < size; ++j) {
            if ((b[i].x == b[j].x) && (b[i].y == b[j].y)) {
                return false;
            }
        }
    }
    return true;
}
//-----------------------------------------------------------------------------
int GetLength(const Coord a, const Coord b, int idx) {
    return (idx % 2) ? (a.x - b.x) : (a.y - b.y);
}
//-----------------------------------------------------------------------------
void Check(Coord king, const Coord* castle, size_t size) {
    const Coord* danger[4] = { NULL };
    int i, idx, len;
    for (i = 0; i < size; ++i) {
        idx = -1;
        if (king.x == castle[i].x) {
            len = king.y - castle[i].y;
            idx = (len < 0) ? 0 : 2;
        }
        else if (king.y == castle[i].y) {
            len = king.x - castle[i].x;
            idx = (len < 0) ? 1 : 3;
        }
        if (idx != -1) {
            if ((danger[idx] == NULL) || (abs(len) < abs(GetLength(king, *danger[idx], idx)))) {
                danger[idx] = &castle[i];
            }
        }
    }
 
    for (i = 0; i < 4; ++i) {
        if (danger[i]) {
            printf(" x  = %d; y  = %d\n x1 = %d; y1 = %d\n Угроза от ладьи №%d\n",
                   king.x, king.y, danger[i]->x, danger[i]->y, (danger[i] - castle) + 1);
        }
    }
}
//-----------------------------------------------------------------------------
 
#define N 3
 
int main() {
    Coord king, castle[N];
    int i;
 
    printf("Введите координаты короля: ");
    scanf("%d %d", &king.x, &king.y);
 
    for (i = 0; i < N; ++i) {
        printf("Введите координаты ладьи №%d: ", i + 1);
        scanf("%d %d", &castle[i].x, &castle[i].y);
    }
 
    if (CheckCoord(king, castle, N)) {
        Check(king, castle, N);
    }
    else {
        printf("Ошибка воода данных\n");
    }
 
    system("pause");
 
    return 0;
}
1
28.10.2014, 09:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2014, 09:38
Помогаю со студенческими работами здесь

Определить, сколько клеток находится под боем шахматного коня
Прошу прощения за тему, теперь не могу исправить. ...

Определить, находится ли черная шашка под боем белой дамки
Белая дамка расположена на поле (х, n).Черная шашка расположена на поле (y, m). Находится черная...

Итератор для Ферзя - Клетка, на которой стоит ферзь под боем не находится
Объявить в форме статического метода итератор Queen, который получает местоположение ферзя на...

По заданным координатам слона и пешки определить, находится ли пешка под боем слона
По заданным координатам слона и пешки определить, находится ли пешка под боем слона. Входные...


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

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