矩阵的标量积,C ++

时间:2015-01-03 19:53:58

标签: c++ matrix

这是我第一次使用C ++,看起来我遇到了一些困难。我的任务有以下说法:&#39;如果矩阵X的行数和列数相同(即X是方形矩阵),则找到主对角线元素的标量积,其中元素来自随机行K(K <= N)。&#39;

 #include <iostream.h>
int main(){
    int M,N,i,j;
    int X[20][20];
    do{cout<<"\n Vavedete stoinost za M:"<<endl;cin>>M;}
    while(M<2||M>20);
    do{cout<<"\n Vavedete stoinost za N:"<<endl;cin>>N;}
    while(N<2||N>20);
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
        {cout<<"\n Vavedete element ot X["<<i<<"]["<<j<<"]="<<endl;cin>>X[i][j];}
        //usl.1.
        int k;
        if (i==j){
        cout<<"\n ELementite na koi red da se umnojat s tezi na glavniq diagonal:"<<endl;cin>>k;
        k=k-1;
        int K[20];
        for(i=0;i<M;i++)
        for(j=0;j<M;j++){
            int SP=1;
            for(k=0;k<M;k++)
            SP+=X[i][j]*X[k][j];
            cout<<SP<<endl;}
        return 0;}
        }

2 个答案:

答案 0 :(得分:0)

您的算法有几点:

  • 如果i == j,您可能不需要执行以下循环for(i=0;i<M;i++) for(j=0;j<M;j++){}来计算最终总和(请参阅我在O(N)中执行的示例)

  • 输入行号K后,我不明白为什么要增加K

  • 在输入矩阵中的所有值之前,我可能先检查M == N

在我的相应代码下面:

#include <iostream.h>
int main(){
    int M,N,i,j;
    int X[20][20];

    do{cout<<"\n Vavedete stoinost za M:"<<endl;cin>>M;}
    while(M<2||M>20);

    do{cout<<"\n Vavedete stoinost za N:"<<endl;cin>>N;}
    while(N<2||N>20);

    //usl.1.
    int k;
    if (M==N)
    {
        for(i=0;i<M;i++)
            for(j=0;j<N;j++)
                {cout<<"\n Vavedete element ot X["<<i<<"]["<<j<<"]="<<endl;cin>>X[i][j];}

        cout<<"\n ELementite na koi red da se umnojat s tezi na glavniq diagonal:"<<endl;cin>>k;
        k=k-1;

        int SP=1;
        for(i=0;i<M;i++)
        {
            SP+=X[i][i]*X[k][i];
            cout<<SP<<endl;
        }

        return 1;
    }
    return 0;
}

答案 1 :(得分:0)

如果你想将对角线与随机行K的元素相乘,那么为什么:

SP+=X[i][j]*X[k][j];

这只是将每个条目与镜像位置(沿对角线)的条目相乘。 这不是你所描述的。

您想要的是以下(伪)

k= random row number
for(column: columns){
  total += X(column,column)*X(row,column)
}

不要把你的桌子称为'X'......不要。