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

Определить поля, на которые может пройти белый конь

25.12.2010, 18:40. Показов 2996. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даны натуральные числа a,b,c,d, каждое из которых не превосходит восьми. Определить поля(отметить их символом +), на кот-е может пройти белый конь, расположенный на поле(a,b), не попав при этом под удар черного ферзя, находящегося на поле(c,d)
Как реализовать ход коня в символьном массиве.???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2010, 18:40
Ответы с готовыми решениями:

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

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

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

Вывести все возможные поля, на которые может попасть шахматный конь за один прыжок из данной клетки
Здравствуйте! Помогите решить задачку и написать программу на С++! Шахматный конь. Вася решил...

6
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
25.12.2010, 19:59 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
//------------------------------------------------------------------------------- 
//Функция вывода матрици на экран. 
//------------------------------------------------------------------------------- 
void print(char**a){ 
      for (int i=0; i<g; i++) 
      { 
          for (int j=0; j<g; j++) 
          cout<<a[i][j]<<" "; 
          cout<<"\n";}; 
} 
 
//------------------------------------------------------------------------------- 
//Функция создания символьного массива и забития его точками. 
//------------------------------------------------------------------------------- 
char** enter(){ 
       char **a=new char*[g]; 
       for (int i=0; i<g;i++) 
       { 
           a[i]=new char [g]; 
           }; 
 
for (int i=0; i<8; i++){ 
          for (int j=0; j<8; j++) 
              a[i][j]='.'; 
        }; 
return a; 
} 
//------------------------------------------------------------------------------- 
//Создадим функцию для координат чёрного ферзя и его перемещений. 
//------------------------------------------------------------------------------- 
void C_Ferz (char**mass, int a, int b){ 
    a=a-1; 
    b=8-b; 
 
    for (int i=0;i<g;i++) 
        for (int j=0;j<g;j++){ 
            //Здесь применяем свойство диаганалей. 
            if ((i==a)||(j==b)) mass[i][j]='+'; 
            if ((i+j==a+b)) mass[i][j]='+'; 
            if ((i-j==a-b)) mass[i][j]='+'; 
        }; 
}
А вот как сделать коня Хз...
1
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
25.12.2010, 20:34 3
только для первого хода коня
для следующих надо?
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
#include <iostream>
using namespace std;
//ходы коня
const int dx[] = {-2, -2, 2, 2, -1, 1, -1, 1};
const int dy[] = {-1, 1, -1, 1, 2, -2, -2, 2};
 
int main()
{
   int zapol = 46; //заполнитель доски
   char doska[8][8];
   for (int i = 0; i < 8; i++)
      for (int j = 0; j < 8; j++)
            doska[i][j] = zapol;
 
   int a, b, c, d;
   cout << "Введите координаты коня на доске, а потом координаты ферзя:\n";
   cin >> a >> b >> c >> d;
   
//ставим на поле ферзь и помечаем те поля, которые под ее ударом
////////////////////////////////////////////////////////////////////////////////
   doska[c-1][d-1] = 'Ф';
   
   for (int s = 0; s < 8; s++)
      if (doska[s][d-1] != 'Ф') doska[s][d-1] = '-';
   
   for (int s = 0; s < 8; s++)
      if (doska[c-1][s] != 'Ф') doska[c-1][s] = '-';
 
   for (int i = c-1, j = d-1; i < 8 && j <8; i++, j++)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
      
   for (int i = c-1, j = d-1; i >= 0 && j >= 0; i--, j--)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
   
   for (int i = c-1, j = d-1; i >= 0 && j < 8; i--, j++)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
   
   for (int i = c-1, j = d-1; i < 8 && j >= 0; i++, j--)
      if (doska[i][j] != 'Ф') doska[i][j] = '-';
////////////////////////////////////////////////////////////////////////////////
//Перебираем поля, на которые может пойти конь
   for (int i = 0; i < 8; i++)
   {
      int x = a-1 + dx[i];
      int y = b-1 + dy[i];
      if (x >= 0 && x < 8 && y >= 0 && y < 8)
            if (doska[x][y] != '-') doska[x][y] = '+';
   }
////////////////////////////////////////////////////////////////////////////////
//Убираем с поля дополнительные "минусы"
   for (int i = 0; i < 8; i++)
   {
      for (int j = 0; j < 8; j++)
            if (doska[i][j] == '-') doska[i][j] = zapol;
   }
////////////////////////////////////////////////////////////////////////////////
//Выводим результат
   doska[a-1][b-1] = 'K';
   for (int i = 0; i < 8; i++)
   {
      for (int j = 0; j < 8; j++)
            cout << doska[i][j];
      cout << endl;
   }
   return 0;
}
клетки доски не чередуются, но могу сделать
1
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
25.12.2010, 20:39 4
Алгоритм таков:
"ставив" на поле ферзя и отмечаем клетки, которые находятся под ударомНазвание: 001.jpg
Просмотров: 119

Размер: 9.7 Кб
перебираем все возможные ходы коня и если на клетке нет минуса, то ставим плюс Название: 002.jpg
Просмотров: 119

Размер: 9.5 Кб
убираем "промежуточные минусы" и выводим доску
Определить поля, на которые может пройти белый конь

"заполнитель" доски - точки. чтобы как на рисунку -
C++
1
zapol = 4
1
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
25.12.2010, 20:41 5
это не столь важно, но доску надо "разворачивать"?
1
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
25.12.2010, 22:04 6
Mayonez,
Но ведь конь ходит по Г образной траектории.
Вот лично я не до конца понял где как раз эта Г образная траектория рисуется.
Но как я понял ей примерно требуется такой вот вывод как тут.
[C++] Еще одна про шахматы (колоквиум) Массив 8x8 и Ферзи (у меня примерная задача на коллоквиуме была)
1
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
25.12.2010, 22:17 7
Цитата Сообщение от Kill100 Посмотреть сообщение
Вот лично я не до конца понял где как раз эта Г образная траектория рисуется.
C++
1
2
const int dx[] = {-2, -2, 2, 2, -1, 1, -1, 1};
const int dy[] = {-1, 1, -1, 1, 2, -2, -2, 2};
равносильно
.*.*.
*...*
..К..
*...*
.*.*.
где . - пустое поле
* - куда ходит конь
нарисуйте на листке и увидите
1
25.12.2010, 22:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2010, 22:17
Помогаю со студенческими работами здесь

Определить, может ли конь за один ход перейти с одного поля на другое
С++ Даны координаты (целые от 1 до 8) двух полей шахматной доски. Определить, может ли конь за...

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

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

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


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

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