Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 502
Завершенные тесты: 1
#1

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

16.02.2017, 19:40. Просмотров 166. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2017, 19:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как оптимизировать код? (C++):

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

Как оптимизировать код
Доброй ночи господа у меня к вам такая просьба как можно упростить данный код?...

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

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

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

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

9
Байт
Эксперт C
17777 / 11802 / 2453
Регистрация: 24.12.2010
Сообщений: 23,728
16.02.2017, 19:45 #2
Строчки 33-37 не проще ли заменить на
C++
1
cout << cool(V) << endl;
1
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 502
Завершенные тесты: 1
16.02.2017, 19:48  [ТС] #3
Ну это просто относится к части программы Там будет параметры указывающие продолжительность импульса и общее время периода
0
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
16.02.2017, 19:49 #4
Лучший ответ Сообщение было отмечено 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
17777 / 11802 / 2453
Регистрация: 24.12.2010
Сообщений: 23,728
16.02.2017, 19:59 #5
Лучший ответ Сообщение было отмечено 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
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 502
Завершенные тесты: 1
16.02.2017, 20:11  [ТС] #6
Замудренно
0
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
16.02.2017, 20:46 #7
Как альтернатива:
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
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
16.02.2017, 20:58 #8
MrGluck, если уж хочется без ветвлений, то лучше так:
C++
1
2
3
4
int cool(int V) {
    int a = V % 100;
    return V - a + (a >= 40) * 50 + (a > 60) * 50;
}
2
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 502
Завершенные тесты: 1
16.02.2017, 21:19  [ТС] #9
А зачем тут массивы?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
16.02.2017, 22:08 #10
Хотелось сделать таблицу переходов, хотя конкретно для данного случая, она не даст сильного профита.

Добавлено через 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
16.02.2017, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2017, 22:08
Привет! Вот еще темы с решениями:

Наследование классов как можно оптимизировать код и условие
Создал два класса родительский монстр и наследный демон. у демона появляется...

Оптимизировать код
Первое число входного потока - количество чисел Дальше идут те самые числа...

Оптимизировать код
Доброго времени суток, как можно оптимизировать код что бы он быстрее работал ?...

Нужно оптимизировать код
Вобщем код не принемает сайт, немного нагружает и по времени не проходит ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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