Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2008, 15:19   #1
pimiento
 
Регистрация: 29.05.2008
Сообщений: 4
Вопрос скажите почему работает некорректно

Функция должна проверять угрожает ли ферзь на строке doska[tchk] другим ферзям по диагонали, но почему-то проверяется только последний ферзь, а перехода на следующий либо не происходит, либо он там не проверяет
вот ко функции:

/*----<Функция проверки занятости диагонали>----*/
bool Ferz::NaDiagonal(int* doska,int tchk)const
{
if(tchk==0)
return false;
int j=1;
int prov;
prov=doska[tchk];
for(int i=(tchk-1);i>0;i--,j++)
if(doska[i]==(prov-j)||doska[i]==(prov+j))
return true;
NaDiagonal(doska,(tchk-1));
return false;
}
/*------------------</функция>------------------*/
pimiento вне форума Ответить с цитированием
Старый 29.05.2008, 15:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Я в свое время проверял удар по диагонали так: если |(xa-xb)/(ya-yb)|=1
где a - бьющая фигура b - ту которую бьют то бой верный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2008, 16:03   #3
pimiento
 
Регистрация: 29.05.2008
Сообщений: 4
По умолчанию кто такое х?

что у тебя х обозначает?
pimiento вне форума Ответить с цитированием
Старый 29.05.2008, 16:46   #4
pimiento
 
Регистрация: 29.05.2008
Сообщений: 4
По умолчанию

понял))) чёто я после всенощного решения курсача совсем слабо соображать стал)))
pimiento вне форума Ответить с цитированием
Старый 29.05.2008, 16:50   #5
pimiento
 
Регистрация: 29.05.2008
Сообщений: 4
По умолчанию

сделал вот так:

/*----<Функция проверки занятости диагонали>----*/
bool Ferz::NaDiagonal(int* doska,int tchk)
{
if(tchk==0)
return false;
int j=1;
int a,b;
a=doska[tchk];
for(int i=(tchk-1);i>0;i--,j++)
{
b=doska[i];
if((tchk-i)/(a-b)==1)
return true;
}
NaDiagonal(doska,(tchk-1));
return false;
}
/*------------------</функция>------------------*/

стало ещё больше неверных результатов
pimiento вне форума Ответить с цитированием
Старый 29.05.2008, 16:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
if((tchk-i)/(a-b)==1)
Ну во-первых тут abs не хватает (если он в Си есть)
Я уж домой убегаю если кто-ить из месных спецов не отпишется завтра попробую показать что имею ввиду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2008, 17:21   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Взятие по модулю в Си есть.
Вот так вот модуль берется
Код:
if(fabs((tchk-i)/(a-b))==1)
Функция fabs из заголовочного файла math.h
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTP1 некорректно работает nike-p Работа с сетью в Delphi 9 23.07.2008 23:13
Почему не работает цикл????? Marsik Помощь студентам 2 22.06.2008 14:16
Конструкция case of работает некорректно! Как исправить? SkAndrew Общие вопросы Delphi 6 06.04.2008 00:21
Почему не работает код? Kashp Общие вопросы Delphi 3 09.08.2007 17:33