| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖
标题:[求助]跪求各位大哥帮忙~~~
只看楼主 加入收藏
redandwhite
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-9-22
收藏
 问题点数:0 回复次数:3 
[求助]跪求各位大哥帮忙~~~

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
template<class T>
class CMatrix
{
T* *Mat;//矩阵的头指针
int nNum;//矩阵的行数或列数
T**MatR;//旋转后的矩阵
T**MatRefl;//反射后的矩阵
public:
CMatrix();//缺省的构造函数
CMatrix(T**Mat,int n);//构造函数
CMatrix(int n);//构造函数
//~CMatrix();//解析函数
void show(int k,int choice);//输出,K=0为原矩阵,K=1为旋转后的矩阵,K=2为反射后的矩阵
void R90();
void R180();
void R270();
void ReflectX(int t);
void ReflectY(int t);
void ReflectXY(int t);
int LookForData();//查找矩阵中的数据
//int ModifyData(int i,int j,int s);
int ModefyData(int row,int column);//修改所查找的数据
double Range();//求行列式的值
};
template<class T>//摸板的使用,需做此说明
CMatrix<T>::CMatrix(int n)
{
int i,j;
nNum=n;
Mat=new T*[nNum];//分配矩阵每一行的空间
MatR=new T*[nNum];
MatRefl=new T*[nNum];
for(i=0;i<nNum;i++)
{
Mat[i]=new T;//分配矩阵每一行的空间
MatR[i]=new T;
MatRefl[i]=new T;
}
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++)
Mat[i][j]=i*nNum+j+1;
}
template<class T>
void CMatrix<T>::R90()//旋转90度
{
int i,j,k=0;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatR[i][j]=Mat[j][nNum-1-i];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatR[i][j]<<" ";
}
}
template<class T>
void CMatrix<T>::R180()//旋转180度
{
int i,j,k=0;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatR[i][j]=Mat[nNum-1-i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatR[i][j]<<" ";
}
}
template<class T>
void CMatrix<T>::R270()//旋转270度
{
int i,j,k=0;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatR[i][j]=Mat[nNum-1-j][i];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatR[i][j]<<" ";
}
}
template<class T>
void CMatrix<T>::ReflectX(int t)//关于X轴反射
{
int i,j,k=0;
if(t==0){
cout<<"对旋转后的矩阵轴X反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=MatR[nNum-1-i][j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
if(t!=0){
cout<<" 对原矩阵轴X反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=Mat[nNum-1-i][j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
}
template<class T>
void CMatrix<T>::ReflectY(int t)//关于Y轴反射
{
int i,j,k;
if(t==0){
cout<<" 对旋转过的矩阵轴Y反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=MatR[i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
if(t!=0){
cout<<" 对原矩阵Y轴反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=Mat[i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
}
template<class T>
void CMatrix<T>::ReflectXY(int t)//关于XY轴反射
{
int i,j,k;
if(t==0){
cout<<"对旋转过的矩阵轴XY反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=MatR[nNum-1-i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
if(t!=0){
cout<<"对旋转过的矩阵轴XY反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
if(k%nNum==0)cout<<'\n';
MatRefl[i][j]=MatR[nNum-1-i][nNum-1-j];
if(k%nNum==0)cout<<"\n";
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
}
template<class T>
int CMatrix<T>::LookForData()
{
int i,j;
cout<<"输入您的要求"<<'\n';
cin>>i>>j;
cout<<"查询第"<<i<<"行"<<j<<"列数据为"<<Mat[i][j]<<'\n';
return Mat[i][j];
}
//template<class T>
//int CMatrix<T>::ModifyData(int i,int j)
//{
//int t,s;
//cin>>s;
//void LookForData(i,j);
//t=Mat[i][j],Mat[i][j]=s;
//return Mat[i][j];
//}
template<class T>
int CMatrix<T>::ModefyData(int i,int j)
{
int m,n,k,t,l=0;
cout<<"输入要替换的数"<<'\n';
cin>>k;
t=Mat[i][j];
Mat[i][j]=k;
for(m=0;m<nNum;m++)
for(n=0;n<nNum;n++){
if(l%nNum==0)cout<<'\n';
l++;
cout<<Mat[m][n]<<" ";
}
return 2;
}
template<class T>
double CMatrix<T>::Range()
{
int i,j,k;
double t;
for(k=0;k<nNum;k++)
for(i=k+1;i<nNum;i++)
{
t=double(Mat[i][k])/double(Mat[k][k]);//用高斯消去法求行列式的值
for(j=k+1;j<nNum;j++)
Mat[i][j]+=-t*Mat[k][j];
}
t=1;
for(i=0;i<nNum;i++)
t=t*Mat[i][i];
return t;
}
template<class T>
void CMatrix<T>::show(int k,int choice)
{
int t=0;
if(k==0){
cout<<"输出原矩阵"<<endl;
for(int i=0;i<nNum;i++)
for(int j=0;j<nNum;j++){
if(t%nNum==0)cout<<'\n';
t++;
cout<<" "<<Mat[i][j]<<" ";
}
cout<<'\n';
}
if(k==1){
cout<<"输出旋转后的矩阵"<<endl;
switch(choice){
case 1:R90();break;
case 2:R180();break;
case 3:R270();break;
case 4:cout<<"退出程序";break;
}
}
if(k==2){
int m;
cin>>m;
cout<<"输出反射后的矩阵"<<endl;
switch(choice){
case 1:ReflectX(m);break;
case 2:ReflectY(m);break;
case 3:ReflectXY(m);break;
case 4:cout<<"退出程序";break;
}
}
if(k==3){
cout<<"其他功能"<<endl;
switch(choice){
case 1:LookForData();break;
case 2:ModefyData(2,3);break;
case 3:cout<<Range()<<'\n';break;
case 4:cout<<"退出程序";break;
}
}
}
void main()
{
int i,j,c=0,m(2);
do{
system("cls");
cout<<"\n 1.从文件中输入矩阵"
<<"\n 2.从键盘中输入矩阵"
<<"\n 3.使用默认的矩阵形式"
<<"\n 4.退出"
<<"\n 输入矩阵后的菜单:"
<<"\n 1.旋转 1)90 2)180 3)270 4)退出"
<<"\n 2.反射 1)X轴 2)y轴 3)对角线 4)退出"
<<"\n 3.其他功能 1)查找 2)替换 3)模 4)退出"
<<"\n 4.输入矩阵的阶数\n";
cin>>m;
CMatrix<int>M(m);
M.show(0,0);
cout<<"\n 请输入选择.\n";
cin>>i>>j;
if(i==2)cout<<"输入1或0\n";
//for(;i!=4&&j!=4;)
M.show(i,j);
if(i==4||j==4)cout<<"退出系统"<<'\n';
cout<<"\n want to continue?Y(1),N(0):";
cin>>c;
}
while(c!=0);
}
为什么它无法实现从键盘中输入矩阵,如何从文件中输入矩阵呀,该怎么修改程序

搜索更多相关主题的帖子: int 矩阵 CMatrix include 函数 
2006-09-22 16:31
Bekky
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:354
专家分:0
注 册:2006-5-29
收藏
得分:0 
看的我头疼,模板类不太熟啊。
从文件读取,要按行读取,然后判读。
用ini文件,你参考一下人家的代码,我实在看不动,呵呵。
http://www.vckbase.com/code/listcode.asp?mclsid=15&sclsid=1509

[此贴子已经被作者于2006-9-22 16:49:07编辑过]


我的编译环境为WinXp + VC 6.0 http://blog..cn/yobo
2006-09-22 16:48
zhujw_2005
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-30
收藏
得分:0 

在程序的开头加入
#include<StdAfx.h>

2006-09-22 22:00
youngky
Rank: 1
等 级:新手上路
威 望:1
帖 子:75
专家分:0
注 册:2006-3-31
收藏
得分:0 
郁闷,太长了
你最好在编一起上进行修改

2006-09-24 21:32
快速回复:[求助]跪求各位大哥帮忙~~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036806 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved