Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Photofenix
59 / 59 / 11
Регистрация: 18.11.2016
Сообщений: 467
Завершенные тесты: 1
#1

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

16.02.2017, 19:40. Просмотров 148. Ответов 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++):

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

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

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

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

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

Оптимизировать код - C++
Первое число входного потока - количество чисел Дальше идут те самые числа Надо найти кол-во пар чисел, для которых выполняется nums &lt;=...

9
Байт
Эксперт C
16569 / 10839 / 1651
Регистрация: 24.12.2010
Сообщений: 20,947
16.02.2017, 19:45 #2
Строчки 33-37 не проще ли заменить на
C++
1
cout << cool(V) << endl;
1
Photofenix
59 / 59 / 11
Регистрация: 18.11.2016
Сообщений: 467
Завершенные тесты: 1
16.02.2017, 19:48  [ТС] #3
Ну это просто относится к части программы Там будет параметры указывающие продолжительность импульса и общее время периода
0
nonedark2008
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,828
16.02.2017, 19:49 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
16569 / 10839 / 1651
Регистрация: 24.12.2010
Сообщений: 20,947
16.02.2017, 19:59 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
59 / 59 / 11
Регистрация: 18.11.2016
Сообщений: 467
Завершенные тесты: 1
16.02.2017, 20:11  [ТС] #6
Замудренно
0
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,601
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
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,828
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
59 / 59 / 11
Регистрация: 18.11.2016
Сообщений: 467
Завершенные тесты: 1
16.02.2017, 21:19  [ТС] #9
А зачем тут массивы?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,601
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
Привет! Вот еще темы с ответами:

Оптимизировать код - C++
Доброго времени суток, как можно оптимизировать код что бы он быстрее работал ? Дана последовательность из n чисел a1, a2,..., an. C...

Помогите оптимизировать код - C++
Помогите пожалуйста разобраться, хотелось бы чтобы это прграммка наконец-то заработала. Задача такая: Одномерный массив целых чисел,...

Оптимизировать и минимализировать код - C++
Cделал легкую прогу. Понимаю логики 0 в коде. Можете помочь оптимизировать код? А заодно и сделать код более минималистичным. #include...

Исправить и оптимизировать код - C++
нужна помощь по исправлению ошибок Написал программу она работает все отлично но препод сказал что она не очень красивая Помогите...


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

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

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