Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 21

Сформировать вектор, элементы которого представляют собой сумму заданных элементов матрицы

25.12.2015, 21:20. Показов 5874. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, что это значит:
сформировать вектор V элементы которого представляют собой сумму элементов строк и столбцов матрицы B, пересекающихся на соответствующих элементах главной диагонали
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.12.2015, 21:20
Ответы с готовыми решениями:

Сформировать массив, элементы которого представляют суммы элементов строк матрицы
Дана матрица y. Сформировать массив x, элементы которого представляют суммы элементов строк матрицы y. Найти и вывести минимальное и...

Дано два массива А и B размерами n и m. Получить массив C, элементы которого представляют собой произведение элементов
Дано два целочисленных массива А и B размерами n и m соответственно. Отсортировать массив А по возрастанию. Получить массив C, элементы ...

Двумерный массив. Сформировать вектор В, элементы которого являются количеством нечетных элементов i-строки матрицы
Сформировать вектор В, элементы которого являются количеством нечетных элементов i-строки матрицы А(6,3). Сделайте, будьте добры.

9
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.12.2015, 21:35
Hjoky, ну вот, допустим, есть матрица размером 3 х 4:

11 14 16 19
23 25 27 28
31 33 34 39
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 21
25.12.2015, 21:36  [ТС]
давайте рассматривать квадратную матрицу
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.12.2015, 21:42
Цитата Сообщение от Hjoky Посмотреть сообщение
давайте рассматривать квадратную матрицу
ОК, давайте.

Hjoky, ну вот, допустим, есть матрица размером 3 х 3:

11 14 16
23 25 27
31 33 39

Главная диагональ начинается от элемента со значением 11 и заканчивается элементом со значением 39.

Значит первое значение вектора будет сумма элементов строки и столбца, которые впервые пересекаются на главной диагонали. То есть, сумма этих элементов:
(11 + 14 + 16) + (11 + 23 + 31)

Второе значение вектора:
(23 + 25 +27) + (14 + 25 + 33)

Третье значение вектора:
(31 + 33 + 39) + (16 + 27 + 39)
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 21
25.12.2015, 21:42  [ТС]
а вы не можете подсказать как этот цикл будет выглядеть на языке C++?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.12.2015, 21:45
Цитата Сообщение от Hjoky Посмотреть сообщение
а вы не можете подсказать как этот цикл будет выглядеть на языке C++?
Сейчас прикину. Дайте мне несколько минут.
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 21
25.12.2015, 22:06  [ТС]
Вы еще здесь?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.12.2015, 22:49
Лучший ответ Сообщение было отмечено Hjoky как решение

Решение

Цитата Сообщение от Hjoky Посмотреть сообщение
Вы еще здесь?
Да. Вот, написал:
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
// Сформировать вектор V элементы которого представляют собой
// сумму элементов строк и столбцов квадратной матрицы B,
// пересекающихся на соответствующих элементах главной диагонали.
 
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <vector>
 
typedef int Item;
 
Item ** create(const int matrixSize);
void destroy(Item ** matrix, const int matrixSize);
void fill_rand(Item ** matrix, const int matrixSize);
void show(Item ** matrix, const int matrixSize);
void show(const std::vector<Item> & vec);
int get_matrix_size_from_user();
Item sum_of_elements_in_row(const int row, Item ** matrix, const int matrixSize);
Item sum_of_elements_in_col(const int col, Item ** matrix, const int matrixSize);
 
int main()
{
    int n = get_matrix_size_from_user();
    int ** matrix = create(n);
    fill_rand(matrix, n);
    show(matrix, n);
 
    std::vector<Item> v;
    Item current_row_sum = 0;
    Item current_col_sum = 0;
    for (int i = 0; i < n; ++i)
    {
        current_row_sum = sum_of_elements_in_row(i, matrix, n);
        current_col_sum = sum_of_elements_in_col(i, matrix, n);
        v.push_back(current_row_sum + current_col_sum);
    }
 
    show(v);
 
    destroy(matrix, n);
 
    return 0;
}
 
int ** create(const int matrixSize)
{
    int ** matrix = new int * [matrixSize];
    for (int i = 0; i < matrixSize; ++i)
        matrix[i] = new int[matrixSize];
 
    return matrix;
}
 
void destroy(int ** matrix, const int matrixSize)
{
    for (int i = 0; i < matrixSize; ++i)
        delete [] matrix[i];
    delete [] matrix;
}
 
void fill_rand(int ** matrix, const int matrixSize)
{
    static bool first_time_in_this_program = true;
    if (first_time_in_this_program)
    {
        srand(time(NULL));
        first_time_in_this_program = false;
    }
 
    for(int i = 0; i < matrixSize; ++i)
        for(int j = 0; j < matrixSize; ++j)
            matrix[i][j] = rand()%89+10;
}
 
void show(int ** matrix, const int matrixSize)
{
    std::cout << "\n";
    for (int i = 0; i < matrixSize; ++i)
    {
        for (int j = 0; j < matrixSize; ++j)
        {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << "\n";
    }
}
 
void show(const std::vector<Item> & vec)
{
    std::cout << "\n";
    for (const auto & x : vec) // required compiler that supports C++11
        std::cout << x << " ";
}
 
int get_matrix_size_from_user()
{
    std::cout << "Please enter square matrix size: ";
    int matrixSize;
    std::cin >> matrixSize;
 
    return matrixSize;
}
 
Item sum_of_elements_in_row(const int row, Item ** matrix, const int matrixSize)
{
    int sum = 0;
    for (int i = 0; i < matrixSize; ++i)
       sum += matrix[row][i];
    return sum;
}
 
Item sum_of_elements_in_col(const int col, Item ** matrix, const int matrixSize)
{
    int sum = 0;
    for (int i = 0; i < matrixSize; ++i)
       sum += matrix[i][col];
    return sum;
}
Добавлено через 2 минуты
Hjoky, честно сказать, я бы матрицу предпочёл бы описать в виде отдельного класса.
Вот, если представить матрицу самодельным классом:

main.cpp
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
// Сформировать вектор V элементы которого представляют собой
// сумму элементов строк и столбцов квадратной матрицы B,
// пересекающихся на соответствующих элементах главной диагонали.
 
#include <iostream>
#include <vector>
#include "Matrix.h"
 
int get_matrix_size_from_user();
std::ostream & operator<<(std::ostream & os, const std::vector<Item> & vec);
 
int main()
{
    int n = get_matrix_size_from_user();
    Matrix B(n, n);
    B.fill_rand(10, 99);
    std::cout << B;
 
    std::vector<Item> v;
    for (int i = 0; i < n; ++i)
        v.push_back(B.find_sum_of_row(i) + B.find_sum_of_col(i));
 
    std::cout << v;
 
    return 0;
}
 
int get_matrix_size_from_user()
{
    std::cout << "Please enter square matrix size: ";
    int matrixSize;
    std::cin >> matrixSize;
 
    return matrixSize;
}
 
std::ostream & operator<<(std::ostream & os, const std::vector<Item> & vec)
{
    os << "\n";
    for (const auto & x : vec) // required compiler that supports C++11
        os << x << " ";
 
    return os;
}


Matrix.h
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
// requirements: compiler that supports C++11
 
#ifndef MATRIX_H
#define MATRIX_H
 
#include <iostream>
#include <vector>
#include <random>
 
typedef int Item;
 
class Matrix
{
private:
    int m_row;
    int m_col;
    Item ** matrix;
 
public:
    Matrix(int row, int col);
    ~Matrix();
 
    void fill_rand(Item fromNum, Item toNum);
    Item find_sum_of_row(const int row_index);
    Item find_sum_of_col(const int col_index);
    friend std::ostream & operator<<(std::ostream & os, const Matrix & m);
};
 
#endif // MATRIX_H


Matrix.cpp
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
#include "Matrix.h"
#include <random>
#include <ctime>
#include <iomanip>
 
Matrix::Matrix(int row, int col)
{
    m_row = row;
    m_col = col;
 
    matrix = new Item * [m_row];
    for (int i = 0; i < m_row; ++i)
        matrix[i] = new Item[m_col];
}
 
Matrix::~Matrix()
{
    for (int i = 0; i < m_row; ++i)
        delete [] matrix[i];
    delete [] matrix;
}
 
void Matrix::fill_rand(Item fromNum, Item toNum)
{
    std::mt19937 gen(time(0));
    std::uniform_int_distribution<int> urd(fromNum, toNum);
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            matrix[i][j] = urd(gen);
}
 
Item Matrix::find_sum_of_row(const int row_index)
{
    Item sum = 0;
    for (int i = 0; i < m_row; ++i)
        sum += matrix[row_index][i];
    return sum;
}
 
Item Matrix::find_sum_of_col(const int col_index)
{
    Item sum = 0;
    for (int i = 0; i < m_row; ++i)
        sum += matrix[i][col_index];
    return sum;
}
 
std::ostream & operator<<(std::ostream & os, const Matrix & m)
{
    os << "\n";
    for (int i = 0; i < m.m_row; ++i)
    {
        for (int j = 0; j < m.m_col; ++j)
            os << std::setprecision(3) << m.matrix[i][j] << "\t";
        os << "\n";
    }
 
    return os;
}
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 21
25.12.2015, 22:54  [ТС]
спасибо)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.12.2015, 23:05
Hjoky, не за что Делал из корыстных побуждений - потому что самому было интересно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2015, 23:05
Помогаю со студенческими работами здесь

Сформировать вектор, элементами которого являются отрицательные элементы матрицы
Очень нужно сделать задание: Сформировать вектор элементами которого являются отрицательные элементы матрицы. У меня с этим проблемы, я...

Сформировать вектор В, элементы которого являются минимальными элементами строк матрицы А
Помогите решить пожалуйста)) Сформировать вектор В, элементы которого являются минимальными элементами строк матрицы А(5,3)

Сформировать вектор В, элементами которого являются элементы матрицы А, удовлетворяющие условию
Задана прямоугольная матрица А размера m*n. Сформировать вектор В, элементами которого являются элементы матрицы А, удовлетворяющие условию...

Сформировать вектор, элементы которого являются минимальными элементами строк матрицы
Помогите пожалуйста исправить программу. Нужно сформировать вектор В, элементы которого являются минимальными элементами строк матрицы...

Сформировать вектор С, элементами которого являются элементы тех столбцов матрицы, начинающиеся отрицательным
Сформировать вектор С, элементами которого являются элементы тех столбцов матрицы , начинающиеся отрицательным элементом. Помогите,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru