使用数组乘矩阵



这是我一直在努力的任务。基本上我有核心思想和代码在工作顺序。但问题是,我做的方法与说明不同。

因此,为了将矩阵相乘,我事先询问了数组的维度(行,列)。然后我将再次请求数组的值

但是我想做的是简单地输入数组的值,并根据输入的整数数量自动找到数组的维度。但是我不知道怎么做,因为我记得我的老师说过不能将数组设置为变量值或类似的东西。

//what I'd like to be able to do
Enter the first matrix:
1 2 3
4 5 6
Enter the second matrix:
5 6
7 8
9 0
// what I am currently doing
#include<iostream>
using namespace std;
int main()
{
int l,m,z,n;
int matrixA[10][10];
int matrixB[10][10];
int matrixC[10][10];
cout<<"enter the dimension of the first matrix"<<endl;
cin>>l>>m;
cout<<"enter the dimension of the second matrix"<<endl;
cin>>z>>n;
if(m!=z||z!=m){
cout<<"error in the multiblication enter new dimensions"<<endl;
cout<<"enter the dimension of the first matrix"<<endl;
cin>>l>>m;
cout<<"enter the dimension of the second matrix"<<endl;
cin>>z>>n;
}
else{
cout<<"enter the first matrix"<<endl;
for(int i=0;i<l;i++){
for(int j=0;j<m;j++){
     cin>>matrixA[i][j];
     }
     }
cout<<"enter the second matrix"<<endl;
for(int i=0;i<z;i++){
for(int j=0;j<n;j++){
    cin>>matrixB[i][j];
}
}
for(int i=0;i<l;i++){
for(int j=0;j<n;j++){
        matrixC[i][j]=0;
        for(int k=0;k<m;k++){
matrixC[i][j]=matrixC[i][j]+(matrixA[i][k] * matrixB[k][j]);
}
}
}
cout<<"your matrix is"<<endl;
for(int i=0;i<l;i++){
for(int j=0;j<n;j++){
cout<<matrixC[i][j]<<" ";
}
cout<<endl;
}
}
//system("pause");
return 0;
}

不能声明具有运行时维度的数组(在C语言中称为变长数组,在C语言中是允许的),该维度必须在编译时已知。解决方案是使用std::vector

这样的标准容器。
std::vector<std::vector<int>> matrix(M, std::vector<int>(N)); // M x N 

或使用动态数组

int** matrix = new int*[M]; // allocate pointers for rows
for(size_t i = 0; i < N; ++i)
    matrix[i] = new int[N]; // allocate each row

那么不要忘记在程序结束时删除它们

for(size_t i = 0; i < N; ++i)
    delete[] matrix[i];
delete[] matrix;

您应该更喜欢std::vector方法,因为您不需要处理内存分配等问题。

从您的代码行来看,您似乎想要求用户输入矩阵1的列和矩阵2的行的正确值。你所使用的是一个if语句,它只会运行一次。如果你的"m"one_answers"z"的值在第一次输入时不相等,那么你将永远无法进入代码的else部分,因为你已经声明了其他代码来输入和相乘矩阵。

为了检查"m"one_answers"z"的值是否相等,可以使用while循环或do while循环。

while(m!=z)
{cout<<"enter the value m and z";`
cin>>m>>z;
}

除此之外,最好使用l,m,z,n作为静态成员来节省内存。

如果你想声明一个你想要的维度的矩阵,那么你可以这样做。

首先,要求用户输入矩阵的维数。然后,当输入正确的尺寸后,您应该能够制作所需尺寸的矩阵。以下是我想说的:

cout<<"enter the values of l and m";
cin>>l>>m;
cout<<"enter the values of z and n";
cin>>z>>n;
int array1[l][m];
int array2[z][n];

因此,您可以轻松地输入所需矩阵的维度。

相关内容

  • 没有找到相关文章

最新更新