0 / 0 / 0
Регистрация: 02.01.2015
Сообщений: 13
1

Упростить условия

07.11.2015, 22:48. Показов 522. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите, возможно ли как-то упросить данное условие:
C++
1
2
3
4
if ((XY[empty].position == XY[Nums[i] - 1].position) || (XY[empty].position == XY[Nums[i] + 4].position) || (XY[empty].position == XY[Nums[i] - 4].position))
                            {
                                isMove = true; t = i; 
                            }
Пишу на SFML игру, и получается большой код ибо много таких условий, хотела сделать через истину и ложь условия чтобы хоть как то уменьшить код:
C++
1
2
3
4
if ((XY[empty].position == (XY[Nums[i] - 1].position || XY[Nums[i] + 4].position || XY[Nums[i] - 4].position))
                            {
                                isMove = true; t = i; 
                            }
Но, к моему сожалению, этого нельзя сделать с координатами. Надеюсь понятно объяснила, у кого есть хоть какие-то идеи, кидайте.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2015, 22:48
Ответы с готовыми решениями:

Упростить условия
Упростить условия:(приложен скриншот)

Упростить условия
Задание- упростить условия. Само задание и его решение на фото ниже. Я его решил, но преподаватель...

Упростить условия если а > 1000 и б > 2000 или а <=1000 тогда
Всем привет. Есть задачка с теста, говорят очень сложная, и говорят я ее не решил. ответ не...

Упростить, восстановить и упростить, и найдти множество предикатов
Помогите сделать задания, сам слабо понимаю как это делать, смог только по таблицам истинности...

7
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
07.11.2015, 22:59 2
Цитата Сообщение от FortT Посмотреть сообщение
возможно ли как-то упросить данное условие
Тут важно знать что есть что и зачем оно там есть.
Что такое XY, empty, Nums, -1, +4, isMove, t?
0
21 / 15 / 6
Регистрация: 19.10.2015
Сообщений: 61
08.11.2015, 01:38 3
знать бы что означают эти переменные.
Но для упрощения вида можно записать так.
Но переменным first, second, third нужно дать какие-то более информативние названия
C++
1
2
3
4
5
6
7
8
9
    {
        bool first =    (XY[empty].position == XY[Nums[i] - 1].position);
        bool second =   (XY[empty].position == XY[Nums[i] + 4].position);
        bool third =    (XY[empty].position == XY[Nums[i] - 4].position);
 
        if (first || second || third) {
            isMove = true; t = i; 
        }
    }
1
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 455
08.11.2015, 02:23 4
Ну самое банальное, если хотите, чтобы Вам не мазолили глаза длинные условия, но нужны именно такие, то засуньте их в функцию. Ну например.

C++
1
2
3
4
5
6
7
bool isCondition()
{
if ((XY[empty].position == XY[Nums[i] - 1].position) || (XY[empty].position == XY[Nums[i] + 4].position) || (XY[empty].position == XY[Nums[i] - 4].position))
                            {
                                isMove = true; t = i; 
                            }
}
Где Condition - название условия, например isBang - произошел взрыв и тд.
Только придется позаботиться о том, чтобы функция видела isMove и t, XY, empty, Nums и так далее.
Я думаю у Вас это труда не составит.
0
0 / 0 / 0
Регистрация: 02.01.2015
Сообщений: 13
08.11.2015, 12:45  [ТС] 5
Достаточно знать что XY - массив типа вектор из позиций спрайтов. AntonIv дал хорошую идею как улучшить условие для читабельности, а меня еще интересует можно ли отсюда:
C++
1
if ((XY[empty].position == XY[Nums[i] - 1].position) || (XY[empty].position == XY[Nums[i] + 4].position) || (XY[empty].position == XY[Nums[i] - 4].position))
как либо вынести XY[empty].position что бы не писать его по 10 раз, а перечислять в условие только не повторяющийся значения, хочу максимальный минимализм... С переменными типа вектор просто ранее не работала
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.11.2015, 12:54 6
Цитата Сообщение от FortT Посмотреть сообщение
как либо вынести XY[empty].position что бы не писать его по 10 раз,
создаешь ссылку например:
C++
1
const auto& epos = XY[empty].position;
И дальше используешь epos.
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
08.11.2015, 13:00 7
FortT,
C++
1
2
3
4
5
6
7
<your type> const & pos = XY[empty].position;
 
if (pos == XY[Nums[i] - 1].position 
 || pos == XY[Nums[i] + 4].position 
 || pos == XY[Nums[i] - 4].position)
{
    //....
Совсем не писать не выйдет. Но если эта операция часто нужна (т.е. таких мест много), то лучше всего сделать функцию и вынести многословную проверку туда.
1
21 / 15 / 6
Регистрация: 19.10.2015
Сообщений: 61
10.11.2015, 01:48 8
подсказал бы как короче сделать с помощью итераторов, но не знаю, что такое Nums [i]
а так можно что-то типа такого:

C++
1
2
3
4
5
6
7
8
9
10
11
    {
        vector< тип >::iterator iter = XY.begin() + empty;
 
        bool first =    (iter->position == XY[Nums[i] - 1].position);
        bool second =   (iter->position == XY[Nums[i] + 4].position);
        bool third =    (iter->position == XY[Nums[i] - 4].position);
 
        if (first || second || third) {
            isMove = true; t = i; 
        }
    }
Добавлено через 20 минут
Можно еще так..
C++
1
2
3
4
5
6
7
8
9
10
11
12
    {
        тип e = XY[empty];
        vector< тип >::iterator it = XY.begin() + Nums[i];
 
        bool first =    (e == (it - 1)->position);
        bool second =   (e == (it + 4)->position);
        bool third =    (e == (it - 4)->position);
 
        if (first || second || third) {
            isMove = true; t = i; 
        }
    }
1
10.11.2015, 01:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2015, 01:48
Помогаю со студенческими работами здесь

Внутри проверки условия не производится ещё одна проверка условия
Как задумывалось - при нажатии на джойстик просто должны были остановится движки, но если при...

Описать оператор выбора, в котором при истинности второго условия выполняются действия и третьего условия тоже
помогите пожалуйста ответить на вопрос 2. Описать оператор выбора, в котором при истинности...

Массив: Условия ввода: по столбцам, Условия вывода: по строкам в виде таблицы. Написать исходную матрицу и вывод массива по строкам.
Есть массив B размерностью 5x5, тип данных real, Условия ввода: по столбцам, Условия вывода: по...

Упростить
$db-&gt;query(&quot;INSERT INTO file (&quot;.implode(',', $pl).&quot;) VALUES (&quot;.implode(',', $vl).&quot;)&quot;); $insert =...


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

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

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