Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- const int NMAX = 100; // Максимальный размер строк
- const int MMAX = 100; // Максимальный размер столбцов
- //const char *F1 = "Text.txt"; // Матрица 7х7
- //const char *F1 = "Text1.txt"; // Матрица 9х9
- //const char *F1 = "Text2.txt"; // Пустой файл
- //const char *F1 = "Text3.txt"; // Файл не найден
- //const char *F1 = "Text4.txt"; // Файл с n (m) < 0
- const char *F1 = "Text5.txt"; // Файл, в котором кол-во заданных строк(столбцов) не соответвует действительности
- const char *FR = "Result.txt";
- // Чтение данных
- int ReadFile(int(&Matr)[MMAX][NMAX] // Исходная матрица
- , int &n // Кол-во строк
- , int &m // Кол-во столбцов
- , ifstream &fin); // Файл для вывода
- // Проверки файла
- void Error(int ErrorNum, const char *FNAME);// Код ошибки
- // Печать матрицы
- void PrintF(int Matr[MMAX][NMAX] // Исходная матрица
- , int n // Кол-во строк
- , int m // Кол-во столбцов
- , ofstream &fout); // Файл вывода
- int Multiply(int Matr[NMAX][NMAX]
- , int n
- , int m
- , ofstream &fout);
- int Minimum(int Matr[NMAX][NMAX]
- , int n
- , int m
- , ofstream &fout);
- int main()
- {
- setlocale(LC_ALL, "rus");
- ofstream fout(FR);// Файл вывода
- ifstream fin1(F1);// Файл с исходной матрицей
- int ErrorNum;// Код ошибки
- int m; // Кол-во столбцов
- int n;// Кол-во строк
- int Matr[MMAX][NMAX];// Исходная матрица
- ErrorNum = ReadFile(Matr, n, m, fin1); // Проверка кода ошибки
- if (ErrorNum != 0)
- {
- Error(ErrorNum, F1);
- }
- else
- {
- // Печать исходной матрицы
- cout << "\nИсходная матрица:" << endl;
- fout << "\nИсходная матрица:" << endl;
- PrintF(Matr, n, m, fout);
- // Произведение отр-ых эл-ов ВЫШЕ главной диагонали
- cout << "Произведение отрицательных элементов матрицы ВЫШЕ главной диагонали = ";
- fout << "Произведение отрицательных элементов матрицы ВЫШЕ главной диагонали = ";
- Multiply(Matr, n, m, fout);
- // Поиск наименьшего нечётного эл-та
- cout << "\nНаименьший нечётный элемент матрицы = ";
- fout << "\nНаименьший нечётный элемент матрицы = ";
- Minimum(Matr, n, m, fout);
- cout << endl;
- }
- system("pause");
- return 0;
- }
- // Описание представленных функций
- int ReadFile(int(&Matr)[MMAX][NMAX] // Исходная матрица
- , int &n // Кол-во строк
- , int &m // Кол-во столбцов
- , ifstream &fin)
- {
- cout << "\nЧтение файла с матрицей:\n";
- if (!fin) // Файл не найден
- {
- fin.close(); // Закрытие файла
- return 1; // Выход по ошибке
- }
- if (fin.eof())// Файл пуст
- {
- fin.close(); // Закрытие файла
- return 2; // Выход по ошибке
- }
- fin >> n >> m;
- if (n < 0)
- {
- fin.close();
- return 3;
- }
- if (m < 0)
- {
- fin.close();
- return 3;
- }
- if (fin.fail())
- {
- fin.close(); // Закрытие файла
- return 4; // Выход по ошибке
- }
- // Проверка соответсвия столбцов и строк
- if (fin.is_open())
- {
- // Посчитаем сколько чисел в файле
- int count = 0;// Число чисел в файле
- int temp;// Временная переменная
- char symbol;
- int count_space = 0;
- while (!fin.eof())
- {
- fin >> temp;
- count++;
- }
- fin.seekg(0, ios::beg);
- fin.clear();
- while (!fin.eof())
- {
- fin.get(symbol);// Текущий символ
- if (symbol == ' ') count_space++;
- if (symbol == '\n')
- break;
- }
- fin.seekg(0, ios::beg);
- fin.clear();
- // Вывод матрицы
- int newn = count / (count_space + 1);// Число строк
- int newm = count_space + 1;// Число столбцов
- if (newn != n)
- {
- fin.close(); // Закрытие файла
- return 5; // Выход по ошибке
- }
- if (newm != m)
- {
- fin.close(); // Закрытие файла
- return 5; // Выход по ошибке
- }
- }
- // Считывание матрицы
- for (int j = 0; j < n; j++)
- {
- for (int i = 0; i < m; i++)
- {
- fin >> Matr[i][j];
- if (fin.fail())// Не число
- {
- fin.close(); // Закрытие файла
- return 3; // Выход по ошибке
- }
- }
- }
- return 0;
- }
- //Ошибки
- void Error(int ErrorNum, const char *FNAME)//полученный код ошибки
- {
- cout << "Ошибка: \n";
- switch (ErrorNum)
- {
- case 1:cout << "Файл " << FNAME << " не найден !" << endl;
- break;
- case 2:cout << "Файл " << FNAME << "пуст !" << endl;
- break;
- case 3:cout << "Кол-во строк и столбцов в матрице не может быть < 0 !" << endl;
- break;
- case 4:cout << "Ошибка при чтении файла ! " << FNAME << endl;
- break;
- case 5:cout << "Число строк или столбцов не соответствует заданному числу ! " << endl;
- break;
- default:cout << "Неизвестная ошибка !\n";
- break;
- }
- }
- // Произведение отрицательных элементов матрицы ВЫШЕ главной диагонали
- int Multiply(int Matr[NMAX][NMAX]
- , int n
- , int m
- , ofstream &fout)
- {
- int i = 0;
- int j = 0;
- int p = 1;
- for (j = 0; j < n; j++)
- {
- for (i = 0; i < m; i++)
- {
- if (j < i)
- {
- if (Matr[i][j] < 0)
- p = p * Matr[i][j];
- }
- }
- }
- cout << p;
- fout << p;
- return p;
- }
- // Поиск минимального нечётного эл-та матрицы
- int Minimum(int Matr[NMAX][NMAX]
- , int n
- , int m
- , ofstream &fout)
- {
- int i;
- int j;
- int min = INT_MAX;
- for (j = 0; j < n; j++)
- {
- for (i = 0; i < m; i++)
- {
- if ((Matr[i][j] < min) && ((Matr[i][j]) % 2))
- {
- min = Matr[i][j];
- }
- }
- }
- cout << min;
- fout << min;
- return min;
- }
- // Печать матрицы
- void PrintF(int Matr[MMAX][NMAX] // Исходная матрица
- , int n // Кол-во строк
- , int m // Кол-во столбцов
- , ofstream &fout)
- {
- for (int j = 0; j < n; j++)
- {
- for (int i = 0; i < m; i++)
- {
- cout << Matr[i][j] << " ";
- fout << Matr[i][j] << " ";
- }
- cout << endl;
- fout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement