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

Умножение матриц

22.03.2020, 19:32. Показов 2960. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Реализованна перегрузку матриц, но программа вылетает с ошибкой сегментации.

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
// перегрузка BigMatrix * BigMatrix
BigMatrix BigMatrix::operator*(const BigMatrix& B) {
        if (this->n_Size == B.m_Size) { // количество стобцов A == количеству строк B
                BigMatrix product(this->m_Size, B.n_Size);
                BigComplex z, z2;
                BigVector vect(B.m_Size);
 
                for (unsigned long i = 0; i < this->m_Size; i++) {      // фиксируем строку в матрице A
 
                        for (unsigned long j = 0; j < B.n_Size; j++) {
                                vect.clean(vect);
 
                                for (unsigned long k = 0; k < B.n_Size; k++) {    // получение вектора-столбца матрицы B
                                      z = B.Matrix[k].get_Data(j);
                                      vect.insert(z);
                                }
 
                                z2 = scalar(Matrix[i], vect);
                                product.Matrix[i].insert(z2);
                        }
                }
 
                return product;
        }
        else throw "Количество столбцов в матрице A не равно количеству строк матрицы B";
}
Если я правильно понял, ошибка сегментирования из за того, что здесь

C++
1
BigMatrix product(this->m_Size, B.n_Size);
, когда вызвается конструктор

C++
1
2
3
4
5
BigMatrix(unsigned long m, unsigned long n) {
                m_Size = m;
                n_Size = n;
                Matrix = new BigVector[m_Size]{};
        }
а затем вызывается конструктор для каждого элеменента массива
C++
1
Matrix = new BigVector[m_Size]{};
и конструктору, который описан так

C++
1
2
3
4
BigVector(unsigned long size) : m_Elems{0} {
                m_Size = size;
                m_Data = new BigComplex[m_Size]{};
        }
передается
C++
1
this->m_Size
, а должен
C++
1
B.n_Size
То есть каждый BigVector состоит не из n, а из m верно?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2020, 19:32
Ответы с готовыми решениями:

Умножение треугольных матриц«Методы обработки разреженных матриц»
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ к элементам свёрнутой матрицы...

Умножение матриц
Здравствуйте, у меня простая прога для умножения матриц относительно произвольных размеров (&lt;100x100) #include &lt;iostream&gt; ...

Умножение матриц
Форумчане, кто поможет, что здесь не то // Multiplying arrays.cpp : main project file. #include &quot;stdafx.h&quot; ...

26
Я не улыбаюсь.
-8 / 1 / 0
Регистрация: 10.03.2020
Сообщений: 102
23.03.2020, 00:54  [ТС]
Студворк — интернет-сервис помощи студентам
zayats80888, при описании класса, всегда писать свой конструктор копирования и перегружать оператор присваивания или есть тривиальные случаи, когда необходимости нет?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.03.2020, 00:59
Цитата Сообщение от Glbvnts Посмотреть сообщение
при описании класса, всегда писать свой конструктор копирования и перегружать оператор присваивания или есть тривиальные случаи, когда необходимости нет?
Если в классе есть нетривиальный деструктор, то обязательно.

Добавлено через 2 минуты
Вот если бы ты не городил огород с указателями, а использовал std::vector, то у тебя классы поддерживали бы семантику копирования и перемещения по умолчанию, достаточно было бы написать конструкторы с параметрами и всё.
0
Я не улыбаюсь.
-8 / 1 / 0
Регистрация: 10.03.2020
Сообщений: 102
23.03.2020, 01:04  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
а использовал std::vector,
задание такое, описать классы длинное целое/комплексное + длинная арифметика

в С++ есть библиотеки с длинной арифметикой ?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.03.2020, 01:10
Цитата Сообщение от Glbvnts Посмотреть сообщение
задание такое, описать классы длинное целое/комплексное + длинная арифметика
и как это мешает использовать vector вместо голых указателей?
Цитата Сообщение от Glbvnts Посмотреть сообщение
в С++ есть библиотеки с длинной арифметикой ?
в стандартной нет, но есть много сторонних решений.
0
Я не улыбаюсь.
-8 / 1 / 0
Регистрация: 10.03.2020
Сообщений: 102
23.03.2020, 01:23  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
и как это мешает использовать vector вместо голых указателей?
Не знал, преподователь не упоминал об это. От вас узнал об этом)

Добавлено через 10 минут
zayats80888, СПАСИБО!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
23.03.2020, 01:52
Цитата Сообщение от Glbvnts Посмотреть сообщение
при описании класса, всегда писать свой конструктор копирования и перегружать оператор присваивания или есть тривиальные случаи, когда необходимости нет?
Не "всегда", а тогда, когда ваш класс содержит члены, которые сами по себе не реализуют правильную семантику копирования. Что такое "правильная семантика копирования" - зависит от конкретной ситуации, т.е. ответ на этот вопрос знаете только вы - автор класса.

У вас у в ваших классах хранится "голый" указатель, который указывает на память, которой владеет ваш класс. В такой ситуации "голый" указатель сам по себе не реализует правильной семантики копирования: он реализует "мелкое" (shallow) копирование (просто копирует значение указателя), а вам нужно "глубокое" (deep) копирование (выделение дополнительной памяти, копирование данных и т.д.). Поэтому вам приходится писать правильные методы для копирования своими руками.

Это так называемое Правило Трех (или, теперь, Правило Пяти).

Однако если бы вы в своем классе воспользовались, скажем, std::vector вместо "голого" указателя на массив, то сам std::vector внутри себя реализовал бы всю необходимую семантику копирования. Вам не нужно было бы ничего делать. Вам не нужно было бы писать ни конструктора копирования, ни оператора присваивания, ни даже деструктора.

Именно к этому и нужно стремиться. Это так называемое Правило Нуля.
1
Я не улыбаюсь.
-8 / 1 / 0
Регистрация: 10.03.2020
Сообщений: 102
23.03.2020, 02:20  [ТС]
TheCalligrapher, большое спасибо за разъяснение

Добавлено через 9 минут
TheCalligrapher, у вас есть ссылки на хорошие источники по консольным отладчикам для Linux?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2020, 02:20

Умножение 3 матриц
вод код моей процедуру { GetMatrixA(A); GetMatrixB(B); GetMatrixD(D); for( p= 1; p&lt;=count; p++) for( j= 1; j&lt;=n; j++) { ...

Умножение матриц
Задача такая : Для заданой квадратической матрицы А заданого порядка n найти произведение А * В, где элементы матрицы В узнаются за...

Умножение матриц
#include &lt;iostream&gt; #include &lt;ctime&gt; // в ней функция time #include &lt;conio.h&gt; #include &lt;stdio.h&gt; using namespace std; void...

Умножение матриц
Я юзаю Qt, но пишу сюда т.к. он никак не влияет на код (почти) У меня есть две матрицы A и B (размерность обеих 800х800). Чтобы получить...

Умножение матриц
помогите сделать задачу: Даны матрицы: А размером m*k и В размером k*n.Получить матрицуС=A*В. Создавайте темы с осмысленными и понятными...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru