使用c ++中的数组进行矩阵乘法

时间:2014-12-14 19:44:49

标签: c++ arrays matrix

我被赋予了创建代码以从2个.txt文件读取到2个5 * 5阵列的任务。我一直在检查各个部分的代码,看它是否有效,我将.txt文件中的数据存储到我的2个数组中没有问题,问题是我现在要将2个数组用作矩阵并将它们相乘创建一个3阵列/矩阵。我一直在网上和论坛上搜索如何做到这一点,我根据我发现的内容创建了下面的代码。我的代码看起来很合理(虽然我来到c ++时我是新手)但是当我尝试显示我的数组3时,我得到了奇怪的输出。

   using namespace std;
   #include<iostream>
   #include<fstream>
   #include<string>

int main ()
{   int count1,count2;
int i,j,m,n;
int myarray1[5][5];
int myarray2[5][5];
int myarray3[5][5];

string file1,file2,mystring1,mystring2;


cout<<"please enter the name of the first file"<<endl;
cin>>file1;
cout<<"please enter the name of the second file"<<endl;
cin>>file2;

ifstream inFile;
inFile.open(file1.c_str());
for (count1=0;count1<26;++count1)
{
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)


        {
            while (!inFile.eof())
                {
                    getline(inFile,mystring1,',');

                    int value1 = atoi(mystring1.c_str());
                    myarray1[i][j]=value1;
                    cout<<myarray1[i][j];


                }
        }
    }

}

system("pause");


inFile.close();
system("pause");
inFile.open(file2.c_str());
for (count2=0;count2<26;++count2)
{
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            while (!inFile.eof())
                {
                    getline(inFile,mystring2,',');

                    int value2 = atoi(mystring2.c_str());
                    myarray2[i][j]=value2;
                    cout<<myarray2[i][j];


                }
        }
    }

}
inFile.close();
system("pause");

for(m=0;m<5;m++)
{

    for(n=0;n<5;n++)
        {
            myarray3[m][n]=(myarray1[0][m]*myarray2[n][0])
                          +(myarray1[1][m]*myarray2[n][1])
                          +(myarray1[2][m]*myarray2[n][2])
                          +(myarray1[3][m]*myarray2[n][3])
                          +(myarray1[4][m]*myarray2[n][4]);

            cout<<myarray3[m][n]<<endl;
        }

system("pause");

}

这是我得到的输出:

please enter the name of the first file
C:\matrix1.txt
please enter the name of the second file
C:\matrix2.txt
1234554321234543212345432Press any key to continue . . .
Press any key to continue . . .
5678923412457892562112345Press any key to continue . . .
-1546188214
1030792152
1030792152
1030792152
1030792152
-1546188228
-858993456
-858993456
-858993456
-858993456
-1546188228
-858993456
-858993456
-858993456
-858993456
-1546188228
-858993456
-858993456

2 个答案:

答案 0 :(得分:0)

使用此文件从文件中获取输入。希望这可以工作

       ifstream inFile;
        inFile.open(file1.c_str());

        i=0; j=0;
        while (getline(inFile,mystring1))
        {

                int val=0;

                 for(int k=0; k<mystring1.size(); k++)
                 {

                     if(mystring1[k]==',')
                     {
                         myarray1[i][j++]=val;
                         val=0;
                         continue;
                     }
                     val =val*10+mystring1[k]-48;
                 }
                 myarray1[i][j++]=val;
                 i++;
                 j=0;
          }

      inFile.close();

答案 1 :(得分:0)

另一个答案已经解决了乘以矩阵的逻辑错误。我想指出我在阅读矩阵代码时遇到的问题。

你有:

for (count1=0;count1<26;++count1)
{
   for(i=0;i<5;i++)
   {
      for(j=0;j<5;j++)
      {
         while (!inFile.eof())
         {
            getline(inFile,mystring1,',');

            int value1 = atoi(mystring1.c_str());
            myarray1[i][j]=value1;
            cout<<myarray1[i][j];
         }
      }
   }
}

我不知道在哪里尝试使用外循环:

for (count1=0;count1<26;++count1)

如果您的文件中有足够的数据,您最终会从文件中读取26 x 5 x 5个数字。由于您的文件中只有5 x 5矩阵的数据,因此您可以完全删除外部循环。