关于DSP28335的3X3矩阵键盘扫描程序的问题!

关于DSP28335的3X3矩阵键盘扫描程序的问题!,第1张

H1=1H2=1H3=1是要完成置位?置位不是GpioDataRegs.GPBDAT.bit.GPIOx这个寄存器吧?

GpioDataRegs.GPASET.bit.GPIOx=1,

置1

GpioDataRegs.GPACLEAR.bit.GPIOx=1,置0

不知道是不是这个原因,你在看看

//矩阵三元组之矩阵相加 相乘

#include <iostream>

using namespace std

typedef int Elemtype

#define MAXSIZE 12500 //最大非零元素

typedef struct Triple

{

Elemtype value

int row,col

}Triple

typedef struct TSMatrix

{

Triple data[MAXSIZE+1]

int mu,nu,tu

}TSMatrix

TSMatrix T

void InputMatrix(TSMatrix &T) //输入t个非零元素

{

cout<<"请输入稀疏矩阵的信息,(行,列,非零元素个数)"<<endl

cin>>T.mu>>T.nu>>T.tu

int i

cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl

for(i=1i<=T.tu++i)

{

cin>>T.data[i].row>>T.data[i].col>>T.data[i].value

}

}

void Output(TSMatrix T)

{

cout<<"矩阵的三元组表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零个数="<<T.tu<<endl

int i

for(i=1i<=T.tu++i)

{

cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl

}

}

void TransposeSMatrix(TSMatrix M,TSMatrix &T) //矩阵的转置

{

T.mu=M.nuT.nu=M.muT.tu=M.tu

int i,j,k=1

for(i=1i<=M.nu++i)

{

for(j=1j<=M.tu++j)

if(M.data[j].col==i)

{

T.data[k].row=i

T.data[k].col=M.data[j].row

T.data[k].value=M.data[j].value

++k

}

}

}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q) //矩阵相加

{

int index_a,index_b,i=1,j=1,k=1

Q.mu=M.muQ.nu=M.nu

while (i<=M.tu&&j<=T.tu)

{

index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col

index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col

if(index_a<index_b)

{

Q.data[k]=M.data[i]

i++

k++

}

else if(index_a>index_b)

{

Q.data[k]=T.data[j]

j++

k++

}

else if(index_a==index_b)

{

if((M.data[i].value+T.data[j].value)!=0)

{

Q.data[k]=M.data[i]

Q.data[k].value=M.data[i].value+T.data[j].value

k++

}

++i

++j

}

}

//复制剩余元素

for(i<=M.tu++i)

{

Q.data[k]=M.data[i]

k++

}

for(j<=T.tu++j)

Q.data[k++]=T.data[j]

Q.tu=k-1

}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix &Q) //相乘

{

if(M.nu!=T.mu)

{

cerr<<"两矩阵相乘不合法"<<endl

return

}

int *rowSize=new int[T.mu+1]//存放每行非零元素的个数

int *rowStart=new int[T.mu+2]//矩阵每行在三元组开始位置

int *temp=new int[T.nu+1] //存放结果矩阵中每行的计算结果

int i,Current,k,ROWM,COLM,COLB

for(i=1i<=T.mui++) rowSize[i]=0

for(i=1i<=T.tu++i) rowSize[T.data[i].row]++

rowStart[1]=1

for(i=2i<=T.mu+1i++)

rowStart[i]=rowStart[i-1]+rowSize[i-1]

Current=1k=1

while (Current<=M.tu)

{

ROWM=M.data[Current].row //当前三元组数据中元素的行号

for(i=1i<=T.nu++i) temp[i]=0

while (Current<=M.tu&&ROWM==M.data[Current].row)

{

COLM=M.data[Current].col //当前元素的列号,方便与T矩阵的行号相乘

for(i=rowStart[COLM]i<rowStart[COLM+1]i++) //对应T矩阵中每行的个数

{

COLB=T.data[i].col

temp[COLB]+=(M.data[Current].value)*(T.data[i].value)

}

Current++

}

for(i=1i<=T.nui++)

{

if(temp[i]!=0)

{

Q.data[k].row=ROWM

Q.data[k].col=i

Q.data[k].value=temp[i]

}

k++

}

}

Q.mu=M.muQ.nu=T.nu

Q.tu=k-1

}

int main()

{

TSMatrix T,M,Q,S

InputMatrix(M)

InputMatrix(T)

cout<<"两矩阵相乘"<<endl

Multiply(M,T,Q)

Output(Q)

cout<<"两矩阵相加"<<endl

AddMastrix(M,M,S)

Output(S)

system("pause")

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12058439.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存