Advertisement
Viktor_Profa

Лабораторна робота №10

Oct 27th, 2024
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #include <stdexcept>
  6.  
  7. using namespace std;
  8.  
  9. // Шаблонна функція для сортування масиву
  10. template <typename T>
  11. void sortArray(T* arr, int size) {
  12.     sort(arr, arr + size);
  13. }
  14.  
  15. // Шаблонна функція для пошуку рядка за шаблоном
  16. bool matchesPattern(const string& str, const string& pattern) {
  17.     size_t strLen = str.size();
  18.     size_t patLen = pattern.size();
  19.  
  20.     // Динамічне програмування для зберігання результатів
  21.     vector<vector<bool>> dp(strLen + 1, vector<bool>(patLen + 1, false));
  22.     dp[0][0] = true; // Порожній шаблон збігається з порожнім рядком
  23.  
  24.     // Обробка шаблону, що містить зірочки
  25.     for (size_t j = 1; j <= patLen; ++j) {
  26.         if (pattern[j - 1] == '*') {
  27.             dp[0][j] = dp[0][j - 1];
  28.         }
  29.     }
  30.  
  31.     // Заповнення таблиці dp
  32.     for (size_t i = 1; i <= strLen; ++i) {
  33.         for (size_t j = 1; j <= patLen; ++j) {
  34.             if (pattern[j - 1] == '?' || pattern[j - 1] == str[i - 1]) {
  35.                 dp[i][j] = dp[i - 1][j - 1];
  36.             } else if (pattern[j - 1] == '*') {
  37.                 dp[i][j] = dp[i][j - 1] || dp[i - 1][j];
  38.             }
  39.         }
  40.     }
  41.  
  42.     return dp[strLen][patLen];
  43. }
  44.  
  45. // Шаблонна функція для операцій над матрицями
  46. template <typename T>
  47. class Matrix {
  48. private:
  49.     vector<vector<T>> data;
  50.     int rows;
  51.     int cols;
  52.  
  53. public:
  54.     Matrix(int r, int c) : rows(r), cols(c) {
  55.         data.resize(r, vector<T>(c));
  56.     }
  57.  
  58.     void setValue(int r, int c, T value) {
  59.         data[r][c] = value;
  60.     }
  61.  
  62.     T getValue(int r, int c) const {
  63.         return data[r][c];
  64.     }
  65.  
  66.     int getRows() const {
  67.         return rows;
  68.     }
  69.  
  70.     int getCols() const {
  71.         return cols;
  72.     }
  73.  
  74.     // Додавання матриць
  75.     Matrix operator+(const Matrix& other) {
  76.         if (rows != other.rows || cols != other.cols) {
  77.             throw invalid_argument("Розміри матриць не співпадають для додавання.");
  78.         }
  79.         Matrix result(rows, cols);
  80.         for (int i = 0; i < rows; ++i) {
  81.             for (int j = 0; j < cols; ++j) {
  82.                 result.setValue(i, j, data[i][j] + other.getValue(i, j));
  83.             }
  84.         }
  85.         return result;
  86.     }
  87.  
  88.     // Віднімання матриць
  89.     Matrix operator-(const Matrix& other) {
  90.         if (rows != other.rows || cols != other.cols) {
  91.             throw invalid_argument("Розміри матриць не співпадають для віднімання.");
  92.         }
  93.         Matrix result(rows, cols);
  94.         for (int i = 0; i < rows; ++i) {
  95.             for (int j = 0; j < cols; ++j) {
  96.                 result.setValue(i, j, data[i][j] - other.getValue(i, j));
  97.             }
  98.         }
  99.         return result;
  100.     }
  101.  
  102.     // Множення матриць
  103.     Matrix operator*(const Matrix& other) {
  104.         if (cols != other.rows) {
  105.             throw invalid_argument("Кількість стовпців першої матриці повинна дорівнювати кількості рядків другої матриці.");
  106.         }
  107.         Matrix result(rows, other.cols);
  108.         for (int i = 0; i < rows; ++i) {
  109.             for (int j = 0; j < other.cols; ++j) {
  110.                 for (int k = 0; k < cols; ++k) {
  111.                     result.setValue(i, j, result.getValue(i, j) + data[i][k] * other.getValue(k, j));
  112.                 }
  113.             }
  114.         }
  115.         return result;
  116.     }
  117. };
  118.  
  119. // Функція для демонстрації
  120. int main() {
  121.     // Демонстрація сортування
  122.     int arr[] = {5, 2, 9, 1, 5, 6};
  123.     int size = sizeof(arr) / sizeof(arr[0]);
  124.     sortArray(arr, size);
  125.     cout << "Відсортований масив: ";
  126.     for (int i = 0; i < size; i++) {
  127.         cout << arr[i] << " ";
  128.     }
  129.     cout << endl;
  130.  
  131.     // Демонстрація пошуку за шаблоном
  132.     string str = "hello";
  133.     string pattern = "h?llo";
  134.     cout << "Рядок " << (matchesPattern(str, pattern) ? "збігається" : "не збігається") << " з шаблоном." << endl;
  135.  
  136.     // Демонстрація матричних операцій
  137.     Matrix<int> mat1(2, 2);
  138.     mat1.setValue(0, 0, 1);
  139.     mat1.setValue(0, 1, 2);
  140.     mat1.setValue(1, 0, 3);
  141.     mat1.setValue(1, 1, 4);
  142.  
  143.     Matrix<int> mat2(2, 2);
  144.     mat2.setValue(0, 0, 5);
  145.     mat2.setValue(0, 1, 6);
  146.     mat2.setValue(1, 0, 7);
  147.     mat2.setValue(1, 1, 8);
  148.  
  149.     Matrix<int> sum = mat1 + mat2;
  150.     cout << "Сума матриць:\n";
  151.     for (int i = 0; i < sum.getRows(); ++i) {
  152.         for (int j = 0; j < sum.getCols(); ++j) {
  153.             cout << sum.getValue(i, j) << " ";
  154.         }
  155.         cout << endl;
  156.     }
  157.  
  158.     return 0;
  159. }
  160.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement