Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.20 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <vector>  
  5.  
  6.  
  7. using namespace std;
  8.  
  9. template <typename ChooseType>
  10. class Matrix {
  11.  
  12. public:
  13.     static int n;
  14.  
  15.     Matrix(){
  16.         Arr = new ChooseType*[50];
  17.         for(int i=0;i<50;i++){
  18.             Arr[i] = new ChooseType[50];
  19.         }
  20.  
  21.         for(int i=0;i<50;i++){
  22.             for(int j=0;j<50;j++){
  23.                 Arr[i][j] = 0;
  24.             }
  25.         }
  26.  
  27.     }
  28.  
  29.     void setArrElem(int a,int b){
  30.         //scanf_s("%f",&(Arr[a][b]));
  31.         scanf_s("%d",&(Arr[a][b]));
  32.         fflush(stdin); 
  33.     };
  34.  
  35.     ChooseType* getArr(){
  36.         return *Arr;
  37.     };
  38.  
  39.     void setN(){
  40.         printf("N: ");
  41.         scanf_s("%d",&n);
  42.         fflush(stdin);
  43.     }
  44.  
  45.     void operator -(float x){
  46.         for(int i=0;i<n;i++){
  47.             for(int j=0;j<n;j++){
  48.                 Arr[i][j] -= x;
  49.             }
  50.         }
  51.     }
  52.  
  53.     void operator -(int x){
  54.         for(int i=0;i<n;i++){
  55.             for(int j=0;j<n;j++){
  56.                 Arr[i][j] -= x;
  57.             }
  58.         }
  59.     }
  60.  
  61.     void operator /(float x){
  62.         for(int i=0;i<n;i++){
  63.             for(int j=0;j<n;j++){
  64.                 Arr[i][j] /= x;
  65.             }
  66.         }
  67.     }
  68.  
  69.     void operator /(int x){
  70.         for(int i=0;i<n;i++){
  71.             for(int j=0;j<n;j++){
  72.                 Arr[i][j] /= x;
  73.             }
  74.         }
  75.     }
  76.  
  77.     void operator -(Matrix second){
  78.         for(int i=0;i<n;i++){
  79.             for(int j=0;j<n;j++){
  80.                 Arr[i][j] -= second.Arr[i][j];
  81.             }
  82.         }
  83.     }
  84.  
  85.     void operator *(Matrix second){
  86.         ChooseType temp[50][50];
  87.  
  88.         for(int i=0;i<n;i++){
  89.             for(int j=0;j<n;j++){
  90.                 temp[i][j] = Arr[i][j];
  91.             }
  92.         }
  93.  
  94.         for(int p=0;p<n;p++){
  95.             for(int w=0;w<n;w++){
  96.                 Arr[p][w] = 0;
  97.                 for(int j=0;j<n;j++){
  98.                     Arr[p][w] += temp[p][j]*(second.Arr[j][w]);
  99.                 }
  100.             }
  101.         }
  102.     }
  103.  
  104.     friend Matrix operator <<(Matrix Matr, ChooseType p){
  105.  
  106.         ChooseType temp[50];
  107.  
  108.         for(int m=0;m<p;m++){
  109.             for(int i=0;i<n;i++){
  110.                 temp[i] = Matr.Arr[i][0];
  111.  
  112.                 for(int j=0;j<n;j++){
  113.                     Matr.Arr[i][j] = Matr.Arr[i][j+1];
  114.                 }
  115.  
  116.                 Matr.Arr[i][n-1] = temp[i];
  117.             }
  118.         }
  119.         return Matr;
  120.     }
  121.  
  122.     void operator --(){
  123.         for(int i=0;i<n;i++){
  124.             for(int j=0;j<n;j++){
  125.                 Arr[i][j]--;
  126.             }
  127.         }
  128.     }
  129.  
  130.     void Add(){
  131.         for(int i=0;i<n;i++){
  132.             for(int j=0;j<n;j++){
  133.                 printf("[%d][%d] = ",i,j);
  134.                 this->setArrElem(i,j);
  135.             }
  136.             printf("\n");
  137.         }
  138.     }
  139.  
  140.     void Matrix<ChooseType>::Show(){
  141.         for(int i=0;i<n;i++){
  142.             for(int j=0;j<n;j++){
  143.                 //printf("%8.2f ",Arr[i][j]);
  144.                 printf("%d ",Arr[i][j]);
  145.             }
  146.             printf("\n");
  147.         }
  148.     }
  149.  
  150. private:
  151.     ChooseType **Arr;
  152. };
  153. template <typename ChooseType> int Matrix<ChooseType>::n = 0;
  154.  
  155. float setX(){
  156.     float x;
  157.     printf("x = ");
  158.     scanf_s("%f",&x);
  159.     fflush(stdin);
  160.     return x;
  161. }
  162.  
  163. int setY(){
  164.     int y;
  165.     printf("x = ");
  166.     scanf_s("%d",&y);
  167.     fflush(stdin);
  168.     return y;
  169. }
  170.  
  171. void showX(float x){
  172.     printf("x = %f \n",x);
  173. }
  174. void showY(int x){
  175.     printf("x = %d \n",x);
  176. }
  177.  
  178. int main ()
  179. {
  180.     int count = 0;
  181.     int type;
  182.  
  183.     Matrix<float> m1,m2;
  184.     Matrix<int> m3,m4;
  185.  
  186.     char s = 0;
  187.  
  188.     printf("Matrix type\n");
  189.     printf("1) Float\n");
  190.     printf("2) Int\n");
  191.     scanf_s("%d",&type);
  192.  
  193.  
  194.     printf("%d\n",type);
  195.     switch(type){
  196.     case 1:
  197.        
  198.         float x;
  199.  
  200.         while(s!=48){
  201.  
  202.             printf("\n Menu: \n");
  203.             printf("1) A-x \n");
  204.             printf("2) A/x \n");
  205.             printf("3) A-B \n");
  206.             printf("4) A*B \n");
  207.             printf("5) A << x\n");
  208.             printf("6) B-- \n");
  209.             printf("0) Exit \n\n");
  210.  
  211.             s=_getch();
  212.  
  213.  
  214.             switch (s)
  215.             {
  216.             case 48:
  217.                 break;
  218.             case 49:
  219.                 m1.setN();
  220.                 m1.Add();
  221.                 x = setX();
  222.  
  223.                 m1 - x;
  224.                 m1.Show();
  225.                 break;
  226.             case 50:
  227.                 m1.Add();
  228.                 x = setX();
  229.  
  230.                 m1 / x;
  231.                 m1.Show();
  232.                 break;
  233.             case 51:
  234.                 m1.setN();
  235.                 cout << "A" << endl;
  236.                 m1.Add();
  237.                 cout << "B" << endl;
  238.                 m2.Add();
  239.  
  240.                 m1 - m2;
  241.                 m1.Show();
  242.  
  243.                 break;
  244.             case 52:
  245.                 m1.setN();
  246.                 cout << "A" << endl;
  247.                 m1.Add();
  248.                 cout << "B" << endl;
  249.                 m2.Add();
  250.  
  251.                 m1 * m2;
  252.                 m1.Show();
  253.                 break;
  254.             case 53:
  255.                 m1.setN();
  256.                 m1.Add();
  257.                 x = setX();
  258.  
  259.  
  260.                 m1 = m1 << x;
  261.                 m1.Show();
  262.                 break;
  263.             case 54:
  264.                 m1.setN();
  265.                 m1.Add();
  266.                 m1.Show();
  267.                 cout << endl;
  268.  
  269.                 --m1;
  270.                 m1.Show();
  271.                 break;
  272.             default:
  273.                 printf("Error: Wrong key. Try 1-6 \n");
  274.             }
  275.         }
  276.         return 0;
  277.     case 2:
  278.        
  279.         int y;
  280.  
  281.         while(s!=48){
  282.  
  283.             printf("\n Menu: \n");
  284.             printf("1) A-x \n");
  285.             printf("2) A/x \n");
  286.             printf("3) A-B \n");
  287.             printf("4) A*B \n");
  288.             printf("5) A << x\n");
  289.             printf("6) B-- \n");
  290.             printf("0) Exit \n\n");
  291.  
  292.             s=_getch();
  293.  
  294.  
  295.             switch (s)
  296.             {
  297.             case 48:
  298.                 break;
  299.             case 49:
  300.                 m3.setN();
  301.                 m3.Add();
  302.                 y = setY();
  303.  
  304.                 m3 - y;
  305.                 m3.Show();
  306.                 break;
  307.             case 50:
  308.                 m3.Add();
  309.                 y = setY();
  310.  
  311.                 m3 / y;
  312.                 m3.Show();
  313.                 break;
  314.             case 51:
  315.                 m3.setN();
  316.                 cout << "A" << endl;
  317.                 m3.Add();
  318.                 cout << "B" << endl;
  319.                 m3.Add();
  320.  
  321.                 m3 - m4;
  322.                 m3.Show();
  323.  
  324.                 break;
  325.             case 52:
  326.                 m3.setN();
  327.                 cout << "A" << endl;
  328.                 m3.Add();
  329.                 cout << "B" << endl;
  330.                 m3.Add();
  331.  
  332.                 m3 * m4;
  333.                 m3.Show();
  334.                 break;
  335.             case 53:
  336.                 m3.setN();
  337.                 m3.Add();
  338.                 y = setY();
  339.  
  340.  
  341.                 m3 = m3 << y;
  342.                 m3.Show();
  343.                 break;
  344.             case 54:
  345.                 m3.setN();
  346.                 m3.Add();
  347.                 m3.Show();
  348.                 cout << endl;
  349.  
  350.                 --m3;
  351.                 m3.Show();
  352.                 break;
  353.             default:
  354.                 printf("Error: Wrong key. Try 1-6 \n");
  355.             }
  356.         }
  357.         return 0;
  358.     default:
  359.         printf("Wrong type\n");
  360.         _getch();
  361.         return 0;
  362.     }
  363.  
  364.    
  365. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement