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


Автор: Legus555555 8.6.2007, 23:22
Соседями элемента Аij в матрице назовем элементы Аkl ci-1≤k≤i+1, j-1≤l≤j+1, (k,l)≠(i,j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером 10 на 10.

    В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали. 


Заранее спасибо!

Автор: Dov 9.6.2007, 22:49
Код

#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <time.h>

#define SZ  10

double GetValue(double matr[][SZ], int row, int col)
{
    double sum   = 0.;
    int    count = -1;

    if(SZ < 2)
        return 0;

    for(int i = row - 1; i <= row + 1; i++)
    {
        if(i >= 0 && i <= SZ - 1)
            for(int j = col - 1; j <= col + 1; j++)
                if(j >= 0 && j <= SZ - 1)
                {
                    sum += matr[i][j];
                    count++;
                }
    }

    return (sum - matr[row][col]) / count;
}

int main()
{
    srand((unsigned)time(NULL));

    double source[SZ][SZ];
    double target[SZ][SZ];
    double sum_elem = 0.;
    int    i, j;

    cout << "Source:\n";
    for(i = 0; i < SZ; i++)
    {
        for(j = 0; j < SZ; j++)
        {
            source[i][j] = rand() % 50 - 24;
            cout << setw(8) << setprecision(4) << source[i][j];
        }
        cout << endl;
    }

    // Построить результат сглаживания заданной вещественной матрицы размером 10 на 10.
    cout << "\nTarget:\n";
    for(i = 0; i < SZ; i++)
    {
        for(j = 0; j < SZ; j++)
        {
            target[i][j] = GetValue(source, i, j);
            cout << setw(8) << target[i][j];
        }
        cout << endl;
    }

    // В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали
    cout << "\nFor sum elements:\n";
    for(i = 1; i < SZ; i++)
    {
        for(j = 0; j < i; j++)
        {
            sum_elem += fabs(target[i][j]);
            cout << setw(8)<< fabs(target[i][j]);
        }
        cout << endl;
    }

    cout << "\nSum elements: " << sum_elem << endl;
    cout << "\nPress any key to quit...\n";
    cin.get();

    return 0;
}

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