С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
39 / 2 / 0
Регистрация: 04.06.2012
Сообщений: 19

Король и ферзи

08.06.2012, 15:40. Показов 5761. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, пожалуйста помогите с задачкой. Очень нужно. Решите в Borland C++.
На шахматной доске находятся король и несколько ферзей другого цвета. Проверить находится ли король под угрозой и если да, кто ему угрожает. Положение фигур задано массивом К(8,8). 0-клетка пуста, 1-король, 2-ферзь. Ферзь бьет по горизонтали, вертикали и диагоналям.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2012, 15:40
Ответы с готовыми решениями:

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

Король шахматной доски
Король шахматной доски размером 8х8 находится на коне в одной из клеток своего королевства. Он очень озабочен тем, что некоторые клетки его...

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

12
S9
Волшебник
 Аватар для S9
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
08.06.2012, 16:39
Вообщем алгоритм такой:
1. Записываешь матрицу К (как это будет происходить (там, из файла читаться или ручками вводить или ещё как решать тебе.
2. Находишь координаты ферзей и короля. Это будут просто индексы, под которыми находятся 1 или 2 в массиве. У тебя должен быть массив координат ферзей и координаты короля.
3. Перебираешь массив координат ферзей и проверяешь, может ли ферзь выпилить короля, если может, то пишешь на вывод что то вроде "королю капут" и выходишь из цикла, иначе - ищем дальше.
Условие, которое должно выполняться, чтобы ферзь мог завалить короля выглядит так
(x1 == x2) || (y1 == y2) || (x1 - y1 == x2 - y2) || (x1 + y1 == x2 + y2)
Если также надо узнать, сколько ферзей могут выпилить короля, то можно поставить счетчик, и выход из цикла не делать

Вот как то так..

P.S. Код набросать пока не получится, т.к нету никакого С/C++ компилятора под рукой (может вечером набросаю, просто сейчас я не дома)
1
33 / 33 / 3
Регистрация: 24.05.2012
Сообщений: 156
08.06.2012, 16:43
Цитата Сообщение от S9 Посмотреть сообщение
т.к нету никакого С/C++ компилятора под рукой
да ладно, есть в винде компилятор.) в поставку с NET идет
0
 Аватар для Кот Ангенс
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
08.06.2012, 16:50
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vector>
 
std::vector< std::pair<char, char> > KingAndQueens(const char field[8][8]) {
    typedef std::pair<char, char> pos;
 
    std::vector<pos> q, result;
    pos k;
    char i = 0;
    for (char j; i < 8; i++)
        for (j = 0; j < 8; j++)
            if (field[i][j] == 1)
                k = pos(i, j);
            else if (field[i][j])
                q.push_back(pos(i, j));
    for (i = 0; i < q.size(); i++)
        if (q[i].first != k.first && q[i].second != k.second && /*
        */ q[i].first - k.first != q[i].second - k.second && /*
        */ q[i].first - k.first != k.second - q[i].second)
            result.push_back(q[i]);
    return result;
}
2
S9
Волшебник
 Аватар для S9
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
08.06.2012, 16:50
Цитата Сообщение от qfisher Посмотреть сообщение
да ладно, есть в винде компилятор.) в поставку с NET идет
А с чего вы решили, что у меня винда?
0
39 / 2 / 0
Регистрация: 04.06.2012
Сообщений: 19
08.06.2012, 16:59  [ТС]
спасибо большое)

Добавлено через 3 минуты
S9 если будет возможность, набросай вечерком, буду очень благодарна))
0
S9
Волшебник
 Аватар для S9
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
08.06.2012, 17:04
Цитата Сообщение от lenalena Посмотреть сообщение
S9 если будет возможность, набросай вечерком, буду очень благодарна))
Если будет время - набросаю. Просто экзамен завтра у меня в 9 утра((
0
39 / 2 / 0
Регистрация: 04.06.2012
Сообщений: 19
08.06.2012, 17:13  [ТС]
Удачи на экзамене)) мне просто к след. пятнице нужно сдать 5 задач. одну уже сдала. над второй думаю. вот еще 3 нужно, а я не понимаю как делать. Если сдам 5 задач, то экзамен автоматом поставят))
0
S9
Волшебник
 Аватар для S9
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
08.06.2012, 17:17
Завтра после экзамена (это часов в 11-12) смогу тебе помочь. Напиши в личку или ещё куда нибудь
0
39 / 2 / 0
Регистрация: 04.06.2012
Сообщений: 19
09.06.2012, 15:04  [ТС]
Хорошо)) спасибо))

Добавлено через 21 час 27 минут
S9, Привет, помоги пожалуйста с задачкой)) Король и ферзи

Добавлено через 18 минут
ой, хотела в личку отправить, а получилось сюда)
0
S9
Волшебник
 Аватар для S9
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
10.06.2012, 14:00
lenalena, извини, что так долго. Просто после экзамена отрубился и почти сутки проспал(((

вот код
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
/** На шахматной доске находятся король и несколько ферзей другого цвета. 
Проверить находится ли король под угрозой и если да, кто ему угрожает. 
Положение фигур задано массивом К(8,8). 0-клетка пуста, 1-король, 2-ферзь. 
Ферзь бьет по горизонтали, вертикали и диагоналям. */
 
#include <iostream>
#include <fstream>
#include <vector>
 
#define IN_DATA_FILE_NAME "in.txt"
#define SIZE_M 8
#define SIZE_N 8
 
int main(int argc, char ** argv)
{
  int king_i, king_j; /** это координаты короля */
  std::vector< std::pair<int, int> > queen; /** создаем вектор из пар, для хранения координат ферзей */
  bool killKing = false; /** есть короля можно выпилить, то TRUE, если нельзя - то FALSE */
  
  int **K = new int * [SIZE_M]; /** этот массив - есть поле, где стоят фигуры */
  for(int i = 0; i < SIZE_N; i++) /** выделяем память под массив */
    K[i] = new int[SIZE_N];
  
  std::ifstream in(IN_DATA_FILE_NAME);
  
  for(int i = 0; i < SIZE_M; i++, std::cout << std::endl) /** Записываем массив из файла */
    for(int j = 0; j < SIZE_N; j++)
    {
      in >> K[i][j];
      std::cout << K[i][j] << " ";
      switch (K[i][j])
      {
        case 1 : { king_i = i; king_j = j; }; break; /** записываем координаты короля */
        case 2 : { queen.push_back(std::pair<int, int>(i, j)); }; break; /** записываем координаты ферзя в queen */
      }
    }  
  in.close(); /** т.к. файл больше нам не нужен, то закрываем его */
  
  /** для наглядности выводим координаты короля и ферзей */
  std::cout << "King -> " << king_i << " : " << king_j << "\n";
  for(int i = 0; i < queen.size(); i++)
    std::cout << "Queen " << i + 1 << " -> " << queen[i].first << " : " << queen[i].second << "\n";
    
  for(int i = 0; i < queen.size(); i++) /** теперь перебираем массив ферзей и проверям на то, может ли ферзь кокнуть короля */
  if ((king_i == queen[i].first) ||   /** это условие, может ли ферзь минусануть короля */
      (king_j == queen[i].second) || 
      (king_i - king_j == queen[i].first - queen[i].second) || 
      (king_i + king_j == queen[i].first + queen[i].second)) 
  {
    killKing = true; /** если короля можно завалить, то ставим флаг в true */
    break;          /** и выходим из цикла, т.к. это достаточно что один ферзь может убить короля. */
  }
  
  if (killKing)
    std::cout << "Король трупэ!" << std::endl;
  else
    std::cout << "Король будет жить!" << std::endl;
  
  for(int i = 0; i < SIZE_N; i++) /** освбождаем память, выделенную по массив */
    delete [] K[i];
  delete [] K;
  
  return 0;
}
Пример работы на скриншоте
Под Windows компилируется аналогично, только запуск приложение будет не ./a.out а просто а или a.exe

P.S. Только незнаю, почему Вам не воспользоваться кодом Кот Ангенс...
Миниатюры
Король и ферзи  
Вложения
Тип файла: zip S9.zip (7.3 Кб, 10 просмотров)
1
39 / 2 / 0
Регистрация: 04.06.2012
Сообщений: 19
12.06.2012, 01:16  [ТС]
Спасибо большое))
1
0 / 0 / 0
Регистрация: 16.10.2017
Сообщений: 1
24.06.2013, 19:28
@lenalena, есть решение этой задачи?
тоже самое надо срочно

Добавлено через 2 минуты
виноват, не заметил второй страницы темы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2013, 19:28
Помогаю со студенческими работами здесь

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

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

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом
Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите,...

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом (шахматы)
Доброго времени суток. Начал интересоваться C++ и прохожу онлайн курс. Застопорился на условных операторах вот с такой задачей: ...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru