Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
#1

Написать задачку на двумерные массивы(Шахматная доска.На ней расположены 2 черных коня и белый слон).

17.04.2009, 15:19. Просмотров 2961. Ответов 9
Метки нет (Все метки)

Помогите написать задачку на двумерные массивы.
Задача:
Шахматная доска.На ней расположены 2 черных коня и белый слон.Проверить сколько коней под ударом.(про расположение фигур в условии речи не идет,поэтому наверное оно произвольное).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2009, 15:19
Ответы с готовыми решениями:

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

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

Нужно доработать задачку на двумерные массивы.
Шахматная доска.На ней расположены 10 черных коней и белый слон.Проверить...

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

шахматная доска!!
Нужно вывести шахматную доску, где белые клетки - 0 и черные - 1,...

9
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
17.04.2009, 15:42 #2
Для простоты примера я не пишу проверку совпадения вводимых координат и нахождение их в промежутке от 1 до 8

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
#include <iostream>
 
int main()
{
  int desk[8][8] = {0}; // доска 8х8. пусть незанятые клетки будут равны 0, клетка  с первым конем 1, со вторым конем 2.
  //координаты слона запишем в отдельные переменные
 
  int sx, sy; // координаты слона
  int x, y; 
  cout << "enter the position of SLON (x, y):\n"; // позиция слона
  cin >> sx;
  cin >> sy;
 
  cout << "enter the position of 1-st KON (x, y):\n"; // // позиция 2-го коня
  cin >> x;
  cin >> y;
  desk[x+1][y+1] = 1;
 
  cout << "enter the position of 2-nd KON (x, y):\n"; // // позиция 2-го коня
  cin >> x;
  cin >> y;
  desk[x+1][y+1] = 2;
 
  int udar = 0; // сколько под ударом
  
  int i, j; 
 
  // определяем кто под ударом 
  /*
  идея в следующем: если разности между X и Y координатами слона и коня равны,
  значит они находятся на одной диагонали, то есть под ударом слона
  */
  for (i = 0; i < 8; i++)
  {
     for (j = 0; j < 8; j++)
     {
        if (desk[i][j] == 1 && (sx-i) == (sy-j)) 
           udar++;
 
        if (desk[i][j] == 2 && (sx-i) == (sy-j))
           udar++;
     }
  }
 
}

А вообще, гораздо удобнее вообще не использовать массивы. Так же, как и координаты слона, записать в отдельные переменные координаты коней и осуществить проверку разностей координат.
2
unStatiK
Заблокирован
17.04.2009, 15:46 #3
Цитата Сообщение от Хакер Посмотреть сообщение
Помогите написать задачку на двумерные массивы.
Задача:
Шахматная доска.На ней расположены 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
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  int arr[8][8];
  int a1,a2,b1,b2,c1,c2,j,i,sum_horse = 0;
  for(i=0;i<8;i++)
  {
    for(j=0;j<8;j++)
       arr[i][j]=0;
    }
  printf("Vvedite raspolozhenie Slona : ");
  scanf("%d %d",&a1,&a2);
  arr[a1][a2] = 1;
  printf("\nVvedite raspolozhenie 1 Konya : ");
  scanf("%d %d",&b1,&b2);
  arr[b1][b2] = 1;
  printf("\nVvedite raspolozhenie 2 Konya : ");
  scanf("%d %d",&c1,&c2);
  arr[c1][c2] = 1;
    i = a1 - 1;
    j = a2 - 1;
  while((i>0) || (j>0))
     {
        if(arr[i][j]==1)
           {
                sum_horse++;
                }
                i--;
                j--;
        }
 
    i = a1 + 1;
    j = a2 - 1;
  while((i<8) || (j>0))
     {
        if(arr[i][j]==1)
           {
                sum_horse++;
                }
                i++;
                j--;
        }
 
    i = a1 - 1;
    j = a2 + 1;
  while((i>0) || (j<8))
     {
        if(arr[i][j]==1)
           {
                sum_horse++;
                }
                i--;
                j++;
        }
    i = a1 + 1;
    j = a2 + 1;
  while((i<8) || (j<8))
     {
        if(arr[i][j]==1)
           {
                sum_horse++;
                }
                i++;
                j++;
        }
 
    printf("\n horse : %d\n",sum_horse);
  system("PAUSE");
  return 0;
}
1
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
17.04.2009, 15:50 #4
unStatiK, что-то твой алгоритм тяжеловат для моего мозга
прокомментируй, пожалуйста, что происходит в циклах. интересно, в чем идея )
1
unStatiK
Заблокирован
17.04.2009, 15:56 #5
Цитата Сообщение от Deicider Посмотреть сообщение
unStatiK, что-то твой алгоритм тяжеловат для моего мозга
прокомментируй, пожалуйста, что происходит в циклах. интересно, в чем идея )
идея в следуюущем : все клетки сначало забиваем 0 , а там где стоят фигуры значением 1 ... ну и проверка по каждой диагонале , если равна 1 значит там стоит фигура (то есть конь) и суммируем количество коней .
1
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
17.04.2009, 16:00 #6
Получается, что ты проверяешь наличие коня на диагонали доски, но не обязательно же слон и кони будет стоять именно на диагонали. Например (x - пусто, с - слон, к - конь):
х х х х х х х х
х х х х С х х х
х х х х х х х х
х х х х х х х х
х К х х х х х К
х х х х х х х х
х х х х х х х х

на диагоналях никто не стоит, но под ударом два коня находятся

И еще: почему у тебя четыре цикла? диагонали-то всего две
1
unStatiK
Заблокирован
17.04.2009, 16:04 #7
Цитата Сообщение от Deicider Посмотреть сообщение
Получается, что ты проверяешь наличие коня на диагонали доски, но не обязательно же слон и кони будет стоять именно на диагонали. Например (x - пусто, с - слон, к - конь):
х х х х х х х х
х х х х С х х х
х х х х х х х х
х х х х х х х х
х К х х х х х К
х х х х х х х х
х х х х х х х х

под ударом два коня )

И еще: почему у тебя четыре цикла? диагонали-то всего две
я имел ввиду диагонали удара Слона ....а не шахматной доски
1
Deicider
96 / 52 / 3
Регистрация: 18.03.2009
Сообщений: 273
17.04.2009, 16:17 #8
дошло )))
1
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
17.04.2009, 16:48  [ТС] #9
А вообще, гораздо удобнее вообще не использовать массивы
Задание на массивы)
Спасибо Deicider и unStatiK,буду сидеть разбираться в написанном)Почему я такой нуб в с++...
0
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
26.04.2009, 18:34  [ТС] #10
#include <iostream>
using namespace std;
int main()
{
int desk[8][8] = {0}; // доска 8х8. пусть незанятые клетки будут равны 0, клетка с первым конем 1, со вторым конем 2.
//координаты слона запишем в отдельные переменные

int sx, sy; // координаты слона
int x, y;
cout <<"enter the position of SLON (x, y):\n"; // позиция слона
cin >> sx;
cin >> sy;

cout << "enter the position of 1-st KON (x, y):\n"; // // позиция 2-го коня
cin >> x;
cin >> y;
desk[x+1][y+1] = 1;

cout << "enter the position of 2-nd KON (x, y):\n"; // // позиция 2-го коня
cin >> x;
cin >> y;
desk[x+1][y+1] = 2;

int udar = 0; // сколько под ударом

int i, j;

// определяем кто под ударом
/*
идея в следующем: если разности между X и Y координатами слона и коня равны,
значит они находятся на одной диагонали, то есть под ударом слона
*/
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (desk[i][j] == 1 && (sx-i) == (sy-j))
{cout<<"1-i konb pod udarom\n";}

if (desk[i][j] == 2 && (sx-i) == (sy-j))
{cout<<"2-i konb pod udarom\n";}
}
}
system("pause");
}
Помогите нарисовать алгоритм к этой проге...У меня немного кривой выходит.

Добавлено через 3 часа 16 минут 45 секунд
Помогите с алгоритмом плззз.......
0
26.04.2009, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2009, 18:34

С++ Шахматная доска
Помогите пожалуйста с заданием. Нужно сделать шахматную доску 16*16 и...

Шахматная доска
Ребята, помогите! Есть код на С++, выводящий на экран шахматную доску, нужно...

шахматная доска
Здравствуйте! Есть задача: дана шахматная доска размером NxN, нужно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru