Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] Дана вещественная квадратная матрица.


Автор: Daremez 31.1.2012, 22:51
 Дана вещественная квадратная матрица. Определить:
•    количество положительных элементов в заштрихованной области:
•    поменять порядок следования столбцов на обратный.
http://s1.ipicture.ru/Gallery/Viewfull/8293362.html

Автор: darkart 1.2.2012, 00:18
Код

#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;
}

Автор: Daremez 3.2.2012, 00:52
9 F:\cprog\2\main.cpp invalid conversion from `void*' to `float**' 
16 F:\cprog\2\main.cpp invalid conversion from `void*' to `float*' 

Автор: darkart 3.2.2012, 01:01
Что за компилятор?
Компилируете C или C++ код?

Автор: t_gran 3.2.2012, 02:41
Daremez, приведение типов сделайте.
Код

   // line 8
   matrix = (float**) malloc( dim * sizeof( *matrix ) );
   // ...
   // line 15
   matrix[ i ] = (float*) malloc( dim * sizeof( **matrix ) );

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)