Соседями элемента Аij в матрице назовем элементы Аkl с i—1≤k≤i+1, j—1≤l≤j+1, (k, l)≠(i, j). Операция сглаживания матрицы дает новую матрицу того же размера,
каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы.
- построить результат сглаживания заданной вещественной матрицы размером 10 на 10;
- в сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<math.h> #include<windows.h> #include<iomanip.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text); int main(int argc, char* argv[]) { randomize(); int n=10,i,j,l,k; float sum=0; cout<<rus("Введите размерность массива:")<<endl; cout<<rus("Введите количество строк и столбцов: n=")<<n; float **a=new float*[n]; for(i=0;i<n;i++)a[i]=new float[n]; float **a1=new float*[n]; for(k=0;k<n;k++)a1[k]=new float[n]; //--------------------------------------------------------------------------- cout<<rus("\nВведите элементы массива:\n\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { a[i][j]=-2.1+random(10.1); cout<<setw(5)<<a[i][j]; } cout<<endl; } //--------------------------------------------------------------------------- for(i=0,k=0;i<n,k<n;i++,k++) { for(j=0,l=0;j<n,l<n;j++,l++) { if(i==0) { if(j==0) a1[k][l]=(a[i][j+1]+a[i+1][j])/2; } if(i==0) { if(j>0&&j<(n-1)) a1[k][l]=(a[i][j+1]+a[i][j-1]+a[i+1][j])/3; } if(i==0) { if(j==(n-1)) a1[k][l]=(a[i][j-1]+a[i+1][j])/2; } if(i>0&&i<(n-1)) { if(j==0)a1[k][l]=(a[i][j+1]+a[i-1][j]+a[i+1][j])/3; } if(i>0&&i<(n-1)) { if(j>0&&j<(n-1))a1[k][l]=(a[i][j+1]+a[i][j-1]+a[i-1][j]+a[i+1][j])/4; } if(i>0&&i<(n-1)) { if(j==(n-1))a1[k][l]=(a[i][j-1]+a[i-1][j]+a[i+1][j])/3; } if(i==(n-1)) { if(j==0)a1[k][l]=(a[i][j+1]+a[i-1][j])/2; } if(i==(n-1)) { if(j>0&&j<(n-1))a1[k][l]=(a[i][j+1]+a[i][j-1]+a[i-1][j])/3; } if(i==(n-1)) { if(j==(n-1))a1[k][l]=(a[i][j-1]+a[i-1][j])/2; } } } cout<<rus("\nСглаженная матрица:\n\n"); for(k=0;k<n;k++) { for(l=0;l<n;l++) cout<<setw(10)<<a1[k][l]; cout<<endl; } //--------------------------------------------------------------------------- for(k=0;k<n;k++) { for(l=0;l<n;l++) //сумма элементов { //расположенных ниже if(l<k) //главной диагонали { //матрицы sum+=fabs(a1[k][l]); } } } cout<<rus("\nСумма модулей элементов расположенных ниже главной диагонали матрицы: "); cout<<sum; getch(); return 0; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text, bufrus); return bufrus; } //---------------------------------------------------------------------------
Результат работы программы: