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

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

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

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

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

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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2014, 14:09
Ответы с готовыми решениями:

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

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

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

30
 Аватар для Хедин
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 17:33
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
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.06.2014, 19:23
просто делегируй функцию
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

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
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
20.06.2014, 19:52
Лучший ответ Сообщение было отмечено 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  [ТС]
Issues, в вашем случае n() сможет вернуть только false, что не соответствует истине.
Цитата Сообщение от UnsKneD Посмотреть сообщение
просто делегируй функцию
Так же как Issues? Или как-то иначе?
0
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.06.2014, 20:06
Tulosba, вообще я с шарпом ветки перепутал. но было бы что то такое. но в таком случае return n(); никогда не выполнится.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.06.2014, 20:06
Думаю, если обернуть в функцию, то всё равно будет дублирующий код, для проверки возвращенного значения.
Если нет никаких критериев безопасности, может с си'шными прыжками попробовать поизвращаться?
0
 Аватар для Хедин
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 20:09
Tulosba, моя функция вам видимо совсем не понравилась
0
20.06.2014, 20:11

Не по теме:

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

0
20.06.2014, 20:12

Не по теме:

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

0
20.06.2014, 20:12

Не по теме:

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

0
 Аватар для Хедин
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 20:14
Croessmah, мне кажется, если бы код был более глобальным, было бы легче изменить функции по феншую
0
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
20.06.2014, 20:19
Может нам хотя бы задачу озвучат? а не голый код.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.06.2014, 20:20
Извращения?
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  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
может с си'шными прыжками попробовать поизвращаться?
Ну уж нет. Битоопства нам не надо
HighPredator, Хедин, надо ж было проверить код, прежде чем плюсы раздавать.
0
20.06.2014, 20:25

Не по теме:

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

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

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

Не по теме:

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

0
20.06.2014, 21:09

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2014, 21:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru