Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Дана вещественная квадратная матрица. 
:(
    Опции темы
Daremez
Дата 31.1.2012, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



 Дана вещественная квадратная матрица. Определить:
•    количество положительных элементов в заштрихованной области:
•    поменять порядок следования столбцов на обратный.
user posted image
PM MAIL   Вверх
darkart
Дата 1.2.2012, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Код

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


Это сообщение отредактировал(а) darkart - 1.2.2012, 01:25
PM MAIL WWW ICQ Skype GTalk   Вверх
Daremez
Дата 3.2.2012, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



9 F:\cprog\2\main.cpp invalid conversion from `void*' to `float**' 
16 F:\cprog\2\main.cpp invalid conversion from `void*' to `float*' 
PM MAIL   Вверх
darkart
Дата 3.2.2012, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Что за компилятор?
Компилируете C или C++ код?
PM MAIL WWW ICQ Skype GTalk   Вверх
t_gran
Дата 3.2.2012, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 33
Всего: 37



Daremez, приведение типов сделайте.
Код

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



--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.