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

Как сделать код меньше - C++

Восстановить пароль Регистрация
 
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
04.04.2014, 10:47     Как сделать код меньше #1
Здравствуйте, вообще меня интересует вопрос как можно уменшить этот код
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
switch(a){
    case 1: field[0][0]=1; break;
    case 2: field[0][1]=1; break;
    case 3: field[0][2]=1; break;
    case 4: field[1][0]=1; break;
    case 5: field[1][1]=1; break;
    case 6: field[1][2]=1; break;
    case 7: field[2][0]=1; break;
    case 8: field[2][1]=1; break;
    case 9: field[2][2]=1; break;
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 11:19     Как сделать код меньше #2
C++
1
field[(a-1)/3][(a-1)%3]=1;
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
04.04.2014, 11:22     Как сделать код меньше #3
xTIGRx, можно через if и for сделать

C++
1
2
3
4
5
6
7
8
bool t=1;
if(a>=1 && a<=9 && t==1)
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
{
field[i][j]=1;
t=0;
}
Что то типо этого
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
04.04.2014, 11:22  [ТС]     Как сделать код меньше #4
Tulosba, И все это в цикл???
просто я не знаю мой код выглядит как то по деревенски что ли
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
04.04.2014, 11:35     Как сделать код меньше #5
xTIGRx, нет цикла не надо, у Вас происходит выбор координаты в зависимости от значения а, там 1 действие
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 11:40     Как сделать код меньше #6
Цитата Сообщение от xTIGRx Посмотреть сообщение
И все это в цикл???
В изначальном коде цикла нет, зачем теперь добавлять?
Для большей педантичности надо ещё диапазон `a` проверить [1..9].

^Tecktonik_KiLLeR, какой-то бред написали, если честно
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
04.04.2014, 11:57  [ТС]     Как сделать код меньше #7
Tulosba, я не пойму только одного, в switch я делаю проверку на нажатие от 1 до 9, если да то равно 1. можно код полнее написать, просто должно же быть условие какое то, а то в данном случае вы просто присваиваете к элементам массива значение 1 как я понял, а это не есть хорошо.
^Tecktonik_KiLLeR, не обижайтесь но я соглашусь код какой - то пугающий, для нас с Tulosba
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 12:01     Как сделать код меньше #8
Цитата Сообщение от xTIGRx Посмотреть сообщение
я не пойму только одного, в switch я делаю проверку на нажатие от 1 до 9,
Ну подставьте вместо `a` числа от 1 до 9 и посмотрите, есть ли различия м/у вашим и моим вариантами с точки зрения результата.
Я думаю, это многое должно прояснить
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
04.04.2014, 12:17  [ТС]     Как сделать код меньше #9
теперь я понял смысл), только проблема одна гляньте на мой код ниже, в каком порядке идут case в таком и надо чтобы работала ваша формула, иначе результат в моей программе будет печальным(.
можете изменить формулу вашу, в этом и вся проблема была), надо было в таком же порядке сделать
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
case 7: field[0][0]=1; break;
    case 8: field[0][1]=1; break;
    case 9: field[0][2]=1; break;
    case 4: field[1][0]=1; break;
    case 5: field[1][1]=1; break;
    case 6: field[1][2]=1; break;
    case 1: field[2][0]=1; break;
    case 2: field[2][1]=1; break;
    case 3: field[2][2]=1; break;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.04.2014, 12:37     Как сделать код меньше #10
Самый очевидный способ наверное добавить вначале преобразование:
C++
1
2
if( a > 0  && a < 4 ) a += 6;
else if( a > 6  && a < 10 ) a -= 6;
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
04.04.2014, 12:47     Как сделать код меньше #11
xTIGRx,
твой код хорош, для отладки, для проверки
в любом случае лишний case прописать проще, чем изменять условие
да и еще в каждой ветке применить свой алгоритм
код Tulosba, хорош своей компактностью, но если нужно будет не 9 а 95 значений то придется переписывать алгоритм
насчет быстродействия проверять надо
у тебя ветвление у Tulosba, деление
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
04.04.2014, 13:20     Как сделать код меньше #12
xTIGRx, если массив не динамический то можно бы:
C++
1
2
3
4
int field_[3][3]={0};//если так например
 
int *p_field = (int*)field_;
(if a>-1 && a<9) *(p_field+a)=1;
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
04.04.2014, 13:30  [ТС]     Как сделать код меньше #13
Нет не динамический, ладно спасибо всем оставлю switch, я просто не знаю как профессионалы пишут когда у них 100 ветвлений, просто неужели через switch???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 13:34     Как сделать код меньше
Еще ссылки по теме:

Как сделать компактный код ? C++
C++ Как сделать код абстрактным
Как можно сделать данный кусок кода меньше и проще? C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
04.04.2014, 13:34     Как сделать код меньше #14
Цитата Сообщение от xTIGRx Посмотреть сообщение
я просто не знаю как профессионалы пишут когда у них 100 ветвлений, просто неужели через switch???
зависит от задачи
вот например при программировании в WinApi функция WinProc представляет из себя один большой ( или не очень) switch
Yandex
Объявления
04.04.2014, 13:34     Как сделать код меньше
Ответ Создать тему
Опции темы

Текущее время: 15:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru