Код | #include<stdio.h>
#define MATRIX_DIM 5
int main( int argc, char* argv[] ) {
float matrix[ MATRIX_DIM ][ MATRIX_DIM ]; float temp;
int row, col, halfMatrixDim, rightCol, count;
printf( "Matrix %d x %d?\n", MATRIX_DIM, MATRIX_DIM );
for( row = 0; row < MATRIX_DIM; ++row ) { for( col = 0; col < MATRIX_DIM; ++col ) scanf( "%f", &matrix[ row ][ col ] ); }
printf( "Source matrix:\n" );
for( row = 0; row < MATRIX_DIM; ++row ) { for( col = 0; col < MATRIX_DIM; ++col ) printf( "%f\t", matrix[ row ][ col ] ); printf( "\n" ); }
halfMatrixDim = MATRIX_DIM / 2;
count = 0;
for( col = 0; col < halfMatrixDim; ++col ) { for( row = col; row < MATRIX_DIM - col; ++row ) { if( matrix[ row ][ col ] > 0.0f ) ++count; if( matrix[ row ][ MATRIX_DIM - col - 1 ] > 0.0f ) ++count; } }
if( MATRIX_DIM % 2 == 1 && matrix[ halfMatrixDim ][ halfMatrixDim ] > 0.0f ) ++count;
printf( "Count = %d\n", count );
for( col = 0; col < halfMatrixDim; ++col ) { rightCol = MATRIX_DIM - col - 1; for( row = 0; row < MATRIX_DIM; ++row ) { temp = matrix[ row ][ col ]; matrix[ row ][ col ] = matrix[ row ][ rightCol ]; matrix[ row ][ rightCol ] = temp; } }
printf( "Matrix after exchange:\n" );
for( row = 0; row < MATRIX_DIM; ++row ) { for( col = 0; col < MATRIX_DIM; ++col ) printf( "%f\t", matrix[ row ][ col ] ); printf( "\n" ); }
return 0; }
|
Вариант
Код | #include<stdlib.h> #include<stdio.h>
float** CreateMatrix( int dim ) { int i, j; float** matrix = NULL;
matrix = malloc( dim * sizeof( *matrix ) ); if( matrix != NULL ) { i = 0; do { matrix[ i ] = malloc( dim * sizeof( **matrix ) ); ++i; } while( i < dim && matrix[ i - 1 ] != NULL );
if( i < dim || ( i == dim && matrix[ dim - 1 ] == NULL ) ) { for( j = 0; j < i; ++j ) free( matrix[ j ] ); free( matrix ); matrix = NULL; } }
return matrix; }
void DestroyMatrix( float** matrix, int dim ) { if( matrix != NULL ) { int i; for( i = 0; i < dim; i++ ) free( matrix[ i ] ); free( matrix ); } }
void InputMatrix( float** matrix, int dim ) { int row, col; for( row = 0; row < dim; ++row ) for( col = 0; col < dim; ++col ) scanf( "%f", &matrix[ row ][ col ] ); }
void PrintMatrix( float** matrix, int dim ) { int row, col; for( row = 0; row < dim; ++row ) { for( col = 0; col < dim; ++col ) printf( "%f\t", matrix[ row ][ col ] ); printf( "\n" ); } }
void ExchangeMatrixColumns( float** matrix, int dim ) { int row, col, halfMatrixDim, rightCol; float temp;
halfMatrixDim = dim / 2;
for( col = 0; col < halfMatrixDim; ++col ) { rightCol = dim - col - 1; for( row = 0; row < dim; ++row) { temp = matrix[ row ][ col ]; matrix[ row ][ col ] = matrix[ row ][ rightCol ]; matrix[ row ][ rightCol ] = temp; } } }
int GetNumberOfPositiveElementsForMatrix( float** matrix, int dim ) { int row, col, count, halfMatrixDim;
halfMatrixDim = dim / 2;
count = 0;
for( col = 0; col < halfMatrixDim; ++col ) { for( row = col; row < dim - col; ++row ) { if( matrix[ row ][ col ] > 0.0f ) ++count; if( matrix[ row ][ dim - col - 1 ] > 0.0f ) ++count; } }
if( dim % 2 == 1 && matrix[ halfMatrixDim ][ halfMatrixDim ] > 0.0f ) ++count;
return count; }
int main( int argc, char* argv[] ) { int dim, result; float** matrix = NULL;
printf( "Matrix dimension?\n" );
scanf( "%d", &dim );
matrix = CreateMatrix( dim );
if( matrix == NULL ) { printf( "CreateMatrix failed.\n" ); system( "pause" ); return 0; }
printf( "Matrix %d x %d?\n", dim, dim );
InputMatrix( matrix, dim );
printf( "Source matrix:\n" );
PrintMatrix( matrix, dim );
result = GetNumberOfPositiveElementsForMatrix( matrix, dim );
printf( "Count = %d\n", result );
ExchangeMatrixColumns( matrix, dim );
printf( "Matrix after exchange:\n" );
PrintMatrix( matrix, dim );
DestroyMatrix( matrix, dim );
system( "pause" );
return 0; }
|
|