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

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

Войти
Регистрация
Восстановить пароль
 
s1n0ptik
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 6
#1

Непонятно почему ведёт себя так программа - C++

29.05.2012, 19:06. Просмотров 368. Ответов 2
Метки нет (Все метки)

Задачка:

//На шахматной доске 8х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
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
#include <set>
#include <string>
#include <iostream>
using namespace std;
 
typedef  string polecoord;
typedef  set<polecoord> Tpoleset;
 
int 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);
            }
        }
    }
    
} 
    
   
 
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 << "Lad'ya: ";
            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;
    }

Проблема: всегда выдаёт один и тот же результат, при любых введённых данных.

Помогите разобраться, пожалуйста)))


Добавлено через 29 минут
Хелпаните плиз, время поджимает((((((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2012, 19:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятно почему ведёт себя так программа (C++):

Нюансы работы с массивами: почему программа ведёт себя не так, как ожидается? - C++
// ConsoleApplication20.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; ...

Нюансы работы с оператором ветвления if else: почему программа ведёт себя не так, как ожидается? - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void check_weekday(string day) { if (day == &quot;Понедельник&quot; || day ==...

Нюансы работы с оператором ветвления if else: почему программа ведёт себя не так, как ожидается? - C++
Имеется код: int a; char q; for (;;) { cout &lt;&lt; &quot;Введите число: &quot;; cin &gt;&gt; a;

Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу? - C++
То есть вообще непонятно ничё, вот, смотрите, этот пример не компилится: #include &lt;stdio.h&gt; class fee { public: //Не компилится ...

Каретка странно себя ведёт - C++
С недавнего времени , каретка в Visual studio начала менятся , при нажатии стр. влево(выделяет символ) ... Как исправить? VS2015

Странно себя ведёт массив в классе. - C++
Доброго времени суток всем. Есть у меня некий класс class * { private int mas; int len; //фактическая длина массива public ...

2
zvoronz
271 / 239 / 21
Регистрация: 29.05.2012
Сообщений: 889
29.05.2012, 20:02 #2
Хочу тебе помочь, но твой код совершенно как то для меня не логичен

Не легче ли взять просто массив 8х8 и в нём уже в соответствии с координатами фигур отметить те поля которые они бьют а потом сосчитать их? гораздо всё понятнее будет того что у тебя написано.
0
s1n0ptik
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 6
29.05.2012, 20:38  [ТС] #3
А как это будет выглядеть примерно?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2012, 20:38
Привет! Вот еще темы с ответами:

Странно ведёт себя функция fgets - C++
(в файле лежит предложение на английском) int main() { FILE *f; char str; if ((f=fopen(&quot;Е:\\...имя файла&quot;,&quot;r&quot;))=NULL){printf...

Перегрузка оператора индексации для класса плохо себя ведёт - C++
Собственно, есть такое дело. #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; ...

Почему C++ программа не удаляет саму себя? - C++
Имеется следующий код (файл 01del.cpp): #include &lt;windows.h&gt; using namespace std; int main() { system(&quot;del /q...

Работаю с файлом *.txt. Прога ведет себя странно если последняя строка файла пуста. Почему так? - C++
Добрый день! Помогите пожалуйста с небольшой проблемой. Что хотел сделать: Есть текстовый файл, в нем содержатся любые...


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

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

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