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

Класс "Матрица", ошибка при выводе результата

17.11.2014, 00:43. Показов 1170. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Нужно под main создать header и реализацию! Я застрял на operator- (а точнее при выводе на экран результата)! Выдает ошибку "Необработанное исключение по адресу 0x003D4452 в Lab_13_11_2014.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFEEEFEEE."
Помогите пожалуйста!
Вод код!
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
#ifndef MATRIX_H
#define MATRIX_H
 
class Matrix
{
    int height;
    int width;
    int** mas;
public:
    Matrix();
    Matrix( Matrix&);
    Matrix(int,int);
    ~Matrix();
    void SetMtrx();
    int GetH() {return height;}
    int GetW() {return width;}
    int** GetMtrx() {return mas;}
    void Show();
    Matrix operator+ (Matrix &);
    Matrix operator- (Matrix &);
 
};
 
#endif
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
#include <iostream>
#include <ctime>
#include <clocale>
#include "MATRIX.h"
 
using namespace std;
 
Matrix::Matrix()
{
    height=0;
    width=0;
    mas=new int* [height];
    for (int i=0;i<height;i++)
    {
        mas[i]=new int [width];
        for (int j=0;j<width;j++)
        {
            mas[i][j]=0;
        }
    }
}
 
Matrix::Matrix(int H, int W)
{
    height=H;
    width=W;
    mas=new int* [height];
    for (int i=0;i<height;i++)
    {
        mas[i]=new int [width];
        for (int j=0;j<width;j++)
        {
            mas[i][j]=0;
        }
    }
 
}
Matrix::Matrix( Matrix& M)
{
    height=M.height;
    width=M.width;
    mas=new int* [height];
    for (int i=0;i<height;i++)
    {
        mas[i]=new int [width];
        for (int j=0;j<width;j++)
        {
            mas[i][j]=M.mas[i][j];
        }
    }
}
Matrix::~Matrix()
{
    for (int i=0;i<GetH();i++)
    {
        delete [] mas[i];
    }
    delete [] mas;
    mas=nullptr;
}
 
void Matrix::SetMtrx()
{
    cout<<"Введите значение:\n\n";
    mas=new int* [height];
    for (int i=0;i<height;i++)
    {
        mas[i]=new int [width];
        for (int j=0;j<width;j++)
        {
            //cout<<'['<<i<<']'<<'['<<j<<"] = ";
            /*cin>>*/mas[i][j]=rand()%5;
        }
    }
}
 
void Matrix::Show()
{
    for (int i=0;i<GetH();i++)
    {
        for (int j=0;j<GetW();j++)
        {
            cout<<mas[i][j];
            cout<<'\t';
        }
        cout<<endl;
    }
}
 
Matrix Matrix::operator+(Matrix & right)
{
    Matrix new_mas(height,width);
    for (int i=0;i<new_mas.height;i++)
    {
        for (int j=0;j<new_mas.width;j++)
        {
            new_mas.mas[i][j]=mas[i][j]+right.mas[i][j];
        }
    }
    return new_mas;
}
 
Matrix Matrix::operator-(Matrix & right)
{
    Matrix new_mas(height,width);
    for (int i=0;i<new_mas.height;i++)
    {
        for (int j=0;j<new_mas.width;j++)
        {
            new_mas.mas[i][j]=mas[i][j]-right.mas[i][j];
        }
    }
    return new_mas;
}
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
#include <iostream>
#include <ctime>
#include <clocale>
#include "MATRIX.h"
 
using namespace std;
 
int main ()
{
    srand ((unsigned)time (NULL));
    setlocale (LC_ALL,"RUS");
    Matrix m1(4,5);
    cout<<"m1"<<endl;
    m1.Show();
    cout<<"m1 height and width"<<endl;
    cout<<m1.GetH()<<endl;
    cout<<m1.GetW()<<endl<<endl;
    m1.SetMtrx();
    cout<<m1.GetMtrx()<<endl;
 
    Matrix m2=m1;
    cout<<"m2"<<endl;
    m2.Show();
 
    Matrix m5=m1+m2;
    cout<<"m1+m2"<<endl;
    m5.Show();
 
    m5=m1-m2;
    cout<<"m1-m2"<<endl;
    m5.Show();
 
    //m5=m1+5;
    //cout<<"m1+5"<<endl;
    //m5.Show();
 
    //m5=m1-5;
    //cout<<"m1-5"<<endl;
    //m5.Show();
 
    //cout<<"m[3][0]"<<endl;
    //cout<<m5[3][0]<<endl<<endl;
 
    //m1++;
    //cout<<"m1++"<<endl;
    //m1.Show();
 
    //++m1;
    //cout<<"++m1"<<endl;
    //m1.Show();
 
    //Matrix m7 (1,8);
    //cout<<"m7"<<endl;
    //m7.Show();
 
    //m5=m1+m7;
    //cout<<"m1+m7"<<endl;
    //m5.Show();
 
    //m5=m1-m7;
    //cout<<"m1-m7"<<endl;
    //m5.Show();
 
    //--m1;
    //cout<<"--m1"<<endl;
    //m1.Show();
 
    //m1--;
    //cout<<"m1--"<<endl;
    //m1.Show();
 
    //m2=-m1;
    //cout<<"-m1"<<endl;
    //m2.Show();
    //return 0;
}
Да и еще мне не ясен вот этот момент
C++
1
m5=m1+5;
это имеется ввиду что к каждому элементу нужно прибавить 5?
Заранее спасибо!

Добавлено через 43 минуты
С operator- разобрался!
Но остается вопрос что это значит
C++
1
m5=m1+5;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2014, 00:43
Ответы с готовыми решениями:

В чем ошибка при выводе двух целых чисел,нахождения результата их деления и выводом результата на экран?
решил вывести с клавиатуры два целых числа,написал программу как написано в учебнике Фаронова В.В. нажимаю ctrl+f9 и в итоге получаю...

Ошибка при выводе результата
Дано дифференциальное уравнение с начальным условием y(0)=1, найти его решение на отрезке методом Эйлера-Коши. Неправильно выводит...

Ошибка при выводе результата
Привет всем! Написала вот такую программку, но при компиляции выдаёт ошибку в строке...

7
27 / 27 / 18
Регистрация: 13.09.2014
Сообщений: 137
17.11.2014, 00:58
DELETE
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
17.11.2014, 01:12  [ТС]
?????
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
17.11.2014, 01:21
Цитата Сообщение от Sapendo Посмотреть сообщение
Выдает ошибку
Во-первых, оператор присваивания где? См. Распространенные ошибки

Во-вторых, код некомпилируем в стандартном С++ из за того, что конструктор копирования принимает неконстантную ссылку. Исправить на константную немедленно. Программирования на С++ без активного правильного использования спецификатора 'const' невозможно.
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
17.11.2014, 01:30  [ТС]
TheCalligrapher,
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-первых, оператор присваивания где? См. Распространенные ошибки
именно так я ошибку и исправил))) За const прошу прощения!
А как на счет
C++
1
2
1
m5=m1+5;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
17.11.2014, 01:35
Цитата Сообщение от Sapendo Посмотреть сообщение
А как на счет
C++
1
m5=m1+5;
Ну откуда же нам знать, что имелось в виду под этим? Оператора у вас такого нет. Чтобы его написать, надо знать что он должен делать. Я не ясновидящь, я не знаю, что имелось в виду. Спрашивайте у постановщика задачи.
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
17.11.2014, 01:51  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну откуда же нам знать, что имелось в виду под этим? Оператора у вас такого нет. Чтобы его написать, надо знать что он должен делать. Я не ясновидящь, я не знаю, что имелось в виду. Спрашивайте у постановщика задачи.
Это я понимаю, я думал вы по практике поймете что тут требуется т.к. товарищ преподаватель ответил в main все написано)))
Ну я так понимаю что тут надо прибавить каждому элементу 5! Для этого нужно преобразование типов, только я не могу понять как это для матрицы сделать! Намекните пожалуйста!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
17.11.2014, 03:43
Цитата Сообщение от Sapendo Посмотреть сообщение
Для этого нужно преобразование типов,
Я не вижу, при чем тут "преобразование типов". Тут нужен просто еще один оператор, а лучше два или три (чтобы еще и 'm5 = m1 - 5' сразу покрыть, и 'm5 = 5 + m1'). Однако выбранный изначально подход - с определением операторов, как членов класса - не позволяет единоообразным образом перегрузить операторы для выражений типа '5 + m1'. Для таких выражений операторы придется определять снаружи класса

C++
1
2
3
4
5
6
7
8
9
class Matrix
{
  ...
  Matrix operator +(int) const;
  Matrix operator -(int) const;
  ...
};
 
Matrix operator +(int, const Matrix &);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Matrix Matrix::operator +(int right) const
{
    Matrix new_mas(height, width);
    for (int i = 0; i < new_mas.height; i++)
    {
        for (int j = 0; j < new_mas.width; j++)
        {
            new_mas.mas[i][j] = mas[i][j] + right;
        }
    }
    return new_mas;
}
 
Matrix Matrix::operator -(int right) const
{
    return operator +(-right);
}
 
Matrix operator +(int left, const Matrix &right)
{
    return right + left;
}
Разумнее было с самого начала определять операторы, как самостоятельные функции, а не как члены класса. Но это уже вашему преподавателю виднее...

Можно еще добавить операторы для 'm5 = 5 - m1' и просто 'm5 = -m1' - но это вы уже сами смотрите, нужно это вам или нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2014, 03:43
Помогаю со студенческими работами здесь

Ошибка при выводе результата ChangeValues
Привет, подскажите пожалуйста как вывести результат ChangeValues при нажатии на кнопку namespace Arrays namespace Arrays { ...

Отрабатывает curr.execute, но при выводе результата ошибка 500
curr = conn.cursor() sql = &quot;SELECT `first_string`, `second_string`, `val_num` FROM `simple_table`&quot; results = curr.execute(sql) ...

Определить, площадь какой фигуры больше - ошибка при выводе результата
Доброго времени суток! Стояла задача: Заданы радиус круга и сторона квадрата. Определить, площадь какой фигуры больше. Я составил...

Деление при выводе результата
Сказали что на 1/4 нужно делить когда выводим,но как это сделать я не знаю #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Округление при выводе вещественного результата
Здравствуйте,помогите пожалуйста с программой,она написана на Jave. Вот дано задание:Дана квадратная матрица размером n x n, содержащая...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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