Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
#1

Замена фигур на шахматной доске - C++

09.08.2012, 09:51. Просмотров 1484. Ответов 18
Метки нет (Все метки)

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

Добавлено через 9 часов 7 минут
слабо? это, конечно, не диагональ симметричной матрицы вывести...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 09:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена фигур на шахматной доске (C++):

Числа на шахматной доске в С++ - C++
В клетках шахматной доски находятся целые числа. --- Определить в программе глобальные данные- константу N=8 и двумерный числовой массив...

Ход на шахматной доске - C++
Поле шахматной доски определяется парой натуральных чисел, первое из которых задает номер вертикали, а второе - номер горизонтали. Данные...

Числа на шахматной доске - C++
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив...

Числа на шахматной доске - C++
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив...

Расставить n ладей на шахматной доске n*n - C++
Вообщем нужно расставить n ладей на шахматной доске n*n Вот то что у меня получилось: #pragma argsused #include<iostream.h> int...

Геометрическая прогрессия на шахматной доске - C++
Всем доброго времени суток.Отписывайтесь кто как решил. #include "head.h" void main() {//на поле 64 клетки ///сколько надо...

18
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.08.2012, 10:36 #2
А что собственно, не получается?
0
John Prick
809 / 742 / 148
Регистрация: 27.07.2012
Сообщений: 2,122
Завершенные тесты: 3
09.08.2012, 10:56 #3
Ну и причём тут С++?
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 10:57  [ТС] #4
как это сделать на с++. так на доске я расставляю и понимаю, какие поля у какого коня под боем. и на бумажке списки могу записать. а дальше - никак. какие классы нужны, какие поля, ф-ии...
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 692
09.08.2012, 11:23 #5
Цитата Сообщение от novi4ok Посмотреть сообщение
как это сделать на с++. так на доске я расставляю и понимаю, какие поля у какого коня под боем. и на бумажке списки могу записать. а дальше - никак. какие классы нужны, какие поля, ф-ии...
ну навскидку создаешь структуру типа

|
C++
1
2
3
4
5
6
struct pole{
 int Kon1;
 int Kon2;
 int Kon3;
 int Kon4;
};
дальше делаешь двухмерный массив типа pole, пробегаешься по нему расставляешь битые поля, каждому коню в свою переменню в структуре, а дальше уже делай все остальные необходимые манипуляции
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 11:25  [ТС] #6
Цитата Сообщение от Aloir Посмотреть сообщение
ну навскидку создаешь структуру типа

|
C++
1
2
3
4
5
6
struct pole{
 int Kon1;
 int Kon2;
 int Kon3;
 int Kon4;
};
дальше делаешь двухмерный массив типа pole, пробегаешься по нему расставляешь битые поля, каждому коню в свою переменню в структуре, а дальше уже делай все остальные необходимые манипуляции
а конь?
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 692
09.08.2012, 11:31 #7
Цитата Сообщение от novi4ok Посмотреть сообщение
а конь?
что конь?

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

после ввода всех коней бежишь по полю, расставляешь битки, и считаешь что тебе нужно.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 17:12  [ТС] #8
ну да, "задней левой" ... ж
0
yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
09.08.2012, 17:41 #9
Создаешь нулевую матрицу 8x8. Ставишь единицы - это кони. Потом пишешь 8 функции вероятных ходов коня, которые возвращают true если конь под боем какого либо... Ну вот и все xD
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 22:34  [ТС] #10
а конь? вообще без коня, только единицы? а как потом списки строить - вот "иду" я по этой матрице (шесть раз нужно пройти, наверное?), и что? вот "пришел" на клетку матрицы, она в списке? выводить ее?

Добавлено через 57 секунд
и никто ни строчки кода не предложил, только какая-то структура. "клуб четырех коней" какой-то.

Не по теме:

столица переезжает в васюки.

0
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.08.2012, 22:45 #11
Цитата Сообщение от novi4ok Посмотреть сообщение
и никто ни строчки кода не предложил, только какая-то структура. "клуб четырех коней" какой-то.
А вы попробуйте себя повежливее вести.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
09.08.2012, 23:00 #12
Цитата Сообщение от novi4ok Посмотреть сообщение
на доске я расставляю и понимаю, какие поля у какого коня под боем. и на бумажке списки могу записать. а дальше - никак.
Я понимаю, так: чем проще рассуждения тем легче рассуждать. У коня есть координаты. Что значит битое поле? Это поле куда возможен ход (неучитывая какой фигурой оно занято, тут решите сами, кстати если стоит дружеский конь то под боем ли он находится?)
Далее каждое такое поле по осям (четыре направления) определяется смещением на 2 позиции прямо (по x например) и одну позицию в сторону (по другой координате, для x это y). При проверке координат поля нужно проверить не вышли ли за пределы шахматного поля 8Х8 и возможно на наличие дружественного коня (если решите, что друзей не бьют)).
ps Для коня в центре доски - 4 направления двойного сдвига, по два одинарных сдвига в каждом, то есть 8 битых полей.
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 23:45  [ТС] #13

