Матрица с fstream. Найти максимум среди отрицательных и минимум среди положительных элементов
Составить программу нахождения максимального элемента среди отрицательных чисел и минимального элемента среди положительных для каждой строки матрицы.
//пример:
//-1 2 3 min 2 max -1
//4 -5 6 min 4 max -5
//7 8 9 min 7 max нет
#include <iostream>
#include <locale.h>
#include <fstream>
using namespace std;
void FileOpen(fstream &f, char *fname, ios_base::openmode mode);
void FileRead(fstream &f, int &N, int &M, int **&a);
void CountData(int &N, int &M, int **&a, int *&arMin, int *&arMax);
void FileClose(fstream &f);
void FileOut(fstream &f, int &N, int &M, int **&a, int *&arMin, int *&arMax);
int main()
{
setlocale(LC_ALL, "rus");
fstream fin, fout;
FileOpen(fin, "in.txt", ios::in);
int N;
int M;
int **a;
FileRead(fin, N, M, a);
int *arMin;
arMin = new int[N];
int *arMax;
arMax = new int[N];
CountData(N, M, a, arMin, arMax);
FileClose(fin);
FileOpen(fout, "out.txt", ios::out);
FileOut(fout, N, M, a, arMin, arMax);
FileClose(fout);
return 0;
}
void FileOpen(fstream &f, char *fname, ios_base::openmode mode)
{
f.open(fname, mode);
if (!f)
{
cout << "Ошибка 1: Файла " << fname << " нет на диске" << endl;
system("pause");
exit(1);
}
}
void FileClose(fstream &f)
{
f.close();
}
void FileRead(fstream &f, int &N, int &M, int **&a)
{
f >> ws;
f.ignore(4, '=');
f>> N;
if (N <= 0 || !f)
{
cout << "Ошибка 2: Ошибка ввода строк матрицы";
system("pause");
exit(2);
}
f >> ws;
f.ignore(4, '=');
f >> M;
if (M <= 0 || !f)
{
cout << "Ошибка 3: Ошибка ввода столбцов матрицы";
system("pause");
exit(3);
}
a = new int *[N];
for (int i = 0; i < N; i++)
{
a[i] = new int[M];
}
f >> ws;
for (int i = 0; i<N; i++)
{
for (int j = 0; j<M; j++)
{
f >> a[i][j];
if (!f)
{
cout << "Ошибка 4: Ошибка ввода элементов";
system("pause");
exit(4);
}
}
}
}
void FileOut(fstream &f, int &N, int &M, int **&a, int *&arMin, int *&arMax)
{
f << "Составить программу нахождения максимального элемента среди отрицательных " << endl;
f << "и минимального элемента среди положительных для каждой строки матрицы.";
f << endl << endl << "Данная матрица: " << endl;
for (int i = 0; i<N; i++)
{
for (int j = 0; j<M; j++)
{
f << a[i][j] << "\t";
}
f << endl;
}
f << endl;
f << "Решение задачи: " << endl;
for (int i = 0; i<N; i++)
{
if (arMin[i] == 1000) f << "Минимальный положительный элемент " << i + 1 << " строки отсутствует" << endl;
else f << "Минимальный положительный элемент " << i + 1 << " строки: " << arMin[i] << endl;
if (arMax[i] == -1000) f << "Максимальный отрицательный элемент " << i + 1 << " строки отсутствует" << endl;
else f << "Максимальный отрицательный элемент " << i + 1 << " строки:" << arMax[i] << endl;
f << endl;
}
}
void CountData(int &N, int &M, int **&a, int *&arMin, int *&arMax)
{
int max = -1000;
int min = 1000;
for (int i = 0; i<N; i++)
{
for (int j = 0; j<M; j++)
{
if ((a[i][j]>max) && (a[i][j]<0)) max = a[i][j];
if ((a[i][j]<min) && (a[i][j]>0)) min = a[i][j];
}
arMax[i] = max;
arMin[i] = min;
max = -1000;
min = 1000;
}
}
у меня вопрос. как min и max найти без константы? (-1000 и 1000)
Источник: Stack Overflow на русском