0
我正在嘗試微調從.txt文件中獲取一系列值的程序,並創建一個運行平均值爲15的值。例如,它會讀取前15個值,在第15個數字旁邊輸出該平均值,然後讀取值2-16,取平均值並將其輸出到第16個數字旁邊。然後它將讀取值3-17,取平均值並將其輸出到第17個數字旁邊等等。不幸的是我沒有在我的計劃取得了很大的進展,但這裏是我的代碼至今:如何從.txt文件創建15個值的運行平均值?
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;
#define ARRAYSIZE 10000
#define OTHER 10000
int main(void)
{
//things needed
ifstream infile;
ofstream outfile;
double xArray[ARRAYSIZE];
double yArray[ARRAYSIZE];
double average;
double sum = 0;
double sum2=0;
double average2;
infile.open("data.txt");
if (infile.fail()) {
cout << "can't open data.txt\n";
exit(1);
}
for (int z = 0; z < 15; z++) {
infile >> xArray[ARRAYSIZE];
sum = xArray[ARRAYSIZE] + sum;
average = sum/(z+1);
}
outfile << xArray[ARRAYSIZE] << ", " << average << endl;
sum2 = sum;
//Running Average
for (int x = 0; x < 10000 && !infile.eof(); x++) {
infile >> yArray[OTHER];
sum2 = yArray[OTHER] + sum2;
average2 = sum2/(x + 16);
cout << yArray[OTHER] << ", " << average2 << endl;
}
}
正如你所看到的,我可以搞定一切的平均水平,但我無法將平均分成15價值段。
您的索引'xArray [ARRAYSIZE]'和'yArray [OTHER]'不正確。他們訪問數組末尾的一個元素。您編寫代碼的方式實際上並不需要數組,因此您可能會重新考慮自己在做什麼。如果您確實需要滑動窗口平均值,則需要對最近的15個樣本進行一些操作,但只能查看最近的樣本。 –
@JoeZ你能給我一個你的意思的代碼示例嗎?你會怎麼做沒有陣列? –
@HansPassant通過切換for循環,你的意思是什麼? –