Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.96 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. const int MAXN = 100; // Максимальное количество строк
  7. const int MAXM = 100; // Максимальное количество столбцов
  8. const int inf = 1e9; // Бесконечность
  9. const char *inputFile = "../Text.txt"; // Матрица 7х7
  10. //const char *inputFile = "Text1.txt"; // Матрица 9х9
  11. //const char *inputFile = "Text2.txt"; // Пустой файл
  12. //const char *inputFile = "Text3.txt"; // Файл не найден
  13. //const char *inputFile = "Text4.txt"; // Файл с n (m) < 0
  14. //const char *inputFile = "Text5.txt"; // Файл, в котором кол-во заданных строк(столбцов) не соответвует действительности
  15. const char *outputFile = "Result.txt";
  16.  
  17. // Чтение данных
  18. int ReadFile(int (&Matr)[MAXM][MAXN], int &n, int &m, ifstream &fin) {
  19.     if (!fin) { // Файл не найден
  20.         fin.close(); // Закрытие файла
  21.         return 1; // Выход по ошибке
  22.     }
  23.     if (fin.eof()) { // Файл пуст
  24.         fin.close(); // Закрытие файла
  25.         return 2; // Выход по ошибке
  26.     }
  27.  
  28.     fin >> n >> m;
  29.  
  30.     if (n <= 0 || m <= 0) {
  31.         fin.close();
  32.         return 3;
  33.     }
  34.    
  35.     if (n != m) {
  36.         fin.close();
  37.         return 5;
  38.     }
  39.  
  40.     // Считывание матрицы
  41.     for (int i = 0; i < n; i++) {
  42.         for (int j = 0; j < m; j++) {
  43.             if (fin.eof()) {
  44.                 fin.close();
  45.                 return 4;
  46.             }
  47.             fin >> Matr[i][j];
  48.         }
  49.     }
  50.     if (!fin.eof()) {
  51.         fin.close();
  52.         return 4;
  53.     }
  54.  
  55.     return 0;
  56. }
  57.  
  58. // Проверки файла
  59. void Error(int ErrorNum, const char *FNAME) { // Полученный код ошибки
  60.     cout << "Ошибка:" << endl;
  61.     switch (ErrorNum) {
  62.         case 1:
  63.             cout << "Файл " << FNAME << " не найден!" << endl;
  64.             break;
  65.         case 2:
  66.             cout << "Файл " << FNAME << "пуст!" << endl;
  67.             break;
  68.         case 3:
  69.             cout << "Кол-во строк и столбцов в матрице не может быть <= 0!" << endl;
  70.             break;
  71.         case 4:
  72.             cout << "Число строк или столбцов не соответствует заданному числу!" << endl;
  73.             break;
  74.         case 5:
  75.             cout << "Матрица не квадратная!" << endl;
  76.             break;
  77.         default:
  78.             cout << "Неизвестная ошибка " << endl;
  79.             break;
  80.     }
  81. }
  82.  
  83. // Печать матрицы
  84. void PrintF(int Matr[MAXM][MAXN], int n, int m, ofstream &fout) {
  85.     for (int i = 0; i < n; i++) {
  86.         for (int j = 0; j < m; j++) {
  87.             cout << Matr[i][j] << " ";
  88.             fout << Matr[i][j] << " ";
  89.         }
  90.         cout << endl;
  91.         fout << endl;
  92.     }
  93. }
  94.  
  95. // Произведение отрицательных элементов матрицы выше главной диагонали
  96. int Multiply(int Matr[MAXN][MAXN], int n, int m, ofstream &fout) {
  97.     int p = 1;
  98.     bool check = false;
  99.     for (int i = 0; i < n; i++) {
  100.         for (int j = i + 1; j < m; j++) {
  101.             if (Matr[i][j] < 0) {
  102.                 p = p * Matr[i][j];
  103.                 check = true;
  104.             }
  105.         }
  106.     }
  107.     if (check) {
  108.         return p;
  109.     } else {
  110.         return 0;
  111.     }
  112. }
  113.  
  114. // Поиск минимального нечётного эл-та матрицы
  115. int Minimum(int Matr[MAXN][MAXN], int n, int m, ofstream &fout) {
  116.     int min = inf;
  117.     for (int i = 0; i < n; i++) {
  118.         for (int j = 0; j < m; j++) {
  119.             if (Matr[i][j] < min && (Matr[i][j]) % 2) {
  120.                 min = Matr[i][j];
  121.             }
  122.         }
  123.     }
  124.     return min;
  125. }
  126.  
  127. int main() {
  128.     ifstream fin(inputFile);// Файл с исходной матрицей
  129.     ofstream fout(outputFile);// Файл вывода
  130.     int ErrorNum;// Код ошибки
  131.     int m; // Кол-во столбцов
  132.     int n;// Кол-во строк
  133.     int Matr[MAXM][MAXN];// Исходная матрица
  134.  
  135.     ErrorNum = ReadFile(Matr, n, m, fin); // Проверка кода ошибки
  136.  
  137.     if (ErrorNum != 0) {
  138.         Error(ErrorNum, inputFile);
  139.         return ErrorNum;
  140.     }
  141.  
  142.     // Печать исходной матрицы
  143.     cout << "\nИсходная матрица:" << endl;
  144.     fout << "\nИсходная матрица:" << endl;
  145.     PrintF(Matr, n, m, fout);
  146.  
  147.     // Произведение отр-ых эл-ов выше главной диагонали
  148.     int mul = Multiply(Matr, n, m, fout);
  149.     if (mul) {
  150.         cout << "Произведение отрицательных элементов матрицы выше главной диагонали = " << mul << endl;
  151.         fout << "Произведение отрицательных элементов матрицы выше главной диагонали = " << mul << endl;
  152.     } else {
  153.         cout << "Выше главной диагонали нет отрицательных элементов" << endl;
  154.         fout << "Выше главной диагонали нет отрицательных элементов" << endl;
  155.     }
  156.  
  157.     // Поиск наименьшего нечётного эл-та
  158.     int min = Minimum(Matr, n, m, fout);
  159.     if (min != inf) {
  160.         cout << "Наименьший нечётный элемент матрицы = " << min << endl;
  161.         fout << "Наименьший нечётный элемент матрицы = " << min << endl;
  162.     } else {
  163.         cout << "Матрица не содержит нечётных элементов" << endl;
  164.         fout << "Матрица не содержит нечётных элементов" << endl;
  165.     }
  166.  
  167.     return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement