社区
C++ 语言
帖子详情
用c++运算符重载写矩阵a+b=c,要输出c矩阵的内容,怎么写
qazws2
2003-11-10 03:48:45
用c++运算符重载写矩阵a+b=c,要输出c矩阵的内容,怎么写
...全文
262
7
打赏
收藏
用c++运算符重载写矩阵a+b=c,要输出c矩阵的内容,怎么写
用c++运算符重载写矩阵a+b=c,要输出c矩阵的内容,怎么写
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Andy84920
2003-11-18
打赏
举报
回复
另外:
/*
void TSMatrix_Add(TSMatrix A,TSMatrix B,TSMatrix &C)//三元组表示的稀疏矩阵加
法
{
C.mu=A.mu;C.nu=A.nu;C.tu=0;
pa=1;pb=1;pc=1;
for(x=1;x<=A.mu;x++) //对矩阵的每一行进行加法
{
while(A.data[pa].i<x) pa++;
while(B.data[pb].i<x) pb++;
while(A.data[pa].i==x&&B.data[pb].i==x)//行列值都相等的元素
{
if(A.data[pa].j==B.data[pb].j)
{
ce=A.data[pa].e+B.data[pb].e;
if(ce) //和不为0
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=ce;
pa++;pb++;pc++;
}
}//if
else if(A.data[pa].j>B.data[pb].j)
{
C.data[pc].i=x;
C.data[pc].j=B.data[pb].j;
C.data[pc].e=B.data[pb].e;
pb++;pc++;
}
else
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=A.data[pa].e
pa++;pc++;
}
}//while
while(A.data[pa]==x) //插入A中剩余的元素(第x行)
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=A.data[pa].e
pa++;pc++;
}
while(B.data[pb]==x) //插入B中剩余的元素(第x行)
{
C.data[pc].i=x;
C.data[pc].j=B.data[pb].j;
C.data[pc].e=B.data[pb].e;
pb++;pc++;
}
}//for
C.tu=pc;
}//TSMatrix_Add
void TSMatrix_Minus(TSMatrix A,TSMatrix B,TSMatrix &C)//三元组表示的稀疏矩阵
减法
{
C.mu=A.mu;C.nu=A.nu;C.tu=0;
pa=1;pb=1;pc=1;
for(x=1;x<=A.mu;x++) //对矩阵的每一行进行减法
{
while(A.data[pa].i<x) pa++;
while(B.data[pb].i<x) pb++;
while(A.data[pa].i==x&&B.data[pb].i==x)//行列值都相等的元素
{
if(A.data[pa].j==B.data[pb].j)
{
ce=A.data[pa].e-B.data[pb].e;
if(ce) //差不为0
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=ce;
pa++;pb++;pc++;
}
}//if
else if(A.data[pa].j>B.data[pb].j)
{
C.data[pc].i=x;
C.data[pc].j=B.data[pb].j;
C.data[pc].e=-B.data[pb].e;
pb++;pc++;
}
else
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=A.data[pa].e
pa++;pc++;
}
}//while
while(A.data[pa]==x) //插入A中剩余的元素(第x行)
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=A.data[pa].e
pa++;pc++;
}
while(B.data[pb]==x) //插入B中剩余的元素(第x行)
{
C.data[pc].i=x;
C.data[pc].j=B.data[pb].j;
C.data[pc].e=B.data[pb].e;
pb++;pc++;
}
}//for
C.tu=pc;
}//TSMatrix_Add
void TSMatrix_Minus(TSMatrix A,TSMatrix B,TSMatrix &C)//三元组表示的稀疏矩阵
减法
{
C.mu=A.mu;C.nu=A.nu;C.tu=0;
pa=1;pb=1;pc=1;
for(x=1;x<=A.mu;x++) //对矩阵的每一行进行减法
{
while(A.data[pa].i<x) pa++;
while(B.data[pb].i<x) pb++;
while(A.data[pa].i==x&&B.data[pb].i==x)//行列值都相等的元素
{
if(A.data[pa].j==B.data[pb].j)
{
ce=A.data[pa].e-B.data[pb].e;
if(ce) //差不为0
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=ce;
pa++;pb++;pc++;
}
}//if
else if(A.data[pa].j>B.data[pb].j)
{
C.data[pc].i=x;
C.data[pc].j=B.data[pb].j;
C.data[pc].e=-B.data[pb].e;
pb++;pc++;
}
else
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=A.data[pa].e
pa++;pc++;
}
}//while
while(A.data[pa]==x) //插入A中剩余的元素(第x行)
{
C.data[pc].i=x;
C.data[pc].j=A.data[pa].j;
C.data[pc].e=A.data[pa].e
pa++;pc++;
}
while(B.data[pb]==x) //插入B中剩余的元素(第x行)
{
C.data[pc].i=x;
C.data[pc].j=B.data[pb].j;
C.data[pc].e=-B.data[pb].e;
pb++;pc++;
}
}//for
C.tu=pc;
}//TSMatrix_Minus
typedef struct
{
int i,j;
int e;
}Triple;
typedef struct
{
Triple data[401];
int rpos[21];
int mu,nu,tu;
}RLSMatrix;
void TSMatrix_Mults(RLSMatrix A,RLSMatrix B,RLSMatrix &C)//三元组表示的稀疏矩阵
乘法
{
int arow,brow,ccol,tp,p,q,t;
int ctemp[401];
if(A.nu!=B.mu){Error=true;return;}
C.mu=A.mu;C.nu=B.nu;C.tu=0;
if(A.tu*B.tu!=0)
{
for(arow=1;arow<=A.mu;arow++)
{
memset(ctemp,0,sizeof(ctemp));
C.rpos[arow]=C.tu+1;
if(arow<A.mu)tp=A.rpos[arow+1];
else{tp=A.tu+1;}
for(p=A.rpos[arow];p<tp;++p)
{
brow=A.data[p].j;
if(brow<B.mu)t=A.rpos[brow+1];
else {t=B.tu+1;}
for(q=B.rpos[brow];q<t;++q)
{
ccol=B.data[q].j;
ctemp[ccol] += A.data[p].e*B.data[q].e;
}
}
for(ccol=1;ccol<B.nu;++ccol)
if(ctemp[ccol])
{
if(++C.tu>400)return;
C.data[C.tu].i=arow;
C.data[C.tu].j=ccol;
C.data[C.tu].e=ctemp[ccol];
}
}
}
}
*/
Andy84920
2003-11-18
打赏
举报
回复
/* 用三元组来存储稀耻矩陈 ,输入,输出,转置 */
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define MAXSIZE 100 /*假设非零元个数的最大值为100个 */
typedef int ElemType;
typedef struct
{
int i, j; /*该非零元行下标和列下标 */
ElemType e;
} Triple;
typedef struct
{
Triple data[MAXSIZE+1]; /*非零元三元组表,data[0]未用.*/
int mu, nu, tu; /*矩陈的行数,列数,非零元个数 */
} TSMatrix;
void CreateTSMatrix( TSMatrix *ptrMatrix);
void PrintTSMatrix( TSMatrix *ptrMatrix);
void FastTransposeTSMatrix( TSMatrix * ptrM1, TSMatrix * ptrM2); /*转置*/
int main(void)
{
TSMatrix M, N;
CreateTSMatrix( &M);
printf("This is the Matrix M: \n");
PrintTSMatrix( &M);
FastTransposeTSMatrix( &M, &N); /*N为M的转置矩陈*/
printf("The M Transpose to N : N like this: \n");
PrintTSMatrix( &N);
return 0;
}
/* 请输入如下格式:
6 7 8 -----行,列,非零元数个数
0 0 0 -----数组第一个元素不存值
1 2 12 -----第一个非零元素
1 3 9 -----第二个...
3 1 -3
3 6 14
4 3 24
5 2 18
6 1 15
6 4 -7
*/
void CreateTSMatrix( TSMatrix * ptrMatrix)
{
int i;
printf("Please Input the row col and non-0-number :\n ");
/*请输入行和列及非零元个数*/
while( scanf("%d%d%d",&ptrMatrix->mu,&ptrMatrix->nu,&ptrMatrix->tu) != 3)
printf("Please Input again:\n");
/* ptrMatrix->data[0] = {0,0,0} *未用的第一个元素自己输入0.0.0 */
printf("Please Input the Matrix Element:\n");
printf(" row-col-data:\n");
for (i=1 ; i <= ptrMatrix->tu; i++)
{
printf("[%3d ] : ",i);
scanf("%d%d%d",
&ptrMatrix->data[i].i,&ptrMatrix->data[i].j,&ptrMatrix->data[i].e);
}
printf("%d numbers be inputed.\n\n", ptrMatrix->tu);
}
void PrintTSMatrix( TSMatrix *ptrMatrix)
{
int k = 1;
int i,j;
assert( ptrMatrix->tu != 0);
for(i=1; i<=ptrMatrix->mu; i++)
{
for( j=1; j<=ptrMatrix->nu; j++)
{
if((ptrMatrix->data[k].i == i) && (ptrMatrix->data[k].j == j))
{
printf("%5d", ptrMatrix->data[k].e);
k++;
}
else printf("%5d",0);
}
printf("\n");
}
printf("\n");
}
/* 矩陈的快速转置*/
void FastTransposeTSMatrix( TSMatrix *ptrM1, TSMatrix *ptrM2)
{
int col, p, q, t;
int num[ptrM1->nu], cpot[ptrM1->nu];
ptrM2->mu = ptrM1->nu;
ptrM2->nu = ptrM1->mu;
ptrM2->tu = ptrM1->tu;
if( ptrM2->tu) {
for( col = 1; col <= ptrM1->nu; ++col) num[col] = 0;
/*求*ptrM1中每一列含非零元个数*/
for( t = 1; t <= ptrM1->tu; ++t) ++num[ptrM1->data[t].j];
cpot[1] = 1;
/*求第col列中第一个非零元在*ptrM2.data中的序列*/
for( col = 2; col <= ptrM1->nu; ++col)
cpot[col] = cpot[col-1] + num[col-1];
for( p = 1; p <= ptrM1->tu; ++p) {
col = ptrM1->data[p].j;
q = cpot[col];
ptrM2->data[q].i = ptrM1->data[p].j;
ptrM2->data[q].j = ptrM1->data[p].i;
ptrM2->data[q].e = ptrM1->data[p].e;
++cpot[col];
}
}
}
veky
2003-11-17
打赏
举报
回复
#include <iostream>
#include <stdlib.h>
using namespace std;
class RMB
{
public:
RMB(int b[3][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=b[i][j];
}
friend RMB operator +(const RMB& op1,const RMB& op2)
{
int i,j;
int s[3][3]={{1,2,3},{4,5,6},{7,8,9}};
RMB op3(s);
for (i=0;i<3;i++)
for(j=0;j<3;j++)
op3.a[i][j]=op1.a[i][j]+op2.a[i][j];
return op3;
}
void display()
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j]<<",";
cout<<endl;
}
}
private:
int a[3][3];
};
int main()
{
int s[3][3]={{1,2,3},{4,5,6},{7,8,9}};
RMB a(s),b(s),c(s);
c=a+b;
c.display();
system("pause");
}
看看这样可不可以啊?
laomai
2003-11-17
打赏
举报
回复
A::point operator + ( const point &op1, const point &op2)??
A::point根本就不是一个返回类型啊
qazws2
2003-11-10
打赏
举报
回复
我这程序有什么问题吗
#include <iostream.h>
#define N 3
int i,j;
int A[N][N],B[N][N],C[N][N];
class A
{
public:
point(){}
point (int i,int j){a=i;b=j;}
void showA()
{
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<A[i][j]<<endl;
}
}
void ShowB(){
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<B[i][j]<<endl;
}
}
void ShowC(){
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<C[i][j]<<endl;
}
}
A::point operator + ( const point &op1, const point &op2)
{
point c;
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
//c.a=op1.a+op2.a;
//c.b=op1.b+op2.b;
C[i][j]=A[i][j]+B[i][j];
}
return c;
}
private:
int a,b;
};
void main()
{
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
cin>>A[i][j];
}
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
cin>>B[i][j];
}
A aa;
aa.showA();
aa.showB();
aa.showC();
}
Meyer
2003-11-10
打赏
举报
回复
a+b=c
c++没有这种重载法吧
xingxing
2003-11-10
打赏
举报
回复
ArrayTest ArrayTest::operator ++ (const ArrayTest& a,const ArrayTest&& b)
{
int i, j;
ArrayTest c;
//add judgement of the valid
for(i = 0; i < rowscount; i++)
{
for(j = 0; j < colscount; j++)
{
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}
c++
运算符重载
矩阵
运算
"
c++
运算符重载
矩阵
运算"
c++
运算符重载
矩阵
运算是指在
c++
语言中对
矩阵
进行运算的操作,包括加、减、乘、转置、赋值等操作。这些操作都是通过重载运算符来实现的。 首先,我们需要定义一个Matrix类,该类有三个...
使用
C++
实现
矩阵
运算(
运算符重载
)
首先,我们要理解
C++
中的
运算符重载
。
运算符重载
允许我们在不同的上下文中为同一个运算符赋予不同的含义,这在处理自定义数据类型如
矩阵
时非常有用。例如,我们可以通过重载"+"运算符来实现
矩阵
的相加,重载"-...
类
运算符重载
设计定义一个二维方阵类 matrix。通过重载二元运算符“+”、“-”、“*”和一元运算符“~”, 来实现
矩阵
加、
矩阵
减、
矩阵
乘以及
矩阵
转置。
本节将详细讲解类
运算符重载
设计定义一个二维方阵类 matrix,通过重载二元运算符“+”、“-”、“*”和一元运算符“~”,来实现
矩阵
加、
矩阵
减、
矩阵
乘以及
矩阵
转置。 一、类
运算符重载
的概念 在
C++
中,类运算符...
C++
运算符重载
的课件
C++
运算符重载
的课件
C++
运算符重载
是
C++
程序设计中一个非常重要的概念,它允许用户自定义的数据类型以一种更简洁的方式工作,使得代码更加简洁易读。
运算符重载
使得用户可以定义自己的运算符,以便更好地描述问题...
c++
运算符重载
矩阵
运算.pdf
C++
运算符重载
矩阵
运算 本文档主要介绍了使用
C++
语言对
矩阵
类Matrix进行
运算符重载
,实现
矩阵
的加、减、乘、转置、赋值运算。通过对Matrix类的设计和实现,实现了
矩阵
的基本运算操作。 一、问题分析和任务定义 在...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章