#include <iostream>
#include <locale>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <stdexcept>
using namespace std;
// Количество строк и столбцов в матрице
const size_t ROWS=5,COLS=7;
// Диапазон для элементов согласно условия
const int LO=-70,HI=20;
// Зполняет матрицу элементами из заданного диапазона [lo..hi)
template<size_t _ROWS,size_t _COLS,class _Ty>
void fillMatrix(_Ty (&matrix)[_ROWS][_COLS],int lo,int hi)
{
//
double coeff=static_cast<double>(hi-lo)/RAND_MAX;
for(size_t i=0;i<_ROWS;++i)
{
for(size_t j=0;j<_COLS;++j)
{
matrix[i][j]=static_cast<_Ty>(lo+rand()*coeff);
}
}
}
// Выводит матрицу на экран
template<size_t _ROWS,size_t _COLS,class _Ty>
void printMatrix(const char* const message,_Ty (&matrix)[_ROWS][_COLS])
{
cout<<message<<endl;
for(size_t i=0;i<_ROWS;++i)
{
for(size_t j=0;j<_COLS;++j)
{
cout<<setw(4)<<matrix[i][j]<<' ';
}
cout<<endl;
}
}
// Меняет заданные строки местами
template<size_t _ROWS,size_t _COLS,class _Ty>
void swapRowsMatrix(_Ty (&matrix)[_ROWS][_COLS],size_t row1,size_t row2)
{
if(row1<_ROWS && row2<_ROWS)
{
for(size_t j=0;j<_COLS;++j)
{
// Меняем элементы местами
swap(matrix[row1][j],matrix[row2][j]);
}
}
else
{
throw invalid_argument("Номер строки выходит за допустимый диапазон");
}
}
int main()
{
locale::global(locale(""));
srand(static_cast<unsigned int>(time(0)));
// Матрица
int matrix[ROWS][COLS];
// Заполним матрицу
fillMatrix(matrix,LO,HI);
// Распечатаем ее
printMatrix("Матрица:",matrix);
// Вводим номера строк
cout<<"Введите номера строк для обмена:";
size_t row1,row2;
cin>>row1>>row2;
// Проверим на ошибки ввода
if(cin.fail())
{
cout<<"Ошибочный ввод"<<endl;
}
else
{
try
{
// Обменяем строки
swapRowsMatrix(matrix,row1,row2);
// Распечатаем после обмена
printMatrix("Матрица после перестановки:",matrix);
}
catch(invalid_argument& ex)
{
cout<<ex.what()<<endl;
}
}
system("PAUSE");
return 0;
}
Матрица:
10 9 -36 -30 -39 5 3
-25 17 -21 4 -21 -21 -65
-9 1 -10 -58 8 6 1
-48 0 11 -69 -10 8 -68
17 -41 9 -69 3 -18 -62
Введите номера строк для обмена:1 4
Матрица после перестановки:
10 9 -36 -30 -39 5 3
17 -41 9 -69 3 -18 -62
-9 1 -10 -58 8 6 1
-48 0 11 -69 -10 8 -68
-25 17 -21 4 -21 -21 -65
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.