新手 - c++ 中的矩阵加法实现

发布于 2024-10-20 06:29:17 字数 1524 浏览 2 评论 0原文

你好,我正在尝试将 2 个矩阵的加法编程为一个新的矩阵(当我一步步运行该程序时就会这样做),但由于某种原因 VS 2010 在执行加法后给了我一个访问错误。

这是代码。

#include <iostream>
#include <cstdio>
#include <conio>
using namespace std;

class operatii 
{
    typedef double mat[5][5];
    mat ms,m1,m2;
    int x1,x2,y1,y2;
public:
    void preg();
    int cit_val();
    void cit_mat(int&,int&,double[5][5]);
    void suma();
    void afisare(int&,int&,double[5][5]);
};

void operatii::preg()
{
cit_mat(x1,y1,m1);
cit_mat(x2,y2,m2);
suma();
afisare(x1,y1,ms);
}

int operatii::cit_val()
{
int n;
cin>>n;
return n;
}

void operatii::cit_mat(int& x,int& y,double m[5][5])
{
char r;
cout<<"Matrice patratica? Y/N ";
cin>>r;
if ((r=='y')||(r=='Y'))
{
    cout<<"Numar linii si coloane: ";
    x=cit_val();
    y=x;
}
else
{   
    cout<<"Numar linii: ";
    x=cit_val();
    cout<<"Numar coloane: ";
    y=cit_val();
}
for (int i=1;i<=x;i++)
    for (int j=1;j<=y;j++)
        cin>>m[i][j];
}

void operatii::suma()
{
if ((x1==x2)&&(y1==y2))
    for (int i=1;i<=x1;i++)
        for (int j=1;i<=y1;j++)
            ms[i][j]=m1[i][j]+m2[i][j];
else cout<<"Eroare";
}

void operatii::afisare(int& x,int& y,double m[5][5])
{ 
cout<<endl;
for (int i=1;i<=x;i++)
{
    for (int j=1;j<=y;j++)
        cout<<m[i][j];
    cout<<endl;
}
}

void main()
{
operatii matrice;
matrice.preg();
system("PAUSE");
}

任何形式的帮助将不胜感激。

Hello i'm trying to program the addition of 2 matrices into a new one (and it does when i run the program step by step) but for some reason VS 2010 gives me an access error after it does the addition.

Here is the code.

#include <iostream>
#include <cstdio>
#include <conio>
using namespace std;

class operatii 
{
    typedef double mat[5][5];
    mat ms,m1,m2;
    int x1,x2,y1,y2;
public:
    void preg();
    int cit_val();
    void cit_mat(int&,int&,double[5][5]);
    void suma();
    void afisare(int&,int&,double[5][5]);
};

void operatii::preg()
{
cit_mat(x1,y1,m1);
cit_mat(x2,y2,m2);
suma();
afisare(x1,y1,ms);
}

int operatii::cit_val()
{
int n;
cin>>n;
return n;
}

void operatii::cit_mat(int& x,int& y,double m[5][5])
{
char r;
cout<<"Matrice patratica? Y/N ";
cin>>r;
if ((r=='y')||(r=='Y'))
{
    cout<<"Numar linii si coloane: ";
    x=cit_val();
    y=x;
}
else
{   
    cout<<"Numar linii: ";
    x=cit_val();
    cout<<"Numar coloane: ";
    y=cit_val();
}
for (int i=1;i<=x;i++)
    for (int j=1;j<=y;j++)
        cin>>m[i][j];
}

void operatii::suma()
{
if ((x1==x2)&&(y1==y2))
    for (int i=1;i<=x1;i++)
        for (int j=1;i<=y1;j++)
            ms[i][j]=m1[i][j]+m2[i][j];
else cout<<"Eroare";
}

void operatii::afisare(int& x,int& y,double m[5][5])
{ 
cout<<endl;
for (int i=1;i<=x;i++)
{
    for (int j=1;j<=y;j++)
        cout<<m[i][j];
    cout<<endl;
}
}

void main()
{
operatii matrice;
matrice.preg();
system("PAUSE");
}

Any kind of help would be apreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冬天的雪花 2024-10-27 06:29:17

C++ 中的数组是从 0 开始的。

for (somevar=1; somevar<=something) 的各种变体更改为 for (somevar=0; somevar

数组,它会覆盖堆栈返回地址,导致返回到不可执行的代码,再次导致访问冲突。

另外,

for (int j=1;i<=y1;j++)

我认为你想在这里使用 j 而不是 i 。如果您使用比“i”和“j”更长且更独特的变量名称,例如“Line”和“Column”,则此类错误更容易看到

Arrays are 0-based in c++.

Change your various variants of for (somevar=1; somevar<=something) to for (somevar=0; somevar<something)

You're writing past the end of your arrays, which overwrites stack return address, leading to a return to nonexecutable code, again leading to an access violation.

Also,

for (int j=1;i<=y1;j++)

I think you want to use j not i here. Such errors are much easier to see if you use longer and more distinct variable names than "i" and "j", such as e.g. "Line" and "Column"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文