2015-06-12 2 views
1

У меня есть программа, которая отображает одно случайное число в файле.Отобразить обновленное среднее случайных чисел в файле

#include <iostream> 
#include <fstream> 
#include <random> 


using namespace std; 

int main() { 

    std::ofstream file("file.txt",std::ios_base::app); 

    int var = rand() % 100 + 1; 

     file<<var ; 


     return 0; 

} 

Результаты после 4 проб:

1,2 2,20 3,40 1,88 

Я ищу не показывать номера. но только там обновляется среднее значение после каждой попытки. Есть ли способ вычислить среднее значение поэтапно?

Внутри файл должен существовать только среднее значение:

К примеру первого испытания:

1.2 

Второе испытание показывает среднее значение в файле (1,2 + 2,2)/2

1.7 
+1

@ Ник, вы правы, мои плохие. Это было неправильно, потому что я забыл умножить oldAvg со старым счетом. Из-за этого вся формула ошибочна. Я удалил его –

ответ

0

Несмотря на то, что это какое-то странное, что вы пытаетесь сделать, и я уверен, что есть лучший способ сделать это, вот как вы можете это сделать:

float onTheFlyAverage() 
{ 
    static int nCount=0; 
    float avg, newAvg; 

    int newNumber = getRandomNum(); 
    nCount++; //increment the total number count 
    avg = readLastAvgFromFile(); //this will read the last average in your file 
    newAvg = avg*(nCount-1)/nCount+ (float)(newNumber)/nCount; 

    return newAvg; 
} 

Если по каким-то причинам вы хотите сохранить среднее значение в файле, который вы предоставляете в качестве входных данных для своей программы, и рассчитывать, что он будет продолжать усреднять цифры для вас (что-то вроде функции остановки и продолжения), вам нужно будет сохранить/загрузить общее число в файл, а также средний.

Но если вы сделаете это за один раз, это должно сработать. ИМХО это далеко не лучший способ сделать это - но там у вас есть :)

ПРИМЕЧАНИЕ: есть деление на 0 угловое я, о котором я не заботился; Я оставлю это до вас.

0

Вы можете использовать некоторую простую математику для вычисления средних значений increme ntally. Однако вам нужно подсчитать, сколько значений способствует среднему значению.

Предположим, у вас есть n номера со средним значением m. Ваш следующий номер х способствует среднему следующим образом:

м = (тп + х)/(п + 1)

0

Это плохо для производительности, чтобы разделить, а затем умножить среднее назад , Я предлагаю вам хранить сумму и номер.

(pseudocode) 
// these variables are stored between function calls 
int sum 
int n 

function float getNextRandomAverage() { 
    int rnd = getOneRandom() 
    n++; 
    sum += rnd; 
    float avg = sum/n 
    return avg 
} 

function writeNextRandomAverage() { 
    writeToFile(getNextRandomAverage()) 
} 

Также мне кажется странным, что ваш метод закрывает файл. Как он знает, что он должен закрыть его? Что делать, если файл следует использовать позже? (Скажем, последовательное использование этого метода).

+1

выглядит правильно, хотя сумма и n должны быть инициализированы до 0.;) –

+1

@HaukeS в моих псевдокодовых переменных автоматически инициализируется;) –

+1

Конечно, компиляторы псевдокода всегда делают это :) –

Смежные вопросы