资源描述
1.课程设计的目的
(1) 熟练使用 C ++语言编写程序,解决实际问题;
(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
2.需求分析
问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。
基本要求:
1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值。
2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值。
特殊矩阵:具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。最常见的特殊矩阵有对称矩阵、上(下)三角矩阵、对角矩阵等。
特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的值相同的多个矩阵元素压缩存储到一个存储空间中。
3.矩阵的压缩与解压缩问题的设计
图1-1
4.调试分析
图1-2程序运行界面
图1-3 程序运行界面
图1-4 文件的输入
5.小结
经过矩阵的压缩与解压缩的实验,让我了解到计算机是怎么为了减少承储空间的,存储矩阵的。以及特殊矩阵式在计算机中存储,以及把这些矩阵的压缩后怎么解压出来,恢复原来的样子!我觉得像这样的课程设计,一定要先想好有哪些板块,以及那些板块之间的关系这么样!谁调谁!
6、参考文献
[1] 严蔚敏,吴伟民 编著. 数据结构(C 语言版)--北京: 清华大学出版社,2007.2
[2]严蔚敏,吴伟民 米 宁 编著. 数据结构题集(C 语言版)--北京: 清华大学出版社, 2007.3
[3]网上搜索相关程序作为参考
附录:
#include <iostream>
#include<fstream>
using namespace std;
int SymmetricMatrix()
{
int colm;//行
int row;//列
fstream file("SymmetricMatrix.txt");
ofstream fout("SymmetricMatrix1.txt");
file>>colm>>row;
int **matrix;
//bool flag=true;
matrix=new int *[colm];
for(int i=0;i<colm;i++)
{
matrix[i]=new int[row];
}
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
file>>matrix[i][j];
//cout<<matrix[i][j];
}
}
for (int i=0;i<colm;i++)
{
for(int j=i;j<row;j++)
{
if(!(matrix[i][j]==matrix[j][i]))
{
cout<<"输入的不是对称矩阵"<<endl;
return 0;
}
}
}
cout<<"对称矩阵如下"<<endl;
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
//fin>>matrix[i][j];
cout<<matrix[i][j]<<"\t";
}
cout<<endl;
}
int *array=new int[colm*(colm+1)/2];
int k=0;
for (int i=0;i<colm;i++)
{
for(int j=i;j<row;j++)
{
array[k]=matrix[i][j];
file<<3433;
//file<<array[k];//???????????????
cout<<array[k]<<"\t";
++k;
}
}
cout<<endl;
return 0;
}
int UpperTriangularMatrix()
{
int colm;//行
int row;//列
fstream file("UpperTriangularMatrix.txt");
//ofstream fout("UpperTriangularMatrix.txt");
file>>colm>>row;
int **matrix;
//bool flag=true;
matrix=new int *[colm];
for(int i=0;i<colm;i++)
{
matrix[i]=new int[row];
}
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
file>>matrix[i][j];
//cout<<matrix[i][j];
}
}
for (int i=0;i<colm;i++)
{
for(int j=0;j<i;j++)
{
if(!(matrix[i][j]==0))
{
cout<<"输入的不是上三角矩阵"<<endl;
return 0;
}
}
}
cout<<"上三角矩阵如下"<<endl;
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
//fin>>matrix[i][j];
cout<<matrix[i][j]<<"\t";
}
cout<<endl;
}
int *array=new int[colm*(colm+1)/2];
int k=0;
for (int i=0;i<colm;i++)
{
for(int j=i;j<row;j++)
{
array[k]=matrix[i][j];
file<<3433;
//file<<array[k];//???????????????
cout<<array[k]<<"\t";
++k;
}
}
cout<<endl;
return 0;
}
int LowerTriangularMatrix()
{
int colm;//行
int row;//列
fstream file("LowerTriangularMatrix.txt");
//ofstream fout("UpperTriangularMatrix.txt");
file>>colm>>row;
int **matrix;
//bool flag=true;
matrix=new int *[colm];
for(int i=0;i<colm;i++)
{
matrix[i]=new int[row];
}
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
file>>matrix[i][j];
//cout<<matrix[i][j];
}
}
for (int i=0;i<colm;i++)
{
for(int j=i+1;j<row;j++)
{
if(!(matrix[i][j]==0))
{
cout<<"输入的不是下三角矩阵"<<endl;
return 0;
}
}
}
cout<<"下三角矩阵如下"<<endl;
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
//fin>>matrix[i][j];
cout<<matrix[i][j]<<"\t";
}
cout<<endl;
}
int *array=new int[colm*(colm+1)/2];
int k=0;
for (int i=0;i<colm;i++)
{
for(int j=0;j<=i;j++)
{
array[k]=matrix[i][j];
//file<<3433;
//file<<array[k];//???????????????
cout<<array[k]<<"\t";
++k;
}
}
cout<<endl;
return 0;
}
int SymmetricMatrixuncompress()
{
int colm;//行
int row;//列
fstream file("SymmetricMatrixuncompress.txt");
//ofstream fout("UpperTriangularMatrix.txt");
file>>colm>>row;
int **matrix;
//bool flag=true;
matrix=new int *[colm];
for(int i=0;i<colm;i++)
{
matrix[i]=new int[row];
}
int *array=new int[colm*(colm+1)/2];
int k=0;
for (int i=0;i<colm;i++)
{
for(int j=0;j<=i;j++)
{
file>>matrix[i][j];
}
}
for (int i=0;i<colm;i++)
{
for(int j=0;j<=i;j++)
{
matrix[j][i]=matrix[i][j];
}
}
cout<<"解压缩对称矩阵"<<endl;
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
cout<<matrix[i][j];
}
cout<<endl;
}
return 0;
}
int UpperTriangularMatrixuncompress()
{
int colm;//行
int row;//列
fstream file("UpperTriangularMatrixuncompress.txt");
//ofstream fout("UpperTriangularMatrix.txt");
file>>colm>>row;
int **matrix;
//bool flag=true;
matrix=new int *[colm];
for(int i=0;i<colm;i++)
{
matrix[i]=new int[row];
}
int *array=new int[colm*(colm+1)/2];
int k=0;
for (int i=0;i<colm;i++)
{
for(int j=i;j<row;j++)
{
file>>matrix[i][j];
}
}
for (int i=0;i<colm;i++)
{
for(int j=0;j<=i;j++)
{
matrix[i][j]=0;
}
}
cout<<"解压缩上三角矩阵"<<endl;
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
cout<<matrix[i][j];
}
cout<<endl;
}
return 0;
}
int LowerTriangularMatrixuncompress()
{
int colm;//行
int row;//列
fstream file("LowerTriangularMatrixuncompress.txt");
//ofstream fout("UpperTriangularMatrix.txt");
file>>colm>>row;
int **matrix;
//bool flag=true;
matrix=new int *[colm];
for(int i=0;i<colm;i++)
{
matrix[i]=new int[row];
}
int *array=new int[colm*(colm+1)/2];
int k=0;
for (int i=0;i<colm;i++)
{
for(int j=0;j<=i;j++)
{
file>>matrix[i][j];
}
}
for (int i=0;i<colm;i++)
{
for(int j=i+1;j<row;j++)
{
matrix[i][j]=0;
}
}
cout<<"解压缩上三角矩阵"<<endl;
for (int i=0;i<colm;i++)
{
for(int j=0;j<row;j++)
{
cout<<matrix[i][j];
}
cout<<endl;
}
return 0;
}
int main()
{
char c;
do
{
printf("\t 1.对称矩阵的压缩\n");
printf("\t 2.上三角矩阵的压缩\n");
printf("\t 3.下三角矩阵的压缩\n");
printf("\t 4.对称矩阵的解压缩\n");
printf("\t 5.上三角矩阵的解压缩\n");
printf("\t 6.下三角矩阵的解压缩\n");
printf("\t 7.!\n");
printf("Please Input choose (1-7):");
scanf("%s",&c);
switch(c)
{
case '1': printf("\t 1.\n"); SymmetricMatrix(); break;
case '2': printf("\t 2.");UpperTriangularMatrix(); break;
case '3': printf("\t 3."); LowerTriangularMatrix(); break;
case '4': printf("\t 4."); SymmetricMatrixuncompress(); break;
case '5': printf("\t 5."); UpperTriangularMatrixuncompress(); break;
case '6': printf("\t 6."); LowerTriangularMatrixuncompress(); break;
case '7': exit(0);
default : break;
}
}while(c!='4');
cin.get();
return 0;}
展开阅读全文