Не по теме:

Цитата Сообщение от defer Посмотреть сообщение
А вы попробуйте себя повежливее вести.
вежливо - это когда взрослым дядям не делают замечаний. в крайнем случае проходят мимо, надув губки.



Добавлено через 5 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я понимаю, так: чем проще рассуждения тем легче рассуждать. У коня есть координаты. Что значит битое поле? Это поле куда возможен ход (неучитывая какой фигурой оно занято, тут решите сами, кстати если стоит дружеский конь то под боем ли он находится?)
Далее каждое такое поле по осям (четыре направления) определяется смещением на 2 позиции прямо (по x например) и одну позицию в сторону (по другой координате, для x это y). При проверке координат поля нужно проверить не вышли ли за пределы шахматного поля 8Х8 и возможно на наличие дружественного коня (если решите, что друзей не бьют)).
ps Для коня в центре доски - 4 направления двойного сдвига, по два одинарных сдвига в каждом, то есть 8 битых полей.
понимаешь, я не хочу думать ни о битах, ни о клетках, пока не решу проблему дизайна. мы ведь с++ имеем. значит, классы можем создавать, которые что-то будут уметь. напрашивается пока участники "доска", "конь", "список" (или "генератор отчетов"? или и то и другое?). тогда уже и нолики по клеточкам можно раскладывать. но если сразу полезу рисовать матрицы с четырьмя единичками, запутяюсь. напишу, конечно, и так, но тогда самому нужно становиться конем, и через пару часов уже перестану понимать, как оно все работает. хороший (удачный) дизайн даже в такой примитивной задаче упрощает работу.

принимаются предложения по улучшению моего наброска списка участников.
0
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
10.08.2012, 01:28 #14
novi4ok,
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<iostream>
#include<ctime>
using namespace std;
bool is_under_attack(int a1, int x1, int a2, int x2){
     int check=abs(a1-a2)*10+abs(x1-x2);
     if (check==12 || check==21) return true;
     return false;
}
int main(){
    // создаем, инициализируем и отображаем координаты четырех коней
    srand(time(0));
    int horse[4][2];
    for (int i=0; i<8; i++){
        horse[i/2][i%2]=rand()%8+1;
        if (i%2==1) cout<<i/2+1<<" horse : "<<(char)(horse[i/2][0]+64)<<horse[i/2][1]<<endl;
    }
    
    cout<<"\n1 list : "; // список полей под боем каждого из коней
    for (int i=1; i<=4; i++){
        cout<<"\n\t"<<i<<" horse : ";
        for (int x=1; x<=8; x++)
            for (int y=1; y<=8; y++)
                if (is_under_attack(x,y,horse[i-1][0],horse[i-1][1])) cout<<(char)(x+64)<<y<<" ";
    }
    
    cout<<"\n\n2 list : \n"; // список полей под боем нескольких коней
    for (int x=1; x<=8; x++)
        for (int y=1; y<=8; y++){
            string result="";
            int count=0;
            for (int i=1; i<=4; i++)
                if (is_under_attack(x,y,horse[i-1][0],horse[i-1][1])){
                   count++;
                   result+=(char)(i+48);
                   result+=" ";
                }
            if (count>1) cout<<"\t"<<(char)(x+64)<<y<<" : "<<result<<endl;
        }
    
    cout<<"\n3 list : "; // поля не под боем
    for (int x=1; x<=8; x++)
        for (int y=1; y<=8; y++){
            int count=0;
            for (int i=1; i<=4; i++)
                if (is_under_attack(x,y,horse[i-1][0],horse[i-1][1])) count++;
            if (count==0) cout<<(char)(x+64)<<y<<" ";
        }
    
    cout<<"\n\n"; system("pause");
    return 0;
}
1
Миниатюры
Замена фигур на шахматной доске  
Aloir
13.08.2012, 02:35     Замена фигур на шахматной доске
  #15

Не по теме:


просто не там ответил)

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2012, 02:35
Привет! Вот еще темы с ответами:

Задача о зернах на шахматной доске - C++
Математическая задача, в которой вычисляется, сколько будет зёрен на шахматной доске, если класть на каждую следующую клетку доски вдвое...

Одного ли цвета клетки на шахматной доске? - C++
Даны координаты двух полей шахматной доски (координаты клетки - это 2 числа от 1 до 8: номер столбца и номер строки) Одно ли цвета эти...

Задача про зерна на шахматной доске - C++
Математическая задача про пшеничные зернышки и шахматную доску. Когда на первую клетку кладется одно зернышко, на вторую – два, на третью -...

Просчет ходов Слона по шахматной доске - C++
Здравствуйте. Помогите, пожалуйста, с решением задачи на просчет ходов слона по шахматной доске. Функционал: Вводим: текущее...


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

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

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