#include <iostream>
#include <limits>
#include <iomanip>
#include <vector>
#include <valarray>
#include <cstdlib>
#include <ctime>
using namespace std;
// Количество строк
const size_t Rows=18;
// Позиция в матрице
class position
{
public:
position(size_t row,size_t col)
:_row(row)
,_col(col)
{}
size_t row() const {
return _row;
}
size_t col() const {
return _col;
}
private:
size_t _row,_col;
};
// Используемые типы для матрицы и вектора позиций
typedef valarray<valarray<double> > matrixType;
typedef vector<position> positionsType;
// Заполняет матрицу случайными числами
void genMatrix(matrixType& matrix)
{
for(size_t i=0,iEnd=matrix.size();i<iEnd;++i)
{
for(size_t j=0,jEnd=matrix[i].size();j<jEnd;++j)
{
matrix[i][j]=rand()%51-25;
cout<<setw(5)<<matrix[i][j]<<' ';
}
cout<<endl;
}
}
// Ищет максимальный по модулю и позиции таковых
double findMaxAbs(const matrixType& matrix,positionsType& positions)
{
positions.clear();
double absMax=0.0;
for(size_t i=0,iEnd=matrix.size();i<iEnd;++i)
{
for(size_t j=0,jEnd=matrix[i].size();j<jEnd;++j)
{
double item=abs(matrix[i][j]);
if(item>absMax)
{
absMax=item;
positions.clear();
}
if(item==absMax)
{
positions.push_back(position (i,j));
}
}
}
return absMax;
}
int main()
{
srand(static_cast<unsigned int>(time(0)));
size_t Cols;
// Вводим к-во столбцов
while(true)
{
cout<<"Введите количество столбцов(n):";
cin>>Cols;
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cout<<"Ошибка ввода"<<endl;
}
else
{
cin.ignore(numeric_limits<streamsize>::max(),'\n');
if(Cols>0)
{
break;
}
else
{
cout<<"Ожидается целое положительное число"<<endl;
}
}
}
// Матрица
matrixType matrix(valarray<double>(Cols),Rows);
// Заполним матрицу
genMatrix(matrix);
positionsType positions;
// Ищем согласно условия
double absMax=findMaxAbs(matrix,positions);
// Выводим результат
cout<<"Максимальный по модулю элемент: "<<absMax<<endl
<<"Позиции максимальных по модулю элементов:"<<endl
<<setw(7)<<"Строка"<<' '<<setw(7)<<"Столбец"<<endl;
for(positionsType::const_iterator it=positions.begin(),end=positions.end();it!=end;++it)
{
cout<<setw(7)<<it->row()<<' '<<setw(7)<<it->col()<<endl;
}
return 0;
}
~/Projects/174280/Debug/src$ ./174280
Введите количество столбцов(n):5
8 11 24 -4 -15
7 14 22 17 0
-7 -19 24 -5 -21
16 12 -16 21 -5
21 -8 -15 -17 1
6 17 -7 -10 -18
15 23 -7 13 19
-23 19 7 24 -16
-19 16 16 5 -14
20 -5 -3 3 15
17 -1 -18 -24 7
-18 -18 23 25 -3
4 14 20 -4 -25
13 -2 20 19 -4
3 25 -13 -7 -22
23 13 23 -6 -10
13 -15 14 -6 11
20 -25 18 -9 25
Максимальный по модулю элемент: 25
Позиции максимальных по модулю элементов:
Строка Столбец
11 3
12 4
14 1
17 1
17 4
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.