Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <conio.h>
- #include <vector>
- using namespace std;
- template <typename ChooseType>
- class Matrix {
- public:
- static int n;
- Matrix(){
- Arr = new ChooseType*[50];
- for(int i=0;i<50;i++){
- Arr[i] = new ChooseType[50];
- }
- for(int i=0;i<50;i++){
- for(int j=0;j<50;j++){
- Arr[i][j] = 0;
- }
- }
- }
- void setArrElem(int a,int b){
- //scanf_s("%f",&(Arr[a][b]));
- scanf_s("%d",&(Arr[a][b]));
- fflush(stdin);
- };
- ChooseType* getArr(){
- return *Arr;
- };
- void setN(){
- printf("N: ");
- scanf_s("%d",&n);
- fflush(stdin);
- }
- void operator -(float x){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- Arr[i][j] -= x;
- }
- }
- }
- void operator -(int x){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- Arr[i][j] -= x;
- }
- }
- }
- void operator /(float x){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- Arr[i][j] /= x;
- }
- }
- }
- void operator /(int x){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- Arr[i][j] /= x;
- }
- }
- }
- void operator -(Matrix second){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- Arr[i][j] -= second.Arr[i][j];
- }
- }
- }
- void operator *(Matrix second){
- ChooseType temp[50][50];
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- temp[i][j] = Arr[i][j];
- }
- }
- for(int p=0;p<n;p++){
- for(int w=0;w<n;w++){
- Arr[p][w] = 0;
- for(int j=0;j<n;j++){
- Arr[p][w] += temp[p][j]*(second.Arr[j][w]);
- }
- }
- }
- }
- friend Matrix operator <<(Matrix Matr, ChooseType p){
- ChooseType temp[50];
- for(int m=0;m<p;m++){
- for(int i=0;i<n;i++){
- temp[i] = Matr.Arr[i][0];
- for(int j=0;j<n;j++){
- Matr.Arr[i][j] = Matr.Arr[i][j+1];
- }
- Matr.Arr[i][n-1] = temp[i];
- }
- }
- return Matr;
- }
- void operator --(){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- Arr[i][j]--;
- }
- }
- }
- void Add(){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- printf("[%d][%d] = ",i,j);
- this->setArrElem(i,j);
- }
- printf("\n");
- }
- }
- void Matrix<ChooseType>::Show(){
- for(int i=0;i<n;i++){
- for(int j=0;j<n;j++){
- //printf("%8.2f ",Arr[i][j]);
- printf("%d ",Arr[i][j]);
- }
- printf("\n");
- }
- }
- private:
- ChooseType **Arr;
- };
- template <typename ChooseType> int Matrix<ChooseType>::n = 0;
- float setX(){
- float x;
- printf("x = ");
- scanf_s("%f",&x);
- fflush(stdin);
- return x;
- }
- int setY(){
- int y;
- printf("x = ");
- scanf_s("%d",&y);
- fflush(stdin);
- return y;
- }
- void showX(float x){
- printf("x = %f \n",x);
- }
- void showY(int x){
- printf("x = %d \n",x);
- }
- int main ()
- {
- int count = 0;
- int type;
- Matrix<float> m1,m2;
- Matrix<int> m3,m4;
- char s = 0;
- printf("Matrix type\n");
- printf("1) Float\n");
- printf("2) Int\n");
- scanf_s("%d",&type);
- printf("%d\n",type);
- switch(type){
- case 1:
- float x;
- while(s!=48){
- printf("\n Menu: \n");
- printf("1) A-x \n");
- printf("2) A/x \n");
- printf("3) A-B \n");
- printf("4) A*B \n");
- printf("5) A << x\n");
- printf("6) B-- \n");
- printf("0) Exit \n\n");
- s=_getch();
- switch (s)
- {
- case 48:
- break;
- case 49:
- m1.setN();
- m1.Add();
- x = setX();
- m1 - x;
- m1.Show();
- break;
- case 50:
- m1.Add();
- x = setX();
- m1 / x;
- m1.Show();
- break;
- case 51:
- m1.setN();
- cout << "A" << endl;
- m1.Add();
- cout << "B" << endl;
- m2.Add();
- m1 - m2;
- m1.Show();
- break;
- case 52:
- m1.setN();
- cout << "A" << endl;
- m1.Add();
- cout << "B" << endl;
- m2.Add();
- m1 * m2;
- m1.Show();
- break;
- case 53:
- m1.setN();
- m1.Add();
- x = setX();
- m1 = m1 << x;
- m1.Show();
- break;
- case 54:
- m1.setN();
- m1.Add();
- m1.Show();
- cout << endl;
- --m1;
- m1.Show();
- break;
- default:
- printf("Error: Wrong key. Try 1-6 \n");
- }
- }
- return 0;
- case 2:
- int y;
- while(s!=48){
- printf("\n Menu: \n");
- printf("1) A-x \n");
- printf("2) A/x \n");
- printf("3) A-B \n");
- printf("4) A*B \n");
- printf("5) A << x\n");
- printf("6) B-- \n");
- printf("0) Exit \n\n");
- s=_getch();
- switch (s)
- {
- case 48:
- break;
- case 49:
- m3.setN();
- m3.Add();
- y = setY();
- m3 - y;
- m3.Show();
- break;
- case 50:
- m3.Add();
- y = setY();
- m3 / y;
- m3.Show();
- break;
- case 51:
- m3.setN();
- cout << "A" << endl;
- m3.Add();
- cout << "B" << endl;
- m3.Add();
- m3 - m4;
- m3.Show();
- break;
- case 52:
- m3.setN();
- cout << "A" << endl;
- m3.Add();
- cout << "B" << endl;
- m3.Add();
- m3 * m4;
- m3.Show();
- break;
- case 53:
- m3.setN();
- m3.Add();
- y = setY();
- m3 = m3 << y;
- m3.Show();
- break;
- case 54:
- m3.setN();
- m3.Add();
- m3.Show();
- cout << endl;
- --m3;
- m3.Show();
- break;
- default:
- printf("Error: Wrong key. Try 1-6 \n");
- }
- }
- return 0;
- default:
- printf("Wrong type\n");
- _getch();
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement