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

Описание работы функции

04.06.2012, 20:09. Показов 426. Ответов 0
Метки нет (Все метки)

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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <set>
#include <string>
#include <iostream>
using namespace std;
 
typedef  string polecoord;
typedef  set<polecoord> Tpoleset;
 
bool end (polecoord figuracoord)
 
{
     return 'A' <= figuracoord[0] && figuracoord[0] <= 'H'
     && '1' <= figuracoord[1] && figuracoord[1] <= '8';
}
 
bool bjet_kon
    (
        polecoord  kon_coord, 
        char          vert, 
        char          horiz
    )
{
    if(!end(kon_coord)) return false;
    return abs((kon_coord[0] - vert) * (kon_coord[1] - horiz));
}
 
bool bjet_lad
    (
        polecoord  lad_coord, 
        char          vert, 
        char          horiz
    )
{
    if(!end(lad_coord)) return false;
    return (lad_coord[0] - vert) + (lad_coord[1] - horiz); 
}
 
bool bjet_ferz
    (
        polecoord  ferz_coord, 
        char          vert, 
        char          horiz
    )
{
    if(!end(ferz_coord)) return false;
    return bjet_lad(ferz_coord, vert, horiz)
           || abs(ferz_coord[0] - vert) == abs(ferz_coord[1] - horiz);
}  
 
size_t  ferz_lad_kon_bjut_poley
    (
        polecoord  ferz_coord,
        polecoord  lad_coord,
        polecoord  kon_coord
    )
{
    Tpoleset  res_pole_set;
 
    for(char vert = 'A'; vert <= 'H'; ++vert)
    {
        for(char horiz = '1'; horiz <= '8'; ++horiz)
        {
            if(bjet_kon(kon_coord, vert, horiz)
               || bjet_lad(lad_coord, vert, horiz)
               || bjet_ferz(ferz_coord, vert, horiz))
            {
                res_pole_set.insert(polecoord(1, vert) + horiz);
            }
        }//for(char horiz = '1'; horiz <= '8'; ++horiz)
    }//for(char vert = 'A'; vert <= 'H'; ++vert)
    
 
    res_pole_set.erase(ferz_coord);
    res_pole_set.erase(lad_coord);
    res_pole_set.erase(kon_coord);
    return res_pole_set.size();
}  
 
int main ()
 
{
    polecoord ferz_coord;
    polecoord lad_coord;
    polecoord kon_coord;
    
 for(;;)
 {        
    cout << "vvedite koordinati figyr v formate D1 A2 E4"
                  << endl
                  << "Ferz: ";
        cin >> ferz_coord;
        do
        {
            cout << "Ladya: ";
            cin >> lad_coord;
        }
            while(lad_coord == ferz_coord);
 
        do
        {
            cout << "Horse:  ";
            cin >> kon_coord;
        }
            while(kon_coord == ferz_coord
               || kon_coord == lad_coord);
               cout << endl
                  << "Byut polei: "
                  << ferz_lad_kon_bjut_poley(ferz_coord, lad_coord, kon_coord)
                  << endl
                  << endl
                  << endl;        
 }
        
    return 0;
    }

Помогите разобраться с функцией:

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
size_t  ferz_lad_kon_bjut_poley
    (
        polecoord  ferz_coord,
        polecoord  lad_coord,
        polecoord  kon_coord
    )
{
    Tpoleset  res_pole_set;
 
    for(char vert = 'A'; vert <= 'H'; ++vert)
    {
        for(char horiz = '1'; horiz <= '8'; ++horiz)
        {
            if(bjet_kon(kon_coord, vert, horiz)
               || bjet_lad(lad_coord, vert, horiz)
               || bjet_ferz(ferz_coord, vert, horiz))
            {
                res_pole_set.insert(polecoord(1, vert) + horiz);
            }
        }// for(char horiz = '1'; horiz <= '8'; ++horiz)
    }//  for(char vert = 'A'; vert <= 'H'; ++vert)
    
    res_pole_set.erase(ferz_coord);
    res_pole_set.erase(lad_coord);
    res_pole_set.erase(kon_coord);
    return res_pole_set.size();
}
Не могу точно понять что она делает и каким образом, очень надеюсь на помощь старших товарищей)))))

Добавлено через 22 минуты
Если что условия задачи вот :

//На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь.
//Требуется определить количество пустых полей доски, которые находятся под боем.
//Для простоты будем полагать, что фигуры могут «бить» через другие фигуры.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2012, 20:09
Ответы с готовыми решениями:

Описание принципа работы
Здравствуйте, столкнулся с проблемой ! Задача отсортировать от максимума до минимума определенным...

Описание работы скрипта
Здравствуйте. Есть идея создания онлайн-стратегии. Чисто ради тренировок умений. Суть вопроса...

Описание работы кода
Есть вот такой код: &lt;?php class C {} class D extends C {} // Это не является расширением...

Описание работы программы
помогите, пожалуйста, описать работу программы #include &lt;iostream&gt; using namespace std; ...

0
04.06.2012, 20:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2012, 20:09
Помогаю со студенческими работами здесь

Описание работы регистр на Verilog
Точно не знаю куда написать, но в САПР вроде подходит или может сюда...

Описание работы с Клиент-банком
Доброе утро! Такой вопрос - постоянно слышу про клиент-банк обработки и мне даже пригрозили, что...

Описание алгоритма работы системы
Я скоро защищаю диплом, но у меня проблема. Тема диплома система поддержки принятия решений для...

Принцип и описание работы потоков
Какие вообще существуют асинхронные потоки? Я знаю следующие: PLINQ,ThreadPool,Task.


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

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