Advertisement
Guest User

Untitled

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