Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
1

Упрощение кода

20.06.2014, 14:09. Показов 2206. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Есть такой код:

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
enum FTYPE { FALSE, TRUE, DEFAULT };
FTYPE f();
 
bool n()
{
    while( g() )
    {
        switch( f() )
        {
            case TRUE: return true; 
            case FALSE: return false; 
            case DEFAULT: break; 
        }
    }
    return false; 
}
 
bool c()
{
    switch( f() )
    {
       case TRUE: return true; 
       case FALSE: return false; 
       case DEFAULT: break; 
    }
    return n();
}
Как можно заметить, строки 8-13 и 20-25 эквивалентны, но можно ли их заменить новой функцией для исключения дублирования? Мне почему-то кажется, что нет. И единственное упрощение, которое тут можно сделать, это убрать строки с
C++
1
case DEFAULT: break;
т.к. они всё равно ни на что не влияют.

P.S. Обращу ваше внимание ещё на то, что c() в итоге может вызвать n(). (это не опечатка)

Какие будут идеи, уважаемые?

P.S. макроподстановку не предлагать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2014, 14:09
Ответы с готовыми решениями:

Упрощение кода
Можно ли как нибудь сократить или упростить код? cin>>answer; if ((answer!="y") &&...

Упрощение кода
Хочу написать многофункциональную консольную программу. Код получится громоздкий и запутанный. C++...

Упрощение кода
void Polynomials::print(){ // Вывод полинома int i; int k; // признак того, что...

Упрощение кода программы
Здравствуйте уважаемые форумчане! Решил начать изучать язык Си++, начал с простого также как и при...

30
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 17:33 2
Tulosba, у меня только такой слегка извращенный вариант приходит в голову
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool n(bool c)
{
    while(с || g()))
    {
        switch( f() )
        {
            case TRUE: return true; 
            case FALSE: return false; 
            case DEFAULT: break; 
        }
        if (c) break;
    }
    return c ? n(false) : false;
}
функция С вызывается как n(true), функция N вызывается как n(false)
1
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.06.2014, 19:23 3
просто делегируй функцию
C#
1
2
3
4
5
6
        switch( f() )
        {
            case TRUE: return true; 
            case FALSE: return false; 
            case DEFAULT: break; 
        }
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
20.06.2014, 19:34 4

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
enum FTYPE { FALSE, TRUE, DEFAULT };
FTYPE f();
 
bool SWITCH(FTYPE f)
{
    switch(f)
    {
    case TRUE: return true; 
    case FALSE: return false; 
    case DEFAULT: break; 
    }
    return false;
}
 
bool n()
{
    while( g() )
    {
        SWITCH(f());
    }
    return false; 
}
 
bool c()
{
    SWITCH(f());
    return n();
}
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
20.06.2014, 19:52 5
Лучший ответ Сообщение было отмечено Tulosba как решение

Решение

Не по теме:

-- выпилено --

Добавлено через 6 минут
А стоп, не доглядел.



Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool n()
{
  while (g())
  {
    ftype k = f();
    if ( k != DEFAULT ) return k;
  }
  return false;
}
 
bool c()
{
  ftype k = f();
  if (k == DEFAULT) return n();
  else return k;
}
Добавлено через 1 минуту
Так вот можно.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2014, 19:58  [ТС] 6
Issues, в вашем случае n() сможет вернуть только false, что не соответствует истине.
Цитата Сообщение от UnsKneD Посмотреть сообщение
просто делегируй функцию
Так же как Issues? Или как-то иначе?
0
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.06.2014, 20:06 7
Tulosba, вообще я с шарпом ветки перепутал. но было бы что то такое. но в таком случае return n(); никогда не выполнится.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
20.06.2014, 20:06 8
Думаю, если обернуть в функцию, то всё равно будет дублирующий код, для проверки возвращенного значения.
Если нет никаких критериев безопасности, может с си'шными прыжками попробовать поизвращаться?
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 20:09 9
Tulosba, моя функция вам видимо совсем не понравилась
0
HighPredator
20.06.2014, 20:11
  #10

Не по теме:

Хедин, не переживайте, мои по ходу тоже :D

0
Хедин
20.06.2014, 20:12
  #11

Не по теме:

HighPredator, что поделать, мир жесток)

0
Croessmah
20.06.2014, 20:12
  #12

Не по теме:

Цитата Сообщение от Хедин Посмотреть сообщение
моя функция вам видимо совсем не понравилась
думаю, это лишь минимальный пример кода, а не конкретный случай и нужно что-то более подходящее под разные ситуации

0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 20:14 13
Croessmah, мне кажется, если бы код был более глобальным, было бы легче изменить функции по феншую
0
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.06.2014, 20:19 14
Может нам хотя бы задачу озвучат? а не голый код.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
20.06.2014, 20:20 15
Извращения?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool foo ( FTYPE x ) {
    switch( x )
    {
       case TRUE: return true ; 
       case FALSE: return false ; 
       case DEFAULT: throw DEFEXCEPTION(); 
    }
}
//...
bool n()
{
    while( g() )
    {
         try {
            return foo(f()) ;
         } catch ( const DEFEXCEPTION & ) {
            break ;
         }
    }
    return false; 
}
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2014, 20:23  [ТС] 16
Цитата Сообщение от Croessmah Посмотреть сообщение
может с си'шными прыжками попробовать поизвращаться?
Ну уж нет. Битоопства нам не надо
HighPredator, Хедин, надо ж было проверить код, прежде чем плюсы раздавать.
0
Хедин
20.06.2014, 20:25
  #17

Не по теме:

Tulosba, в таком случае поспешно отзываю претензии и негодования)))

0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
20.06.2014, 21:02 18
Цитата Сообщение от Tulosba Посмотреть сообщение
HighPredator, Хедин, надо ж было проверить код, прежде чем плюсы раздавать.
? в смысле?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2014, 21:07  [ТС] 19
Цитата Сообщение от Croessmah Посмотреть сообщение
Извращения?
А где цэ() тогда? И, кстати, у тебя не выполнится g() нужное кол-во раз, если g() вернет true, а f() вернет DEFAULT. Но сама идея интересная

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
? в смысле?
Ну вы возмущались с Хедин на пару, что никакого ответа вам не дал. Вот я и объясняю, что проверял код на соответствие, а потом уже плюсанул по результатам.

0
HighPredator
20.06.2014, 21:09     Упрощение кода
  #20

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Ну вы возмущались с Хедин на пару, что никакого ответа вам не дал. Вот я и объясняю, что проверял код на соответствие, а потом уже плюсанул по результатам.
Аааа, а я то понял так, что мол код непроверенный выложил и за зря плюсы получил :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2014, 21:09

Упрощение программного кода
Всем здравствуйте а можно ли упростить вот этот код: #include "stdafx.h" #include <iostream>...

Упрощение кода очереди
Доброго времен суток! Дан код, нужно его упростить или же немного переделать. Сам в этом мало что...

Упрощение и оптимизация кода (MS VCPP)
Доброго времени суток! Имеется простенький код (все работает) но выглядит ужасно, хотелось бы...

Упрощение библиотек ?
Вы всем, когда пишите ответы с кодом поправляете библиотеки вот пример : #include "stdafx.h"...


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

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