Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RJAVOI
0 / 0 / 0
Регистрация: 19.06.2010
Сообщений: 6
#1

ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ - C++

19.06.2010, 22:22. Просмотров 853. Ответов 1
Метки нет (Все метки)

Разработать алгоритм и программу на языке С++ решения следующих взаимосвязанных задач:
1) рассчитать элементы квадратной матрицы A=(aij ), i,j = 0,1,2,...,n-1 по заданной формуле;
2) сформировать из матрицы A элементы вектора X = (xi), i = 0,1,2,...,n-1 по заданному правилу;
3) провести заданное упорядочение элементов матрицы А или вектора Х.

1) Аij = pow(-2,i))/(pow(n,2)+1-i*j)

2) Xi - скалярное произведение k-го столбца на i-ю строку, где k- номер мак-симального элемента i-й строки;
3) упорядочить элементы столбцов матри-цы A по возрастанию абсолютных зна-чений;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2010, 22:22     ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ
Посмотрите здесь:

C++ Программирование операций из массивом структур
C++ Перегрузка операций
C++ Дерево операций
Чтение матричных данных из таблицы C++
C++ Вычисление матричных выражений через функции
Решение матричных игр. Есть у кого такая программа написанная уже... C++
Переопределение операций C++
Перегрузка операций C++
Вложенные циклы в матричных задачах C++
Реализация матричных операций через классы C++
C++ Перегрузка операций
Перезагрузка операций C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
20.06.2010, 01:37     ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//Разработать алгоритм и программу на языке С++ решения следующих 
//взаимосвязанных задач:
//1) рассчитать элементы квадратной матрицы A=(aij ), i,j = 0,1,2,...,n-1 
//по заданной формуле;
//2) сформировать из матрицы A элементы вектора X = (xi), i = 0,1,2,...,n-1 
//по заданному правилу;
//3) провести заданное упорядочение элементов матрицы А или вектора Х.
 
//1) Аij = pow(-2,i))/(pow(n,2)+1-i*j)
 
//2) Xi - скалярное произведение k-го столбца на i-ю строку, где k- номер 
//максимального элемента i-й строки;
//3) упорядочить элементы столбцов матри-цы A по возрастанию абсолютных зна-чений; 
#include <vector>
#include <iostream>
#include <algorithm>
#include <numeric>
#include <iomanip>
#include <cmath>
 
typedef double               T_elem;
typedef std::vector<T_elem>  T_row;
 
class T_dvumern_arr
{        
    typedef std::vector<T_row>   T_matrix;
    
    int                          n_;
    T_matrix                     matrix_;        
public:
    T_dvumern_arr(int  n) : n_(n), matrix_(n_, T_row(n_))
    {}
    //-----------------------------------------------------------
    T_dvumern_arr(T_matrix  matrix) : n_(matrix.size()), matrix_(matrix)
    {}
    //-----------------------------------------------------------
    T_matrix  get_transp_matrix()
    {        
        T_dvumern_arr  temp_dvumern_arr(n_);        
        for(int i = 0; i < n_; ++i)
        {
            for(int j = 0; j < n_; ++j)
            {                
                temp_dvumern_arr.matrix_[i][j] = matrix_[j][i];
            }
        }        
        return  temp_dvumern_arr.matrix_;
    }
    //-----------------------------------------------------------
    void calculate_matrix()
    {
        for(int i = 0; i < n_; ++i)
        {
            for(int j = 0; j < n_; ++j)
            {                
                matrix_[i][j] = pow(static_cast<T_elem>(-2), i) 
                                /(n_ * n_ + 1 - i * j);
            }
        }            
    }
    //-----------------------------------------------------------
    T_row  get_vector()
    {
        T_row  res_vector(n_);
        for(int i = 0; i < n_; ++i)
        {
            T_row  cur_row  = matrix_[i];
            int k = std::max_element(cur_row.begin(), cur_row.end()) - cur_row.begin();
            //Получаем k-й столбец:
            T_row  col_k = get_transp_matrix()[k];
            res_vector[i] 
            = std::inner_product(col_k.begin(), col_k.end(), cur_row.begin(), 0.0);
        }
        return  res_vector;
    }
    //-----------------------------------------------------------
    static struct T_uporjad_po_abs
    {
        bool operator() (T_elem e1, T_elem e2)
        {
            return abs(e1) < abs(e2);
        }
    };
    //-----------------------------------------------------------
    void uporjad_columns()
    {
        T_matrix  transp_matrix = get_transp_matrix();
        for(int i = 0; i < n_; ++i)
        {
            T_row  cur_col = transp_matrix[i];
            std::sort(cur_col.begin(), cur_col.end(), T_uporjad_po_abs());
        }
        T_dvumern_arr  transp_arr(transp_matrix);
        matrix_ = transp_arr.get_transp_matrix();
    }
    //-----------------------------------------------------------
    static void print_elem(T_elem  elem)
    {        
        std::cout << std::setw(12) 
                  << std::right 
                  << std::fixed 
                  << std::setprecision(4) 
                  << elem;      
    }
    //-----------------------------------------------------------
    static void print_row(T_row  row)
    {
        std::for_each(row.begin(), row.end(), print_elem);
        std::cout << std::endl;
    }
    //-----------------------------------------------------------
    void print()
    {
        std::for_each(matrix_.begin(), matrix_.end(), print_row);        
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "n = ";
    int n;
    do
    {
        std::cin >> n;
    }while(n <= 0);
    T_dvumern_arr  A(n);
    A.calculate_matrix();
    std::cout << std::endl
              << "Вычисленная матрица A:"
              << std::endl;
    A.print();
    T_row V = A.get_vector();
    std::cout << std::endl
              << "Вычисленный вектор V:"
              << std::endl;
    T_dvumern_arr::print_row(V);
    A.uporjad_columns();
    std::cout << std::endl
              << "Матрица A после упорядочения ее элементов столбцов по возрастанию"
              << std::endl
              << "абсолютных значений:"
              << std::endl;
    A.print();
    return 0;
}
Yandex
Объявления
20.06.2010, 01:37     ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ
Ответ Создать тему
Опции темы

Текущее время: 05:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru