Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 1
Регистрация: 13.11.2013
Сообщений: 84

Вектора с матрицами

25.04.2016, 19:31. Показов 3171. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Создать два класса: матрицы и вектора. Организовать между ними наследование типа Родитель:Матрицы->Потомок:Вектор.
Должны быть реализованы операции сложения между векторами, матрицами, и вперемешку. Также
нужно переопределить операторы вывода матрицы и вектора и индексацию [].
Проблема:
Не могу продумать архитектуру классов.
Прошу помочь вашими идеями, где какие операции должны находится?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2016, 19:31
Ответы с готовыми решениями:

Как обозначить значения внутри вектора для другого вектора итератором?
Например, в одном векторе есть числа 1, 3, 4. В другом векторе их 5: 25 95 45 65 75. Как сделать так, чтобы во втором векторе удалились...

Найти сколько элементов первого вектора совпадают с элементами второго вектора
#include <iostream> #include <time.h> #include <vector> #include <set> using namespace std; void main() { ...

Дан список, элементы которого являются координатами вектора. Найти длину вектора
1. Дан список, элементы которого являются координатами вектора в n-мерном пространстве. Найти длину вектора.

29
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,654
Записей в блоге: 6
26.04.2016, 12:16
Студворк — интернет-сервис помощи студентам
Mr.X, IGPIGP, по сабжу nmcf, прав вектор является матрицей. Поэтому наследование: матрица->вектор. Матрицы в общем случае многомерны. Одномерные это вектор. Двумерные - классические матрицы и т.д.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.04.2016, 12:36
Цитата Сообщение от Ilot Посмотреть сообщение
по сабжу nmcf, прав вектор является матрицей. Поэтому наследование: матрица->вектор.
Абсолютно несогласен. То что вектор является подмножеством матрицы, говорит о том, что он может быть базовым классом. Поскольку именно матрица требует расширения вектора. В этом серьёзное упущение формулировки задачи наследования вверх тормашками. Однако, поскольку невидно алгоритмов, где вектора и матрицы могли бы участвовать как однородные в перечислении сущности, то не видно смысла в таком наследовании вообще. Гораздо лучше бы создавать матрицу с включением контейнера векторов (имхо).
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
26.04.2016, 12:43
Цитата Сообщение от Ilot Посмотреть сообщение
Mr.X, IGPIGP, по сабжу nmcf, прав вектор является матрицей. Поэтому наследование: матрица->вектор. Матрицы в общем случае многомерны. Одномерные это вектор. Двумерные - классические матрицы и т.д.
Ilot, и программу написать можете?
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
26.04.2016, 13:00
Цитата Сообщение от IGPIGP Посмотреть сообщение
Абсолютно несогласен. То что вектор является подмножеством матрицы, говорит о том, что он может быть базовым классом. Поскольку именно матрица требует расширения вектора. В этом серьёзное упущение формулировки задачи наследования вверх тормашками. Однако, поскольку невидно алгоритмов, где вектора и матрицы могли бы участвовать как однородные в перечислении сущности, то не видно смысла в таком наследовании вообще.
Абсолютно несогласен. То что вектор является подмножеством матрицы, говорит о том, что он не может быть базовым классом

простой пример с фигурами :
базовый класс - фигура
производный - треугольник


Гораздо лучше бы создавать матрицу с включением контейнера векторов (имхо).
ну и еще вопрос - где тут наследование?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.04.2016, 13:08
Цитата Сообщение от vndtta Посмотреть сообщение
простой пример с фигурами :
Тут Вы сами себе противоречите. Фигура, - уже треугольника. Это по сути интерфейс для реализации методов вроде draw, rotate и пр. Наследник - расширение родителя, это азбука. Родилось, кстати из потребности не трогая переданных библиотек расширять функционал.
Цитата Сообщение от vndtta Посмотреть сообщение
ну и еще вопрос - где тут наследование?
а там в тексте:
Цитата Сообщение от IGPIGP Посмотреть сообщение
то не видно смысла в таком наследовании вообще. Гораздо лучше бы создавать матрицу с включением контейнера векторов (имхо).
то есть, вы с чем несогласны?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,654
Записей в блоге: 6
26.04.2016, 15:10
Цитата Сообщение от Mr.X Посмотреть сообщение
Ilot, и программу написать можете?
Реализовывать все не стану только суть:
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
#include <iostream>
#include <vector>
 
struct cIndex_0 {};
 
struct cIndex_1: cIndex_0{
    int x1;
    cIndex_1(int x): x1(x) {}
};
 
struct cIndex_2: cIndex_0{
    int x1;
    int x2;
    cIndex_2(int x, int y): x1(x), x2(y) {}
};
 
template<typename T>
class cMatrix_0{
public:
    cMatrix_0() {}
    virtual T& data(cIndex_0 * index) = 0;
    virtual void setData(cIndex_0 * index, const T& t) = 0;
    virtual ~cMatrix_0() {}
};
 
template<typename T>
class cMatrix_1: cMatrix_0<T> {
    std::vector<T> m_data;
public:
    cMatrix_1(int n): cMatrix_0<T>(), m_data(n){}
    T& data(cIndex_0 * index) {
        cIndex_1 * t_index = static_cast<cIndex_1*>(index);
        return m_data[t_index->x1];
    }
    void setData(cIndex_0 * index, const T& t) {
        cIndex_1 * t_index = static_cast<cIndex_1*>(index);
        m_data[t_index->x1] = t;
    }
    virtual ~cMatrix_1() {}
};
 
template<typename T>
class cMatrix_2: cMatrix_0<T> {
    std::vector<std::vector<T>> m_data;
public:
    cMatrix_2(int n, int m): cMatrix_0<T>(){
        for(int idx = 0; idx < n; ++idx)
            m_data.push_back(std::vector<T>(m));
    }
    T& data(cIndex_0 * index) {
        cIndex_2 * t_index = static_cast<cIndex_2*>(index);
        return m_data[t_index->x1][t_index->x2];
    }
    void setData(cIndex_0 * index, const T& t) {
        cIndex_2 * t_index = static_cast<cIndex_2*>(index);
        m_data[t_index->x1][t_index->x2] = t;
    }
    virtual ~cMatrix_2() {}
};
 
int main() {
    cMatrix_1<int> matrix_1(10);
    cIndex_1 index_1(5);
    matrix_1.setData(&index_1, 15);
    std::cout << matrix_1.data(&index_1);
    std::endl(std::cout);
 
    cMatrix_2<int> matrix_2(10, 5);
    cIndex_2 index_2(5, 4);
    matrix_2.setData(&index_2, 13);
    std::cout << matrix_2.data(&index_2);
    std::endl(std::cout);
    return 0;
}
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
26.04.2016, 16:35
Цитата Сообщение от Ilot Посмотреть сообщение
Реализовывать все не стану только суть:
Ну, ваша суть только подтверждает суть, которую я уже выше высказал:
Цитата Сообщение от Mr.X Посмотреть сообщение
А вообще-то это задача нерешаемая. Если вектор сделать шаблонным классом, то нет необходимости в отдельном классе матрица, так как она представима как вектор с элементами типа вектор.
Если же вектор и матрицу сделать с элементами фиксированного типа, например int, то ни вектор интов не является матрицей интов, ни матрица интов не является вектором интов, т.е. наследовать их друг от друга невозможно.
Вы ж со своими сторонниками доказывали, что можно то ли вектор даблов от матрицы даблов унаследовать, то ли наоборот. Вот сами себя и опровергли.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,654
Записей в блоге: 6
26.04.2016, 16:48
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, ваша суть только подтверждает суть, которую я уже выше высказал:
Не подтверждает. Сущностью является абстрактная матрица не имеющая размеров. Мы же говорим об ООП подходе, а не о реализации. Вектор и двумерная матрица обладают общими свойствами хранения данных, что связывает их с абстрактным классом. Между тем хранят данные и получают к ним доступ эти структуры различными способами, что отражает различие этих классов в иерархии наследования.
Цитата Сообщение от Mr.X Посмотреть сообщение
Вы ж со своими сторонниками доказывали, что можно то ли вектор даблов от матрицы даблов унаследовать, то ли наоборот. Вот сами себя и опровергли.
Вам пытаются донести, что вектор, двумерная матрица, трехмерная матрица и т.д. являются матрицами, что выражается наследованием.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.04.2016, 16:52
Цитата Сообщение от Mr.X Посмотреть сообщение
ни матрица интов не является вектором интов
Для наследования не нужно (да и не бывает) чтобы наследник и базовый совпадали.
Матрица интов представима как набор векторов интов. Тут есть возможность наследования реализации. Сначала создаются вектора, потом из них собирается матрица. Но это количественное расширение. Расширение функционала не выплясывается, и главное, вектора и матрицы не перечислимы в одном алгоритме. Их нальзя сравнить друг с дружкой и, следовательно, отсортировать и пошло-поехало. Так что в основном, согласен. Тут лучше без наследования обойтись.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
26.04.2016, 17:38
Цитата Сообщение от Ilot Посмотреть сообщение
Вам пытаются донести, что вектор, двумерная матрица, трехмерная матрица и т.д. являются матрицами, что выражается наследованием.
Ну, это мы уже по третьему кругу пошли, не думаю, что это рационально. (А вы хоть читали предыдущие два?)
Я уж как мог пояснил что такое наследование, и тот, кто внимательно и с прилежанием прочитает эту тему, это поймет, я надеюсь, ну или это сподвигнет его учебник почитать, что тоже неплохо.
Вообще-то тема прикольная получилась, и она напоминает мне тему про указатели, в которой выяснилось, что никто из дискутирующих ни черта не понимает что это такое.
Так что, господа, как завещал нам великий юбиляр, учиться, учиться и учиться!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2016, 17:38

Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5)
Ребята помогите пожалуйста с задачкой. Я сам не шарю в C++, но в этом семестре появился этот предмет! И завтра его надо будет сдать :( Буду...

Ошибка с итераторами для целочисленного вектора и вектора структуры
Пытаюсь разобраться с векторами. Для динамической работы с памятью вещь, вроде, замечательная и удобная. Только необходимо использовать...

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

Составить главную программу и функцию. Для данного вектора А(М) найти количество неповторяющихся элементов вектора
Здравствуйте. Буду очень благодарен,если кто нибудь напишет два кода к этим задачам. Спасибо за внимание. Задача 1. Составить...

Определить для заданных векторов длину каждого вектора и найти номер самого длинного вектора
Создайте структуру Вектор с элементами x, y, z – декартовые координаты. Определить для M заданных векторов длину каждого вектора и найти...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru