Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Программирование матричных операций - C++

19.06.2010, 22:22. Просмотров 904. Ответов 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 по возрастанию абсолютных зна-чений;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2010, 22:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программирование матричных операций (C++):

Реализация матричных операций через классы - C++
Доброго времени суток. Нужно реализовать сложение двух матриц при помощи классов. Т.е в коде программы будет класс с функцией рандома...

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

Программирование операций из массивом структур - C++
Прива всем, Пацаны помогите лабу 21 зделать. Тема: Программирование операций из массивом структур. Задание: Ввести перелік студентів,...

Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100 - C++
Вычисления проводятся слева-направо, ни одна операция не имеет приоритета. Добавлено через 2 минуты задача вынесла моск, прошу помочь

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

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

1
Mr.X
Эксперт С++
3051 / 1696 / 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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2010, 01:37
Привет! Вот еще темы с ответами:

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

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

Выбор кафедры в дальнейшей жизни: прикладное программирование VS системное программирование - C++
Сразу извиняюсь что очень не по теме но всё же лучшего форума для этого вопроса я не нашел. Итак я вступаю во взрослую жизнь и давно...

Перезагрузка операций - C++
Класс String описан следующим образом: #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; class...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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