?? trimat.h
字號:
// TriMat.cpp : Defines the entry point for the console application.
//
//上三角矩陣的類的實現
#include "stdafx.h"
#include "iostream.h"
#include "iomanip.h"
#include "stdlib.h"
const int RowLimit=50; //最大行數,即最大維數
const int EleLimit=1275; //最大元素個數
template<class T>class TriMat //上三角矩陣
{
private:
T arr[EleLimit]; //一維數組存放矩陣元素
int rowTable[RowLimit]; // 矩陣第一個非零元素在arr中的下標
int n; //矩陣的階數
public:
TriMat(int matsize); // 構造函數,矩陣的階數為matsize
~TriMat(void){};
void PutEle(T item,int i,int j); // 存儲元素item到i行j列
T GetEle(int i,int j)const; // 提取i行j列元素
TriMat<T> operator+(const TriMat<T>&a)const; // 矩陣加
TriMat<T> operator-(const TriMat<T>&a)const; //矩陣減
TriMat<T> operator*(const TriMat<T>&a)const; // 矩陣乘
void ReadMat(void); //矩陣元素輸入
void WriteMat(void)const; // 矩陣元素屏幕輸出
int GetDim(void)const // 返回矩陣的階數
{ return n;};
};
template <class T>
TriMat<T>::TriMat(int matSize)
{
int storedEles=0; // 第0行第一個非0元素在arr中的下標為0
if (matSize>RowLimit)
{
cerr<<"矩陣的階數超過了上限!"<<RowLimit<<endl;
exit(1);
}
n=matSize;
//遞推求出第i行第一個非0元素在arr數組中的下標,并存于rowTable[i]中
for (int i=0;i<n;i++)
{
rowTable[i]=storedEles;
storedEles+= /*填空1*/5;
}
}
template <class T>
void TriMat<T>::PutEle(T item,int i,int j) // 存儲元素item到i行j列
{
if((i<0)||(i>=n)||(j<0)||(j>=n))
{
cerr<<"數組下標越界超過了范圍:0-"<<n-1<<endl;
exit(1);
}
if (j>=i)arr[/*填空2*/4*i+j]=item;
}
template <class T>
T TriMat<T>::GetEle(int i,int j)const // 提取i行j列元素
{
if((i<0)||(i>=n)||(j<0)||(j>=n))
{
cerr<<"數組下標越界超過了范圍:0-"<<n-1<<endl;
exit(1);
}
if (j>=i) return arr[/*填空3*/4*i+j];
else return 0; // 對角線以下的元素為0
}
template <class T>
TriMat<T> TriMat<T>::operator+(const TriMat<T>& a)const // 矩陣加
{
T itemCurr,itemA;
TriMat<T> b(a.n);
for (int i=0;i<n;i++)
{
for (int j=i;j<n;j++)
{
itemCurr=GetEle(i,j);
itemA=/*填空4*/GetEle(i,j);
b.PutEle(itemCurr+itemA,i,j);
}
}
return b;
}
template <class T>
TriMat<T> TriMat<T>::operator-(const TriMat<T>& a)const // 矩陣減
{
T itemCurr,itemA;
TriMat<T> b(a.n);
for (int i=0;i<n;i++)
{
for (int j=i;j<n;j++)
{
itemCurr=GetEle(i,j);
itemA=/*填空5*/GetEle(i,j);
b.PutEle(/*填空6*/itemCurr-itemA,i,j);
}
}
return b;
}
template <class T>
TriMat<T> TriMat<T>::operator*(const TriMat<T>& a)const // 矩陣乘
{
T itemCurr,itemA,itemB;
TriMat<T> b(a.n);
for (int i=0;i<n;i++)
{
for (int j=i;j<n;j++)
{
itemB=0;
for(int k=i;k<=j;k++)
{
itemCurr=GetEle(i,k);
itemA=/*填空7*/GetEle(k,j);
itemB+=/*填空8*/itemCurr*itemA;
}
b.PutEle(/*填空9*/itemB,i,j);
}
}
return b;
}
template <class T>
void TriMat<T>::ReadMat(void)
{
T item;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
cin>>item;
PutEle(item,i,j);
}
}
template <class T>
void TriMat<T>::WriteMat(void)const
{
for(int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
cout<<setw(7)<<GetEle(i,j);
cout<<endl;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -