Advertisement
Guest User

Untitled

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