Advertisement
amermo

Matrice sabiranje, mnozenje sa bacanjem izuzetka

Mar 13th, 2015
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <iomanip>
  4. #include <stdexcept>
  5.  
  6. int BrojKolona(std::vector<std::vector<int>> Mat)
  7. {
  8.     return Mat[0].size();
  9. }
  10.  
  11. int BrojRedova(std::vector<std::vector<int>> Mat)
  12. {
  13.     return Mat.size();
  14. }
  15.  
  16. void IspisiMatricu(std::vector<std::vector<int>> Mat)
  17. {
  18.     for(int i(0); i < BrojRedova(Mat); i++)
  19.     {
  20.         for(int j(0); j < BrojKolona(Mat); j++)
  21.             std::cout << std::setw(5) << Mat[i][j];
  22.         std::cout << std::endl;
  23.     }
  24. }
  25.  
  26. std::vector<std::vector<int>> KreirajMatricu(int br_redova, int br_kolona)
  27. {
  28.     return std::vector<std::vector<int>>(br_redova, std::vector<int>(br_kolona));
  29. }
  30.  
  31. std::vector<std::vector<int>> UnesiMatricu(int br_redova, int br_kolona)
  32. {
  33.     std::vector<std::vector<int>> mat(KreirajMatricu(br_redova, br_kolona));
  34.     for(int i(0); i < br_redova; i++)
  35.         for(int j(0); j < br_kolona; j++)
  36.         {
  37.             std::cout << "Unesite element (" << i+1 << "," << j+1 << "): ";
  38.             std::cin >> mat[i][j];
  39.         }
  40.     return mat;
  41. }
  42.  
  43. std::vector<std::vector<int>> SaberiMatrice(std::vector<std::vector<int>> Mat1, std::vector<std::vector<int>> Mat2)
  44. {
  45.     if((BrojRedova(Mat1) != BrojRedova(Mat2)) || (BrojKolona(Mat1) != BrojKolona(Mat2))) throw std::domain_error("Matrice nisu saglasne za sabiranje!");
  46.     std::vector<std::vector<int>> Mat3(KreirajMatricu(BrojRedova(Mat1), BrojKolona(Mat1)));
  47.     for(int i(0); i < BrojRedova(Mat3); i++)
  48.         for(int j(0); j < BrojKolona(Mat3); j++)
  49.             Mat3[i][j] = Mat1[i][j]+Mat2[i][j];
  50.     return Mat3;
  51. }
  52.  
  53. std::vector<std::vector<int>> PomnoziMatrice(std::vector<std::vector<int>> Mat1, std::vector<std::vector<int>> Mat2)
  54. {
  55.     if(BrojKolona(Mat1) != BrojRedova(Mat2)) throw std::domain_error("Matrice nisu saglasne za mnozenje!");
  56.     std::vector<std::vector<int>> Mat3(KreirajMatricu(BrojRedova(Mat1), BrojKolona(Mat2)));
  57.     for(int i(0); i < BrojRedova(Mat3); i++)
  58.         for(int j(0); j < BrojKolona(Mat3); j++)
  59.         {
  60.             int suma(0);
  61.             for(int k(0); k < BrojRedova(Mat3); k++)
  62.                 suma+=Mat1[i][k]*Mat2[k][j];
  63.             Mat3[i][j] = suma;
  64.         }
  65.     return Mat3;
  66. }
  67.  
  68. int main()
  69. {
  70.     try
  71.     {
  72.         int br_redova1(3), br_kolona1(3), br_redova2(3), br_kolona2(3);
  73.         std::vector<std::vector<int>> Mat1(KreirajMatricu(br_redova1, br_kolona1));
  74.         std::vector<std::vector<int>> Mat2(KreirajMatricu(br_redova2, br_kolona2));
  75.         Mat1 = UnesiMatricu(br_redova1, br_kolona1);
  76.         Mat2 = UnesiMatricu(br_redova2, br_kolona2);
  77.         IspisiMatricu(SaberiMatrice(Mat1, Mat2));
  78.         std::cout << std::endl;
  79.         IspisiMatricu(PomnoziMatrice(Mat1, Mat2));
  80.     }
  81.     catch(std::domain_error izuzetak)
  82.     {
  83.         std::cout << izuzetak.what() << std::endl;
  84.     }
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement