从导入的二维数组计算平均值
Posted
技术标签:
【中文标题】从导入的二维数组计算平均值【英文标题】:Calculating average from imported 2D array 【发布时间】:2015-12-07 22:34:19 【问题描述】:之前我问过如何以随机数作为数据导出二维数组。
链接:Converting 2D array to text using c++ functions
现在我正在尝试编写一个单独的程序来计算该数组每一列的平均值。
但现在我遇到了“未初始化变量”的问题,我很确定这些变量已初始化。
不太确定从这里做什么。任何帮助将不胜感激!
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main ()
string Data, FileName;
int row, col, x, y;
float Matrix[50][50], sum, average;
cout << "Enter the name you gave the matrix file.\n";
cout << "(DO NOT INCLUDE ANY SPACES OR EXTENSIONS!)\n";
cin >> FileName;
FileName = "C:\\Users\\Public\\Documents\\" + FileName + ".ascii";
ifstream Fin(FileName);
if (Fin.is_open())
row=0;
while(!Fin.eof())
getline(Fin, Data);
stringstream ss(Data);
col=0;
while(ss >> Matrix[row][col])
col++;
row++;
Fin.close();
else
cout << "Unable to open file";
for (int y = 0; y < col; y++)
for (int x = 0; x < row; x++)
sum = sum + Matrix[x][y];
average = sum / row;
cout << average << " for column " << col << "\n";
system("pause");
return 0;
更新: 解决了“未初始化的变量”错误。
但是当我尝试计算平均值时,现在得到“-nan(ind)”。
这是新代码...
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main ()
string Data, FileName;
int row, col;
float Matrix[50][50], sum, average;
sum = 0;
cout << "Enter the name you gave the matrix file.\n";
cout << "(DO NOT INCLUDE ANY SPACES OR EXTENSIONS!)\n";
cin >> FileName;
FileName = "C:\\Users\\Public\\Documents\\" + FileName + ".ascii";
ifstream Fin(FileName);
if (Fin.is_open())
row=0;
while(!Fin.eof())
getline(Fin, Data);
stringstream ss(Data);
col=0;
while(ss >> Matrix[row][col])
col++;
row++;
Fin.close();
else
cout << "Unable to open file";
for (int y = 0; y < row; y++)
for (int x = 0; x < col; x++)
sum = sum + Matrix[x][y];
average = sum / col;
cout << average << "\n";
system("pause");
return 0;
更新 2: 我似乎只能得到第一列的平均值。无法真正弄清楚如何重复此步骤。我尝试过使用 do 和 for 循环,但这给我带来了一堆错误并且失去了我得到的唯一平均值。
如果有人想看看,请注意它非常混乱......
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main ()
string Data, FileName;
int row, col;
float Matrix[50][50], sum, average;
sum = 0;
cout << "Enter the name you gave the matrix file.\n";
cout << "(DO NOT INCLUDE ANY SPACES OR EXTENSIONS!)\n";
cin >> FileName;
FileName = "C:\\Users\\Public\\Documents\\" + FileName + ".ascii";
ifstream Fin(FileName);
if (Fin.is_open())
row=0;
while(!Fin.eof())
getline(Fin, Data);
stringstream ss(Data);
col=0;
while(ss >> Matrix[row][col])
col++;
row++;
Fin.close();
else
cout << "Unable to open file";
double AvgArray[50];
for (int y = 0; y < 50; y++)
for (int x = 1; x < 50; x++)
if (Matrix[x][y]<0)
break;
sum = sum + Matrix[x][y];
average = sum / x;
if (Matrix[y][y]<0)
break;
average = AvgArray[y];
cout << average << "\n";
system("pause");
return 0;
【问题讨论】:
-nan(ind) 通常是浮点数除以零的结果。while(!Fin.eof())
几乎总是错误的:***.com/questions/5605125/…
【参考方案1】:
您忘记在第二个 for 循环之前将 sum 设置为 0。在 UPDATE 2 中,您仍然没有将 sum 设置为 0!?
在第一个“for”之后和第二个之前...在开始添加列的总和之前...
喜欢这个
for (int y = 0; y < col; y++)
sum = 0;
for (int x = 0; x < row; x++)
sum = sum + Matrix[x][y];
average = sum / row;
cout << average << " for column " << y << "\n";
【讨论】:
谢谢。才发现的。但它仍然不会计算列的平均值。试图看看我还做错了什么。【参考方案2】:你给了这个:
for (int y = 0; y < 50; y++)
for (int x = 1; x < 50; x++)
if (Matrix[x][y]<0)
break;
sum = sum + Matrix[x][y];
average = sum / x;
if (Matrix[y][y]<0)
break;
average = AvgArray[y];
在这部分代码中,您似乎正在尝试计算每一列中每一行的平均值(因为您将 average = sum / x;
放在两个 for
循环中。)我建议计算总和整个列之前计算平均值,以节省代码/时间。此外,您还输入了average = AvgArray[y];
。假设您尝试用每列的平均值填充此数组,则您需要将 average
to AvgArray[y]
分配。目前,您从不为 AvgArray[]
分配任何值。
cout << average << "\n";
就像 Zsolt Marx 给出的代码一样,您需要将此行放在两个 for
循环中较大的一个中。否则,如果您保持原样,代码将仅显示计算的最后一列的平均值。
【讨论】:
以上是关于从导入的二维数组计算平均值的主要内容,如果未能解决你的问题,请参考以下文章