Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- using namespace std;
- const int MAXN = 100; // Максимальное количество строк
- const int MAXM = 100; // Максимальное количество столбцов
- const int inf = 1e9; // Бесконечность
- const char *inputFile = "../Text.txt"; // Матрица 7х7
- //const char *inputFile = "Text1.txt"; // Матрица 9х9
- //const char *inputFile = "Text2.txt"; // Пустой файл
- //const char *inputFile = "Text3.txt"; // Файл не найден
- //const char *inputFile = "Text4.txt"; // Файл с n (m) < 0
- //const char *inputFile = "Text5.txt"; // Файл, в котором кол-во заданных строк(столбцов) не соответвует действительности
- const char *outputFile = "Result.txt";
- // Чтение данных
- int ReadFile(int (&Matr)[MAXM][MAXN], int &n, int &m, ifstream &fin) {
- if (!fin) { // Файл не найден
- fin.close(); // Закрытие файла
- return 1; // Выход по ошибке
- }
- if (fin.eof()) { // Файл пуст
- fin.close(); // Закрытие файла
- return 2; // Выход по ошибке
- }
- fin >> n >> m;
- if (n <= 0 || m <= 0) {
- fin.close();
- return 3;
- }
- if (n != m) {
- fin.close();
- return 5;
- }
- // Считывание матрицы
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (fin.eof()) {
- fin.close();
- return 4;
- }
- fin >> Matr[i][j];
- }
- }
- if (!fin.eof()) {
- fin.close();
- return 4;
- }
- return 0;
- }
- // Проверки файла
- void Error(int ErrorNum, const char *FNAME) { // Полученный код ошибки
- cout << "Ошибка:" << endl;
- switch (ErrorNum) {
- case 1:
- cout << "Файл " << FNAME << " не найден!" << endl;
- break;
- case 2:
- cout << "Файл " << FNAME << "пуст!" << endl;
- break;
- case 3:
- cout << "Кол-во строк и столбцов в матрице не может быть <= 0!" << endl;
- break;
- case 4:
- cout << "Число строк или столбцов не соответствует заданному числу!" << endl;
- break;
- case 5:
- cout << "Матрица не квадратная!" << endl;
- break;
- default:
- cout << "Неизвестная ошибка " << endl;
- break;
- }
- }
- // Печать матрицы
- void PrintF(int Matr[MAXM][MAXN], int n, int m, ofstream &fout) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- cout << Matr[i][j] << " ";
- fout << Matr[i][j] << " ";
- }
- cout << endl;
- fout << endl;
- }
- }
- // Произведение отрицательных элементов матрицы выше главной диагонали
- int Multiply(int Matr[MAXN][MAXN], int n, int m, ofstream &fout) {
- int p = 1;
- bool check = false;
- for (int i = 0; i < n; i++) {
- for (int j = i + 1; j < m; j++) {
- if (Matr[i][j] < 0) {
- p = p * Matr[i][j];
- check = true;
- }
- }
- }
- if (check) {
- return p;
- } else {
- return 0;
- }
- }
- // Поиск минимального нечётного эл-та матрицы
- int Minimum(int Matr[MAXN][MAXN], int n, int m, ofstream &fout) {
- int min = inf;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (Matr[i][j] < min && (Matr[i][j]) % 2) {
- min = Matr[i][j];
- }
- }
- }
- return min;
- }
- int main() {
- ifstream fin(inputFile);// Файл с исходной матрицей
- ofstream fout(outputFile);// Файл вывода
- int ErrorNum;// Код ошибки
- int m; // Кол-во столбцов
- int n;// Кол-во строк
- int Matr[MAXM][MAXN];// Исходная матрица
- ErrorNum = ReadFile(Matr, n, m, fin); // Проверка кода ошибки
- if (ErrorNum != 0) {
- Error(ErrorNum, inputFile);
- return ErrorNum;
- }
- // Печать исходной матрицы
- cout << "\nИсходная матрица:" << endl;
- fout << "\nИсходная матрица:" << endl;
- PrintF(Matr, n, m, fout);
- // Произведение отр-ых эл-ов выше главной диагонали
- int mul = Multiply(Matr, n, m, fout);
- if (mul) {
- cout << "Произведение отрицательных элементов матрицы выше главной диагонали = " << mul << endl;
- fout << "Произведение отрицательных элементов матрицы выше главной диагонали = " << mul << endl;
- } else {
- cout << "Выше главной диагонали нет отрицательных элементов" << endl;
- fout << "Выше главной диагонали нет отрицательных элементов" << endl;
- }
- // Поиск наименьшего нечётного эл-та
- int min = Minimum(Matr, n, m, fout);
- if (min != inf) {
- cout << "Наименьший нечётный элемент матрицы = " << min << endl;
- fout << "Наименьший нечётный элемент матрицы = " << min << endl;
- } else {
- cout << "Матрица не содержит нечётных элементов" << endl;
- fout << "Матрица не содержит нечётных элементов" << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement