高分求解!!!关于C++矩阵!!!

dalang81 2003-04-24 01:49:32
可能是参数传输有错误!
请高手请教!!!

#include <stdio.h>
//#include <windows.h>
class Martix
{
int *O,x,y;
public:
Martix(int a,int b);
Martix(int &M,int a,int b);
Martix operator+(Martix Jz);
Martix operator-(Martix Jz);
Martix operator=(Martix Jz);
Martix operator*(Martix Jz);
void inv();
void Show();
};

Martix::Martix(int &M,int a,int b)
{
*O=*M;
x=a;
y=b;
}
Martix::Martix(int a,int b)
{
O=new int[a*b];
x=a;
y=b;
}

Martix Martix::operator+(Martix Jz)
{
Martix temp(x,y);
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
*(temp.O+i*y+j)=*(O+i*y+j)+*(Jz.O+i*Jz.y+j);
}
}
return temp;
}

Martix Martix::operator-(Martix Jz)
{
Martix temp(x,y);
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
*(temp.O+i*y+j)=*(O+i*y+j)-*(Jz.O+i*Jz.y+j);
}
}
return temp;
}

Martix Martix::operator=(Martix Jz)
{
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
*(O+i*y+j)=*(Jz.O+i*y+j);
}
}
return *this;
}

Martix Martix::operator*(Martix Jz)
{
Martix temp(x,Jz.y);
int i,j,k;
for (i=0;i<x ;i++ )
{
for (j=0;j<Jz.y ;j++ )
{
*(temp.O+i*y+j)=0;
for (k=0;k<y ;k++ )
{
*(temp.O+i*y+j)=*(O+i*y+k)**(Jz.O+k*y+j);
}
}
}
return temp;
}

void Martix::inv()
{
int temp;
int i,j;
for (i=0;i<x/2 ;i++ )
{
for (j=0;j<y/2 ;j++ )
{
temp=*(O+i*y+j);
*(O+i*y+j)=*(O+j*y+i);
*(O+j*y+i)=temp;
}
}
}


void Martix::Show()
{
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
printf("%d\t",*(&O+i*y+j));
}
printf("\n");
}
}

void main()
{
int A[6]={1,2,3,4,5,6};
int B[6]={4,7,5,8,6,9};
int C[6]={4,5,6,7,8,9};

Martix Ja(*A,2,3);
Martix Jb(*B,3,2);
Martix Jc(*C,2,3);

Martix J(2,3);
//J=Ja+Jc;
//J.Show();
Jc.inv();
Jc.Show();
printf("\n");
}
...全文
56 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxc2008 2003-04-26
  • 打赏
  • 举报
回复
up
anlifrank 2003-04-26
  • 打赏
  • 举报
回复
gz
TonyAmanda 2003-04-26
  • 打赏
  • 举报
回复
简直强劲,多少时间写出来的啊?
zhaoao 2003-04-26
  • 打赏
  • 举报
回复
up
ghtsao 2003-04-26
  • 打赏
  • 举报
回复
UP
dalang81 2003-04-24
  • 打赏
  • 举报
回复
这个程序,我想实现矩阵的重载和转置,但是始终传送参数有问题!
谢谢回答!
yizhenfeng 2003-04-24
  • 打赏
  • 举报
回复


这是你想要的输出吧:


1244984 2 3
1245008 3 2

Press any key to continue


程序修改后:


#include <iostream>
using namespace std;


class Martix
{
int *O,x,y;
public:
Martix(int a,int b);
Martix(int &M,int a,int b);
Martix operator+(Martix Jz);
Martix operator-(Martix Jz);
Martix operator=(Martix Jz);
Martix operator*(Martix Jz);
void inv();
void Show();
};

Martix::Martix(int &M,int a,int b)
{
O=&M;
x=a;
y=b;
}
Martix::Martix(int a,int b)
{
O=new int[a*b];
x=a;
y=b;
}

Martix Martix::operator+(Martix Jz)
{
Martix temp(x,y);
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
*(temp.O+i*y+j)=*(O+i*y+j)+*(Jz.O+i*Jz.y+j);
}
}
return temp;
}

Martix Martix::operator-(Martix Jz)
{
Martix temp(x,y);
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
*(temp.O+i*y+j)=*(O+i*y+j)-*(Jz.O+i*Jz.y+j);
}
}
return temp;
}

Martix Martix::operator=(Martix Jz)
{
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
*(O+i*y+j)=*(Jz.O+i*y+j);
}
}
return *this;
}

Martix Martix::operator*(Martix Jz)
{
Martix temp(x,Jz.y);
int i,j,k;
for (i=0;i<x ;i++ )
{
for (j=0;j<Jz.y ;j++ )
{
*(temp.O+i*y+j)=0;
for (k=0;k<y ;k++ )
{
*(temp.O+i*y+j)=*(O+i*y+k)**(Jz.O+k*y+j);
}
}
}
return temp;
}

void Martix::inv()
{
int temp;
int i,j;
for (i=0;i<x/2 ;i++ )
{
for (j=0;j<y/2 ;j++ )
{
temp=*(O+i*y+j);
*(O+i*y+j)=*(O+j*y+i);
*(O+j*y+i)=temp;
}
}
}


void Martix::Show()
{
int i,j;
for (i=0;i<x ;i++ )
{
for (j=0;j<y ;j++ )
{
printf("%d\t",*(&O+i*y+j));
}
printf("\n");
}
}

void main()
{
int A[6]={1,2,3,4,5,6};
int B[6]={4,7,5,8,6,9};
int C[6]={4,5,6,7,8,9};

Martix Ja(*A,2,3);
Martix Jb(*B,3,2);
Martix Jc(*C,2,3);

Martix J(2,3);
//J=Ja+Jc;
//J.Show();
Jc.inv();
Jc.Show();
printf("\n");
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