Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
63 / 63 / 39
Регистрация: 18.11.2016
Сообщений: 562

Как оптимизировать код?

16.02.2017, 19:40. Показов 1222. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такой код, написанный для микроконтроллера импульсного блока питания.
Просто интересно мнение, что можно поменять и изменить для более высокой скорости и уменьшения кода.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cmath>
 
 
    int cool (int V){
        double cooler = (double) V; // Преобразуем вещественное значение значение с плавающей точкой.
        cooler/=100; // Делим число на 100.
 
        double a, b; // Временные переменные
        a = modf(cooler, &b); // Отделяем дробную часть от целой.
 
        if (a < 0.4){
            a = 0;
        }
        else if (a >= 0.4 && a <= 0.6){
            a = 0.5;
        }
        else if (a > 0.6){
            a = 1;
        }
 
        b+=a;
        b*=100;
        return b;
 
    }
 
    int main (){
 
        int V (1000); // Значение, которое пришло с АЦП микроконтроллера.
    
 
        switch (cool(V)){
        case 900: std::cout << "900" << std::endl; break;
        case 950: std::cout << "950" << std::endl; break;
        case 1000: std::cout << "1000" << std::endl; break;
        }
 
        system ("pause");
        return 0;
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2017, 19:40
Ответы с готовыми решениями:

Как оптимизировать код?
Как оптимизировать код, чтобы работала программа быстрее #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using...

Как оптимизировать код
Доброй ночи господа у меня к вам такая просьба как можно упростить данный код? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Как можно оптимизировать код?
#include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; using namespace std; int main() { int n, temp; cin&gt;&gt;n; ...

9
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.02.2017, 19:45
Строчки 33-37 не проще ли заменить на
C++
1
cout << cool(V) << endl;
1
63 / 63 / 39
Регистрация: 18.11.2016
Сообщений: 562
16.02.2017, 19:48  [ТС]
Ну это просто относится к части программы Там будет параметры указывающие продолжительность импульса и общее время периода
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
16.02.2017, 19:49
Лучший ответ Сообщение было отмечено Photofenix как решение

Решение

Photofenix, а что мешает работать с целыми числами?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int cool(int V) {
    int a = V % 100;
    V -= a;
    if (a < 40)
        a = 0;
    else if (a >= 40 && a <= 60)
        a = 50;
    else
        a = 100;
 
    return V + a;
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.02.2017, 19:59
Лучший ответ Сообщение было отмечено Photofenix как решение

Решение

Photofenix, может быть вам это покажется извращением, но код nonedark2008, можно переписать так
C++
1
2
3
4
5
int M[] ={40, 60 };
...
for(i=0; i<2; i++)
  if (a < M[i]) break;
a = 50*i;
Цитата Сообщение от Photofenix Посмотреть сообщение
интересно мнение,
- Получите
2
63 / 63 / 39
Регистрация: 18.11.2016
Сообщений: 562
16.02.2017, 20:11  [ТС]
Замудренно
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.02.2017, 20:46
Как альтернатива:
C++
1
2
3
4
5
6
int cool2(const int V)
{
    static const int A[10] = { 0, 0, 0, 0, 1, 1, 2, 2, 2, 2 };
    int a = V % 100;
    return V - a + 50 * (A[a / 10 % 10] - (a == 60));
}
Добавлено через 1 минуту
Если пограничный случай с 60 отнести к другому диапазону, то в общем-то неплохо выходит.
1
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
16.02.2017, 20:58
MrGluck, если уж хочется без ветвлений, то лучше так:
C++
1
2
3
4
int cool(int V) {
    int a = V % 100;
    return V - a + (a >= 40) * 50 + (a > 60) * 50;
}
2
63 / 63 / 39
Регистрация: 18.11.2016
Сообщений: 562
16.02.2017, 21:19  [ТС]
А зачем тут массивы?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.02.2017, 22:08
Хотелось сделать таблицу переходов, хотя конкретно для данного случая, она не даст сильного профита.

Добавлено через 7 минут
Если переместить пограничный случай с 60, то будет так:
C++
1
2
3
4
5
6
int cool2(const int V)
{
    static const int A[10] = { 0, 0, 0, 0, 50, 50, 100, 100, 100, 100 };
    int a = V % 100;
    return V - a + A[a / 10];
}
Добавлено через 21 минуту
Немного бредово, но работать должно быстро:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int cool2(const int V)
{
    static constexpr int A[100] = {
          0,  -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, -29,
        -30, -31, -32, -33, -34, -35, -36, -37, -38, -39,
         10,   9,   8,   7,   6,   5,   4,   3,   2,   1,
          0,  -1,  -2,  -3,  -4,  -5,  -6, - 7,  -8,  -9,
        -10,  39,  38,  37,  36,  35,  34,  33,  32,  31,
         30,  29,  28,  27,  26,  25,  24,  23,  22,  21,
         20,  19,  18,  17,  16,  15,  14,  13,  12,  11,
         10,   9,   8,   7,   6,   5,   4,   3,   2,   1
    };
    return V + A[V % 100];
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2017, 22:08
Помогаю со студенческими работами здесь

Как оптимизировать код, со множеством операторов if?
Можно ли сделать так, чтобы проверка обрабатывалась только тогда, когда нужно чтобы она проверила условие. while ( 1 ) { //...

Как можно оптимизировать данный код?
И... Ещё один вопрос: Дан участок кода С++: #include &lt;iostream&gt; #include &quot;Windows.h&quot; using namespace...

Можно как-то оптимизировать этот код?
#include &lt;iostream&gt; using namespace std; int main() { unsigned int num, trueNum, a, howMany, endwrite, fail; fail = 0; ...

Как оптимизировать данный код игры крестики нолики?
Привет всем! Я написал консольную игру &quot;Крестики нолики&quot;. Хочу посоветоваться как можно оптимизировать игру. Вот исходный код: ...

Наследование классов как можно оптимизировать код и условие
Создал два класса родительский монстр и наследный демон. у демона появляется значение разум и условие сила+жизни+разум&lt;=200. Силу и...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru