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

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

Войти
Регистрация
Восстановить пароль
 
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 1
#1

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

04.04.2014, 10:47. Просмотров 358. Ответов 13
Метки нет (Все метки)

Здравствуйте, вообще меня интересует вопрос как можно уменшить этот код
Кликните здесь для просмотра всего текста
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;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 10:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать код меньше (C++):

Как можно сделать данный кусок кода меньше и проще? - C++
Задние: Заменить все элементы с четными номерами на значение второго положительного элемента массива. void change() //замена элементов...

Как реализовать в массиве поиск 2 х максимальных, второе эквивалентно первому или меньше первого мой код нероб - C++
#include <iostream> using namespace std; int main() { double x, max1=0,max2=0; int i_1=0, i_2=0; for(int i=0; i < 5; i++)...

Как сделать код абстрактным - C++
pojalusta pomagite u menya est cod dlya igri tetrisa no ya ne mogu sdelot evo abstraktnim!!! esli kto to mojet mne pomoch ...

Как сделать компактный код ? - C++
Ребят, дайте советы по тому как сделать свой код компактнее, красивее и читабельней. Вот пример моего стиля программирования : ...

break или как сделать лучше код - C++
Вообщем делал задание "НАйти первый и последний нулевой элемент",так вот ,дан рабочий код,ну есть интересующий вопрос ,яхотел бы...

Как сделать данный код более логичным и читаемым? - C++
Здравствуйте. Есть код, который, очевидно, выглядит не совсем логично. Полагаю, что запись в файл нужно сделать отдельной функцией, но вот...

13
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.04.2014, 11:19 #2
C++
1
field[(a-1)/3][(a-1)%3]=1;
1
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,282
Завершенные тесты: 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;
}
Что то типо этого
0
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 1
04.04.2014, 11:22  [ТС] #4
Tulosba, И все это в цикл???
просто я не знаю мой код выглядит как то по деревенски что ли
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
04.04.2014, 11:35 #5
xTIGRx, нет цикла не надо, у Вас происходит выбор координаты в зависимости от значения а, там 1 действие
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.04.2014, 11:40 #6
Цитата Сообщение от xTIGRx Посмотреть сообщение
И все это в цикл???
В изначальном коде цикла нет, зачем теперь добавлять?
Для большей педантичности надо ещё диапазон `a` проверить [1..9].

^Tecktonik_KiLLeR, какой-то бред написали, если честно
0
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 1
04.04.2014, 11:57  [ТС] #7
Tulosba, я не пойму только одного, в switch я делаю проверку на нажатие от 1 до 9, если да то равно 1. можно код полнее написать, просто должно же быть условие какое то, а то в данном случае вы просто присваиваете к элементам массива значение 1 как я понял, а это не есть хорошо.
^Tecktonik_KiLLeR, не обижайтесь но я соглашусь код какой - то пугающий, для нас с Tulosba
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.04.2014, 12:01 #8
Цитата Сообщение от xTIGRx Посмотреть сообщение
я не пойму только одного, в switch я делаю проверку на нажатие от 1 до 9,
Ну подставьте вместо `a` числа от 1 до 9 и посмотрите, есть ли различия м/у вашим и моим вариантами с точки зрения результата.
Я думаю, это многое должно прояснить
0
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 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;
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.04.2014, 12:37 #10
Самый очевидный способ наверное добавить вначале преобразование:
C++
1
2
if( a > 0  && a < 4 ) a += 6;
else if( a > 6  && a < 10 ) a -= 6;
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
04.04.2014, 12:47 #11
xTIGRx,
твой код хорош, для отладки, для проверки
в любом случае лишний case прописать проще, чем изменять условие
да и еще в каждой ветке применить свой алгоритм
код Tulosba, хорош своей компактностью, но если нужно будет не 9 а 95 значений то придется переписывать алгоритм
насчет быстродействия проверять надо
у тебя ветвление у Tulosba, деление
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,644
Записей в блоге: 5
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;
0
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 1
04.04.2014, 13:30  [ТС] #13
Нет не динамический, ладно спасибо всем оставлю switch, я просто не знаю как профессионалы пишут когда у них 100 ветвлений, просто неужели через switch???
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
04.04.2014, 13:34 #14
Цитата Сообщение от xTIGRx Посмотреть сообщение
я просто не знаю как профессионалы пишут когда у них 100 ветвлений, просто неужели через switch???
зависит от задачи
вот например при программировании в WinApi функция WinProc представляет из себя один большой ( или не очень) switch
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 13:34
Привет! Вот еще темы с ответами:

Плохой калькулятор: как его сделать нормальным? (улучшить код) - C++
Как его сделать нормальным ? :cry: #include &lt;functional&gt; #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include...

Как переделать код?. Нужно сделать через функции пользователя - C++
#include &lt;string.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; int main() { char *st=new...

как сделать что-бы код в массиве вывел одинаковые числа? - C++
Помогите по C++,Нужо что-бы числа которые ты повторно ввел в массиве отобразились на екран!! Например : 1 3 4 2 4 5 Вывод : 4 5 ...

Как сделать так, чтобы код вернул НОРМАЛЬНУЮ строку в pName, а не мусор - C++
Короче, либо мне сейчас КТО-НИБУДЬ ПОМОЖЕТ, либо я... :wall: .. нувыпоняли. ВООБЩЕМ #include &lt;iostream&gt; #include &lt;fstream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
04.04.2014, 13:34
Ответ Создать тему
Опции темы

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