NickAndNick

Матрица. Поиск положительной строки

May 16th, 2018
208
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <iomanip>
  5. #include <vector>
  6. using namespace std;
  7. struct Сonstraints {
  8.     Сonstraints() :
  9.         min_size_rows(1U),
  10.         max_size_rows(100U),
  11.         min_size_columns(1U),
  12.         max_size_columns(100U),
  13.         min_value(-1000),
  14.         max_value(1000) {
  15.     }
  16.     size_t min_size_rows;
  17.     size_t max_size_rows;
  18.     size_t min_size_columns;
  19.     size_t max_size_columns;
  20.     int min_value;
  21.     int max_value;
  22. };
  23. struct Error {
  24.     bool error;
  25.     string message;
  26. };
  27. class Matrix {
  28. public:
  29.     Error load(const string& path, const Сonstraints& con) {
  30.         matrix_.clear();
  31.         ifstream file(path);
  32.         Error info{false, "Good"};
  33.         if (file.is_open()) {
  34.             size_t n, m;
  35.             file >> n >> m;
  36.             int value;
  37.             if (n < con.min_size_rows) {
  38.                 info.error = true;
  39.                 info.message = "the number of rows is insufficient";
  40.             } else if (m < con.min_size_columns) {
  41.                 info.error = true;
  42.                 info.message = "the number of columns is insufficient";
  43.             } else if (n > con.max_size_rows) {
  44.                 info.error = true;
  45.                 info.message = "the number of rows is redundant";
  46.             } else if (m > con.max_size_columns) {
  47.                 info.error = true;
  48.                 info.message = "the number of columns is redundant";
  49.             }
  50.             if (info.error) return info;
  51.             for (size_t i = 0; i < n; ++i) {
  52.                 vector<int> row;
  53.                 for (size_t j = 0; j < m; ++j) {
  54.                     file >> value;
  55.                     if (value < con.min_value || value > con.max_value) {
  56.                         info.error = true;
  57.                         info.message = "file contains invalid values";
  58.                         matrix_.clear();
  59.                         return info;
  60.                     }
  61.                     row.push_back(value);
  62.                 }
  63.                 matrix_.emplace_back(row);
  64.             }
  65.             file.close();
  66.         }
  67.         return info;
  68.     }
  69.     bool find_positive_row()const {
  70.         for (const auto &row : matrix_) {
  71.             auto flag = true;
  72.             for (const auto value : row) {
  73.                 if (value < 0) {
  74.                     flag = false;
  75.                     break;
  76.                 }
  77.             }
  78.             if (flag) return flag;
  79.         }
  80.         return false;
  81.     }
  82. private:
  83.     vector<vector<int>> matrix_;  
  84. };
  85. int main() {
  86.     const auto path = "file.txt"s;
  87.     const Сonstraints con;
  88.     Matrix matrix;
  89.     const auto status = matrix.load(path, con);
  90.     if (status.error) cout << "Error: " << status.message << '\n';
  91.     else {
  92.         if (matrix.find_positive_row()) cout << "YES";
  93.         else cout << "NO";
  94.         cout.put('\n');
  95.     }
  96.     system("pause");
  97. }
RAW Paste Data