#include
#include
#include
#include
using namespace std;
class MatrSquare
{
public:
int Row;
int Col;
double **Matr;
double *Matr0;
int indAlarm;
int r;
int c;
int i;
int ii, jj;
MatrSquare(int m, int i, int j)
{
Row= m; Col= m; ii= i; jj= j;
cout << "Матрица " << Row << " на " << Col << endl;
indAlarm=0;
}
~MatrSquare()
{
if( indAlarm )
{
for (c=0; c }
delete [] Matr ;
delete [] Matr0 ;
}
void MakeMatr()
{
if (Row<2 || Row>10) throw 15;
if (ii>Row || jj>Row) throw 16;
Matr = new double *[Row]; //Matr=NULL; //Тестовый код на аварию
if (Matr==NULL) throw 13;
for (i = 0; i < Row; ++i)
{
indAlarm= i;
Matr0 = new double [Col]; //if (i==2) {Matr0=NULL;} //Тестовый код на аварию
if (Matr0==NULL)
{
cout << "АВАРИЯ в строке " << indAlarm << endl;
throw 14;
}
else Matr[i] = Matr0;
}
}
void InitMatr()
{
double el;
for (r=0; r {
for (c=0; c {
el= double((r*10+c))/10;
Matr[r][c]= el;
}
}
}
void OutMatr()
{
for (int r=0; r {
for (int c=0; c cout << endl;
}
}
void elMatr()
{
cout << "Матрица " << Row << " на " << Col << endl;
cout << "Прямоугольник индексов = " << ii << " на " << jj << endl;
double sum= 0.0;
for (r=0; r<=ii; r++)
{for (c=0; c<=jj; c++) {sum+= Matr[r][c];}}
Matr[ii][jj]= sum;
}
};
int main(int argc, char **argv)
{
system("chcp 1251 > nul"); // Руссификация сообщений
setlocale(LC_ALL, "Russian");
MatrSquare mrv(5,4,3);
try{ mrv.MakeMatr(); }
catch (int i)
{
switch (i)
{
case 13: cout << "Ошибка выделения памяти. Закройте ненужные приложения";
break;
case 14: cout << "Ошибка выделения памяти под строку"; break;
case 15: cout << "Разумные границы матрицы 2х2 до 10х10"; break;
case 16: cout << "Индексы i и j должны быть меньше m-размера"; break;
}
}
mrv.InitMatr(); mrv.OutMatr();
cout << endl;
mrv.elMatr(); mrv.OutMatr();
system("pause"); // system("pause > nul");
return 0;
}
действительную матрицу b размером m x m, элемент bij которой равен
сумме элементов матрицы а, расположенных в области, определяемой
индексами i и j, как показано на рисунке.