C++ 如何从.txt文件创建15个运行平均值?

C++ 如何从.txt文件创建15个运行平均值?,c++,arrays,average,file-io,C++,Arrays,Average,File Io,我正在尝试微调一个程序,该程序从.txt文件中获取一系列值,并创建15个值的运行平均值。例如,它将读取前15个值,在第15个数字旁边输出此平均值,然后读取值2-16,取平均值并在第16个数字旁边输出。然后它将读取值3-17,取平均值并将其输出到第17个数字旁边,依此类推。不幸的是,我的计划没有取得多大进展,但以下是我迄今为止的代码: #include "stdafx.h" #include <iostream> #include <fstream> #include &l

我正在尝试微调一个程序,该程序从.txt文件中获取一系列值,并创建15个值的运行平均值。例如,它将读取前15个值,在第15个数字旁边输出此平均值,然后读取值2-16,取平均值并在第16个数字旁边输出。然后它将读取值3-17,取平均值并将其输出到第17个数字旁边,依此类推。不幸的是,我的计划没有取得多大进展,但以下是我迄今为止的代码:

#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;
    }
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#定义数组化10000
#定义其他10000个
内部主(空)
{
//需要的东西
河流充填;
出流孔的直径;
双X阵列[阵列化];
双亚雷[排列];
双倍平均;
双和=0;
双sum2=0;
双平均值2;
infle.open(“data.txt”);
if(infle.fail()){
cout>xArray[ARRAYSIZE];
sum=xArray[ARRAYSIZE]+sum;
平均值=总和/(z+1);
}

UpField我不想只给你工作代码。但是为了让你不被困,考虑下面的方法:

  • 声明一个正好包含15个元素的数组
  • 将总和初始化为0
  • 循环所有传入元素,执行以下操作:
  • 为第一个元素保留一个从0开始的索引值
    i
    ,并从那里向上计数
  • 如果您看到的元素超过15个,请从总和中减去数组位置
    i%15
    处的元素。这将从从窗口滑出的滚动总和中删除元素
  • 从文件中读取一个新元素
  • 将新元素添加到总和中。这会在元素滑入窗口时将其添加到滚动总和中
  • 将新元素存储在数组位置
    i%15
  • 如果您看到了15个或更多元素,请将移动平均值输出为
    sum/15.0
  • 移动平均的概念是只对窗口中的元素进行平均。数组跟踪窗口

    使用上述算法,总和跟踪窗口中元素的总和。向窗口中添加元素时,将其添加到总和中。从窗口中删除元素时,将其从总和中删除


    移动平均值,只是窗口大小除以的总和。

    < P>我不想只给你工作代码。但是为了让你不被困,考虑下面的方法:

  • 声明一个正好包含15个元素的数组
  • 将总和初始化为0
  • 循环所有传入元素,执行以下操作:
  • 为第一个元素保留一个从0开始的索引值
    i
    ,并从那里向上计数
  • 如果您看到的元素超过15个,请从总和中减去数组位置
    i%15
    处的元素。这将从从窗口滑出的滚动总和中删除元素
  • 从文件中读取一个新元素
  • 将新元素添加到总和中。这会在元素滑入窗口时将其添加到滚动总和中
  • 将新元素存储在数组位置
    i%15
  • 如果您看到了15个或更多元素,请将移动平均值输出为
    sum/15.0
  • 移动平均的概念是只对窗口中的元素进行平均。数组跟踪窗口

    使用上述算法,总和跟踪窗口中元素的总和。向窗口中添加元素时,将其添加到总和中。从窗口中删除元素时,将其从总和中删除


    那么,移动平均值就是总和除以窗口大小。

    你的指数
    xArray[ARRAYSIZE]
    yArray[OTHER]
    不正确。它们访问数组末尾的一个元素。实际上,按照您编写代码的方式,您根本不需要数组,因此您可能会重新思考自己在做什么。如果您确实想要滑动窗口平均值,则需要对最后15个示例执行某些操作,但您只查看最新的示例。@JoeZ你能给我一个代码示例来说明你的意思吗?没有数组你会怎么做?@HansPassant你切换for循环到底是什么意思?我不是说没有数组你也可以。我是说你的代码没有使用它声明的数组,因为它总是读写同一个元素。这表明你在做一些事情你的索引
    xArray[ARRAYSIZE]
    yArray[OTHER]
    不正确。它们访问数组末尾的一个元素。实际上,按照您编写代码的方式,您根本不需要数组,因此您可能会重新思考自己在做什么。如果您确实想要滑动窗口平均值,则需要对最后15个示例执行某些操作,但您只查看最新的示例。@JoeZ你能给我一个代码示例来说明你的意思吗?没有数组你会怎么做?@HansPassant你切换for循环到底是什么意思?我不是说没有数组你也可以。我是说你的代码没有使用它声明的数组,因为它总是读写同一个元素。这表明你在做一些事情荣。