#include <stdio.h>
#include <math.h>
const int N = 5;
double a[ N ][ N ];
double b[ N ][ N ];
void fill_a() {
for ( int i = 0; i < N; i++ ) {
for ( int j = 0; j < N; j++ ) {
a[ i ][ j ] = sin( ( i + 1 ) + 2 * ( j + 1 ) );
}
}
}
void smooth() {
for ( int i = 1; i < N - 1; i++ ) {
for ( int j = 1; j < N - 1; j++ ) {
b[ i ][ j ] = 0;
for ( int ii = i - 1; ii < i + 1; ii++ ) {
for ( int jj = j - 1; jj < j + 1; jj++ ) {
b[ i ][ j ] += a[ ii ][ jj ];
}
}
b[ i ][ j ] /= 9;
}
}
for ( int i = 0; i < N; i++ ) {
b[ i ][ 0 ] = a[ i ][ 0 ];
b[ i ][ N - 1 ] = a[ i ][ N - 1 ];
b[ 0 ][ i ] = a[ 0 ][ i ];
b[ N - 1 ][ i ] = a[ N - 1 ][ i ];
}
}
int max_element_column() {
double max_elem = -2.0;
int max_column = 0;
for ( int i = 0; i < N; i++ ) {
for ( int j = 0; j < N; j++ ) {
if ( b[ i ][ j ] > max_elem ) {
max_elem = b[ i ][ j ];
max_column = j;
}
}
}
return max_column;
}
double count_g( int column ) {
double g = 1.0;
for ( int i = 0; i < N - 1; i++ ) {
g *= b[ i ][ column ] * b[ i + 1 ][ column ];
}
return g;
}
void print_matrix( double (&m)[ N ][ N ] ) {
for ( int i = 0; i < N; i++ ) {
for ( int j = 0; j < N; j++ ) {
printf( "%.2f ", m[ i ][ j ] );
}
printf( "\n" );
}
}
void print_x( int column ) {
for ( int i = 0; i < N; i++ ) {
printf( "%.2f ", b[ i ][ column ] );
}
printf( "\n" );
}
int main() {
fill_a();
smooth();
int max_column = max_element_column();
double u = count_g( max_column );
printf( "A:\n" );
print_matrix( a );
printf( "-----------\n" );
printf( "B:\n" );
print_matrix( b );
printf( "-----------\n" );
printf( "x = " );
print_x( max_column );
printf( "u = %f\n", u );
return 0;
}