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

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

20.06.2014, 14:09. Показов 2881. Ответов 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru