计算导入的2D数组

时间:2015-12-07 22:34:20

标签: c++ arrays initialization

之前我曾询问如何导出带有随机数的二维数组作为数据。

链接: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;
}

更新: 解决了&#34;未初始化的变量&#34;错误。

但现在得到&#34; -nan(ind)&#34;当我试图计算平均值时。

这是新代码......

#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;
}

2 个答案:

答案 0 :(得分:0)

你忘了在第二个for循环之前将sum设置为0。在UPDATE 2中,你仍然没有将总和设置为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";
}

答案 1 :(得分:0)

你给了这个:

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 分配给 AvgArray[y]。目前,您从未将任何值分配给AvgArray[]

cout << average << "\n";

就像Zsolt Marx给出的代码一样,你会希望将这一行放在两个for循环中较大的一行中。否则,如果您按照它的方式保留它,代码将仅显示计算的最后一列的平均值。