Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 1
Регистрация: 02.01.2018
Сообщений: 7

Что не так в программе вычисления скользящего среднего?

09.01.2018, 13:52. Показов 1956. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не считает, что не так не пойму.
Входные данные файл, одно число на строку. Строк должно быть больше чем окно.
Вычисляет скользящее среднее, берет окно из N чисел и по мере чтения потока
сдвигает окно на одно число, то есть входящее число прибавляет к сумме из N чисел и вычисляет среднеее, при каждом входящем новом числе с конца окна выбрасываем последний элемент.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <vector>
 
using namespace std;
 
    class MovingAverage
    {
        public:
        vector<int> vector_data;
        double moving_sum    ;
        double moving_average;
            MovingAverage &moving( int data, int period )
            {
                moving_sum     = 0;
                moving_average = 0;
                vector_data.push_back( data );
                if ( vector_data.size() == period )
                {
                for ( int i = 0; i < period; i++ )
                moving_sum += vector_data[i];
                moving_average = moving_sum / period;
                vector_data.erase( vector_data.begin() );
                }
                return *this;
            }
    };
int main(){
 
    string str_digit;
    int digit_data   = 0;
    int window_count = 30;
 
    ofstream fout("out_data.txt", ios::app);
    fout.precision(1);
     //``````````````````````````````````````````````````````````````````````````
    //  GET DATA
    ifstream file("data.txt");
    while( getline( file, str_digit ) ) {
    digit_data = stoi( str_digit );
     //``````````````````````````````````````````````````````````````````````````
    //  MA
    MovingAverage First;
    First.moving( digit_data, window_count );
     //``````````````````````````````````````````````````````````````````````````
    //  OUT
    fout                         <<"в–• "<< setw(5) << right <<
    digit_data                     <<"в–• "<< setw(8) << right <<
    First.moving_average         <<"в–• "<<
    endl;
    }
 
    fout.close();
    file.close();
 
    return 0;
}
Добавлено через 20 часов 59 минут
Загвоздка в классе, где ошибка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2018, 13:52
Ответы с готовыми решениями:

Фильтр скользящего среднего
Есть ли те кто знают про фильтр скользящего среднего ? Мы смогли реализовать фильтр, это как найти среднее арифметическое, но есть...

Реализация алгоритма скользящего среднего
У меня стоит задача, обработать тестовый файл с записанным на нём сигналом (1-столбец время,2-амплитуда), алгоритмом скользящего среднего....

Прогнозирование с помощью скользящего среднего
Помогите запрограммировать.

6
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
09.01.2018, 14:11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double moving_sum = 0 ;
........
{
                vector_data.push_back( data );
                if ( vector_data.size() > period )
                {
                  moving_sum -= vector_data[0];
                  vector_data.erase( vector_data.begin() );
                } 
                moving_sum += data;
                moving_average = moving_sum / vector_data.size();               
 
                return *this;
            }
Вектор для этих задач плохо подходит.
http://www.cplusplus.com/refer... tor/erase/
Because vectors use an array as their underlying storage, erasing elements in positions other than the vector end causes the container to relocate all the elements after the segment erased to their new positions. This is generally an inefficient operation compared to the one performed for the same operation by other kinds of sequence containers (such as list or forward_list).
0
2 / 2 / 1
Регистрация: 02.01.2018
Сообщений: 7
09.01.2018, 14:16  [ТС]
А по другому тогда подскажите решение пожалуста.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
09.01.2018, 14:22
Цитата Сообщение от qqsi Посмотреть сообщение
где ошибка?
В математической постановке задачи

Добавлено через 5 минут
Т.е. накапливаешь саму сумму. Когда накопишь N для следующего значения k-N-е из сумы вчитаешь , k-е добавляешь. если исходная последовательность живет в массиве то и хранить дополнительно вообще ничего не надо. Если же исходная последовательность приходит к примеру по сети по одному значению то для хранения лучше всего пользовать кольцевой буфер. Создатели STL правда не в курсе что этот такое и зачем он нужен.
0
2 / 2 / 1
Регистрация: 02.01.2018
Сообщений: 7
09.01.2018, 14:26  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В математической постановке задачи
Объясните подробнее пожалуйста.

Добавлено через 2 минуты
Пошел гуглить "кольцевой буфер"
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
09.01.2018, 14:35
Цитата Сообщение от qqsi Посмотреть сообщение
Объясните подробнее пожалуйста.
Ну написал же уже. Не надо каждый раз массив полностью суммировать. У тебя есть сумма накопленная по окну из N элементов. Для того чтобы сдвинуть окно счета на один элемент исходной последовательности не надо перевычислять всю сумму. можно вычесть из нее один элемент который вышел из окна и добавить один который вошел.
0
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
09.01.2018, 15:29
Все это реализовано в моем примере. Нужно только переделать под другой контейнер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2018, 15:29
Помогаю со студенческими работами здесь

Метод скользящего среднего (массив значений)
Доброе время суток! Такой вопрос, у меня есть массив, к примеру 20000x1. И мне надо его усреднить с помощью вышеуказанного метода. Нашел,...

Среднее значение. Метод скользящего среднего
Я может чего то не понимаю, но подскажите,пожалуйста. Имеется входящий сгенерированный сигнал, мне необходимо усреднить методом...

Вырезать данные из массива больше скользящего среднего
Все пытаюсь убрать данные из вектора много больше среднего, выбрала 50 предыдущих средних. Должо быть так: Усредняем первые 50...

Что в программе делает так, что процессор грузится на 100%?
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

Что в программе не так
При добавлении новой записи в БД и ее сохранение выходит ошибка, помогите плизз(сил больше нет(


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru