#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
class Matrix
{
public:
Matrix();
void Reversal();
void Roll();
void Rotation1();
void Rotation2();
void Choose();
void Cycle1();
void Cycle2();
protected:
int a[5][5];
int b[5][5];
int n,u;
};
Matrix::Matrix()
{
srand(time(NULL));
cout << "初始矩阵为:" << endl;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
a[i][j]=rand()%99+1;
cout << a[i][j] << "\t";
}
cout << endl;
}
}
void Matrix::Reversal()
{
cout << "a.竖直翻转 b.水平翻转" << endl;
char y;
cin >> y;
if (y == 'a')
{
cout << "竖直翻转过后为:" << endl;
for (int i = 0; i < 5; i++)
{
for (int j = 4; j >= 0; j--)
cout << a[i][j] << "\t ";
cout << endl;
}
}
else
{
cout << "水平翻转过后为:" << endl;
for (int i = 4; i >= 0; i--)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t ";
cout << endl;
}
}
}
void Matrix::Roll()
{
cout << "a.左卷 b.右卷 c.上卷 d.下卷" << endl;
char y;
cin >> y;
if (y == 'a')
{
cout << "正在进行...左卷" << endl;
cout << "请输入翻转列数:" << endl;
cin >> n;
for (int i = 0; i < 5; i++)
{
for (int j = 4; j > 4-n; j--)
cout << a[i][j] << "\t";
for (int j = 0; j < 5-n; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
else
{
if (y == 'b')
{
cout << "正在进行...右卷" << endl;
cout << "请输入翻转列数:" << endl;
cin >> n;
for (int i = 0; i < 5; i++)
{
for (int j = n; j < 5; j++)
cout << a[i][j] << "\t";
for (int j = n - 1; j >= 0; j--)
cout << a[i][j] << "\t";
cout << endl;
}
}
else
{
if (y == 'c')
{
cout << "正在进行...上卷" << endl;
cout << "请输入翻转列数:" << endl;
cin >> n;
for (int i = 4; i > 4 - n; i--)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t";
cout << endl;
}
for(int i=0; i< 5 - n; i++)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
else
{
cout << "正在进行...下卷" << endl;
cout << "请输入翻转列数:" << endl;
cin >> n;
for (int i = n; i < 5; i++)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t";
cout << endl;
}
for (int i = n - 1; i >= 0; i--)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
}
}
}
void Matrix::Rotation1()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
b[j][4-i] = a[i][j];
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
a[i][j] = b[i][j];
}
}
}
void Matrix::Rotation2()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
b[4 - j][ i] = a[i][j];
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
a[i][j] = b[i][j];
}
}
}
void Matrix::Cycle1()
{
cout << "请选择旋转角度:" << endl;
cout << "1.90' 2.180' 3.270' 4.360'" << endl;
cin >> u;
for (int i = 0; i < u; i++)
{
Rotation1();
}
cout << "最终结果为:" << endl;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
void Matrix::Cycle2()
{
cout << "请选择旋转角度:" << endl;
cout << "1.90' 2.180' 3.270' 4.360'" << endl;
cin >> u;
for (int i = 0; i < u ; i++)
{
Rotation2();
}
cout << "最终结果为:" << endl;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
void Matrix::Choose()
{
cout << "请选择执行操作:" << endl;
cout << "1.矩阵翻转 " << " 2.矩阵卷动 " << endl;
cout << "3.矩阵顺时针旋转 " << "4.矩阵逆时针旋转" << endl;
cout << "(请 按 0 退 出 系 统 )" << endl;
}
int main()
{
cout << "************欢迎进入矩阵空间************" << endl;
int menu;
Matrix A;
do {
A.Choose();
cin >> menu;
switch (menu)
{
case 1:A.Reversal(); break;
case 2:A.Roll(); break;
case 3:A.Cycle1(); break;
case 4:A.Cycle2(); break;
default: break;
}
} while (menu != 0);
return 0;
}
代码问题:
这个代码前面如果不执行卷动,后面的矩阵操作会自动修正为原初矩阵;但是执行过卷动以后,会按照上一步执行后的矩阵进行操做。