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

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

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

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

19.06.2010, 22:22. Просмотров 875. Ответов 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++
Прива всем, Пацаны помогите лабу 21 зделать. Тема: Программирование операций из массивом структур. Задание: Ввести перелік студентів,...

Чтение матричных данных из таблицы - C++
Имеется текстовый файл с таблицей чисел: 2 3 7 1 4 6 2 4 7 1 5 1 3 0 Нужно по отдельность прочитать цифры через пробел...

Вложенные циклы в матричных задачах - C++
Данная матрица М * N. Для каждого столбца с четным номером (2,4, ....) найти сумму его элементов. Условный оператор (IF) не использовать.

Вычисление матричных выражений через функции - C++
Вычисление матричных выражений с помощью функций A*(B-C). написал код, компилятор ругается чёт, взгляните в чём ощибка? #include...

Решение матричных игр. Есть у кого такая программа написанная уже... - C++
Требуется программа по решению матричных игр... С выбором размера матрицы и выдачей решения... Может кто смогёт такую сбатцать?

Перезагрузка операций - C++
Всем привет, есть такая задача. Создать класс - дата с полями в закрытой части: день (1-31), месяц (1-12), год (целое число). Определить...

Перезагрузка операций С++ - C++
Всем привет! Прошу помощи в решении задания по перезагрузке операций в С++ Само задание: Создать класс Time для работы с...

Перегрузка операций - C++
Здравствуйте. Объясните механизма операции инкремента. Как работают эти строки: Counter(int c) : count(c) { } return Counter(count); ...

Перегрузка операций - C++
Уважаемые программисты! Помогите новичку! Мне нужно написать программу, в которой реализуется разреженная матрица переменной размерности,...

Дерево операций - C++
Пишу от безысходности!!! Нужно решить задание, а меня нет идей вообще. Задание следующее: "Записать программу которая реализует...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3048 / 1693 / 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;
}
Ответ Создать тему
Опции темы

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