Форум программистов, компьютерный форум CyberForum.ru

Как сгладить неоднородности в массиве - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните пожалуйста некоторые участки кода http://www.cyberforum.ru/cpp-beginners/thread1019391.html
Есть код (Идеально сбалансированное дерево): // #include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; struct node {
C++ Напечатать в виде таблицы все полученные значения для m DEV C++ !!! Десятичное целое число m переводится в двоичную систему счисления, разряды в этой записи переставляются в обратном порядке, и снова производится перевод в десятичную систему счисления. Напечатать в виде таблицы все полученные значения для m= 512, 513, 514,..., 1023. Начало таблицы имеет следующий вид: 512 1000000000 00000000011 http://www.cyberforum.ru/cpp-beginners/thread1019390.html
C++ Классы С++ (как описать методы и свойства к массиву)
Есть Класс Массив. помогите описать для него простой метод и свойство. Метод: Сумма или Среднее арифметическое элементов массива. Свойство: Возвращающее общее количество нечетных отрицательных элементов в массиве (доступное только для чтения) или Позволяющее уменьшить значение всех элементов массива на скаляр (доступное только для записи). -----
отличия dynamic_cast, static_cast и (object*) C++
хочу разобраться с преобразованием указателей в c++ Итак имеем указатель на какойто класс myclass *mc = new myclass(); myclass2 *mc2 = new myclass2(); myclass3 *mc3 = new myclass3(); 1) dynamic_cast
C++ Задание на двумерный массив с оформлением в виде функции http://www.cyberforum.ru/cpp-beginners/thread1019360.html
Среди столбцов заданной целочисленной матрицы, содержащей только такие элементы, которые по модулю не больше m, найти столбец с минимальным произведением элементов.
C++ char и char* разница Привет всем:) Изучаю С++ и вот застрял на задании где надо удалить символ из входного потока. В гугле нашел вот такое код( смотрите ниже ). Он работает удаляет нужный символ. Но я не могу понять чем отличается char от char*. Можно простое объяснение или простой пример программы, чтобы понять разницу. Заранее спасибо:) #include <iostream> using namespace std; char * del_char(const char... подробнее

Показать сообщение отдельно
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.11.2013, 16:01     Как сгладить неоднородности в массиве
Эммм проблема в том, что вы постоянно пересчитываете среднюю арифметическую, что является избыточным.
Необходимо и достаточно ее посчитать только раз, при последующем считывании данных достаточно вносить изменения.
Ща набросаю код на си

Добавлено через 32 минуты
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 <cstring>
bool read(char &data)
    {
        return 0; //Функция потокового считывания исходных данных
    }
    
    bool write(char data)
    {
         return 0;//функция потоковой записи результирующих данных 
    }
    
     
 
int main()
{
    long bufsize=15000;
    bool first=true;
    char *buf=new char[bufsize];
    char res=0;
    long average=0;
    long gran=bufsize/2;
    long start,end;
    start=0;
    end=0;
    char vol=0;
    //изначально заполняем окно
    while ((read(vol)==0)&&(end<bufsize))
    {
      average+=vol;
      end++;  
    }
    //получаем среднее итоговое значение для окна
    if (average>=gran) res=1;
    //если заполнили все окно
    if (end==15000)
    {
        //потоково анализируем данные
        while (read(vol)==0)
        {
            average+=vol; //добавляем новое значение к среднему
            average-=buf[start++]; //вычитаем первое считанное значение в буфере смещаем положение в буфере
            end++; //смещаем последнее считанное значение в буфере
            if (start>=bufsize) start=0;//корректируем индексы
            if (end>=bufsize) end=0;
            buf[end]=vol;//сохраняем новое значение в буфере как последнесчитанное
            if (average>=gran) res=1 ; //переопределяем результирующее среднее для окна
            else res=0; 
            write(res); //выводим в результат
        }
    }
    //сохряняем остаточный буфер согласно итоговому среднему значению
    for (;start!=end;start++) 
    {
        write(res);
        if (start>=bufsize) start=0;
    }
    return 0;
}
Добавлено через 1 минуту
навскидку так, но уже нашел один недостаток.
когда происходят изменения значений одно за другим на гране зоны 0.5. они не сглаживаются
хотя это все на вскидку без проб и компиляций
 
Текущее время: 04:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru