Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.57
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
#1

Класс Matrix, Перегрузка - C++

18.11.2012, 13:46. Просмотров 2133. Ответов 19
Метки нет (Все метки)

День добрый... У нас есть класс матрица (NxM), нужно сделать перегрузку "+", со статик матрицой всё работало прекрасно...но после переделки под динамическую, перестало...даже вывод перестал работать, подскажите пожалуйста, где ошибка(
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
#include <iostream>
#include <Windows.h>
#include <cstdlib>
using namespace std;
typedef double T;
class Matrix
{
private:
        T **arr;
        int N,M;
public:
    int a,b;    
    Matrix(){N=0;M=0;arr=NULL;};
    friend double drand();
        Matrix(int a, int b)
        {int i,j; N=a; M=b;
        T **arr=new T*[N];
        for (i=0;i<N;i++)
        {arr[i]=new T[M];}
        for (i=0;i<N;i++)
        for (j=0;j<M;j++)
        arr[i][j]=drand();};
 
        Matrix(const Matrix& A);
 
        void Vivod();
    Matrix operator+ (const Matrix&);
};
 
double drand(){   double a,b,c;
    a = 1.0;
    b = 2.0;
    c = (double)rand()/(double) RAND_MAX*(b-a)+a;
return c;}
 
void Matrix::Vivod() 
{
        for (int i = 0; i < N; i++)
        {cout<<endl;
          for (int j = 0; j < M; j++)
          {
           cout<<arr[i][j]<<" ";
          }
        }
        cout<<endl;
}
 
Matrix::Matrix(const Matrix& A)
{   for(int i = 0; i < N; i++)
        for(int j = 0; j < M; j++)
            arr[i][j] = A.arr[i][j];}
 
Matrix Matrix::operator+(const Matrix &A)
{
    Matrix result(N,M);
      for (int i = 0; i < N; ++i)
      {
        for (int j = 0; j < M; ++j)
        {
            result.arr[i][j] += A.arr[i][j];
        }
      }
    return result;
}
 
int main()
{ int c,d;
    SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    cout<< "N,M" << endl;
    cin >> c >> d;
        Matrix a1(c,d), b1(c,d);
 
        a1.Vivod();
        b1.Vivod();
        system("PAUSE");
        system("cls");
        Matrix c1(c,d);
        c1=a1+b1;
        a1.Vivod();
        b1.Vivod();
        c1.Vivod();
 
        system("PAUSE");
 
        return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 13:46     Класс Matrix, Перегрузка
Посмотрите здесь:

Перегрузка конструкторов (создание класса Matrix, перемножение матриц) - C++
Помогите пожалуйста с умножением матриц Добавлено через 20 секунд #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; ...

класс Matrix (СРОЧНО !!!) - C++
Люди добрые помогите пожалуйста с решением задачи, а то я в программировании плохо соображаю. Вот условие задачи, ПОМОГИТЕ, Я БУДУ ОЧЕНЬ...

Создать класс matrix - C++
разработать класс Matrix – матрица, физически представляющая собой вектор, состоящий из заданного числа векторов. Реализовать метод...

Создать класс Matrix - C++
Для соответствующего класса, перегрузить арифметические операции(+,-,*,/). При перезгузке арифметические действия должны выполняться...

Создать параметризированный класс Matrix - C++
Создать параметризированный класс Matrix – матрица. Класс должен содержать конструкторы, деструктор, функции getRows, getCols, операторы ,...

Разработать класс Matrix - матрица - C++
Разработать класс Matrix - матрица. Размерность матрицы задавать в конструкторе.

Спроектировать и реализовать класс Matrix - C++
Спроектировать и реализовать класс Matrix, предназначенный для работы с матрицами. Класс должен позволять создавать матрицы различных...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 14:08     Класс Matrix, Перегрузка #2
попробуй 17 строка
C++
1
arr = newT*[N];
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 14:42  [ТС]     Класс Matrix, Перегрузка #3
Цитата Сообщение от David Sylva Посмотреть сообщение
попробуй 17 строка
C++
1
arr = newT*[N];
Тааак, заработало. Но сумму не находит.
в 78 строке убрал параметры(на автомате их туда наверно поставил,не ожидая что в конструкторе буду массив заполнять), всё равно не складывает (
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 14:48     Класс Matrix, Перегрузка #4
Цитата Сообщение от The1Phoenix Посмотреть сообщение
typedef double T;
зачем ты вот это сделал, код из - за этого не читаемый.
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 14:49  [ТС]     Класс Matrix, Перегрузка #5
Цитата Сообщение от David Sylva Посмотреть сообщение
зачем ты вот это сделал, код из - за этого не читаемый.
Задание такое)
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 14:51     Класс Matrix, Перегрузка #6
Цитата Сообщение от The1Phoenix Посмотреть сообщение
Задание такое)
сделать код не читаемым? Сформулируй задание полностью. У тебя класс реализован не совсем верно.
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 14:56  [ТС]     Класс Matrix, Перегрузка #7
Цитата Сообщение от David Sylva Посмотреть сообщение
сделать код не читаемым? Сформулируй задание полностью. У тебя класс реализован не совсем верно.
Составить описание класса для представления типа данных "веществвенные матрица":
C++
1
2
3
4
5
6
7
typedef double T
class TMatrix{
private:
T **arr;
int N;
int M;
};
бла-бла-бла предупреждения что некоторые операции работают с квад. матрицами бла-бла-бла
список перегружаемых операций
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 15:06     Класс Matrix, Перегрузка #8
Я посмотрел, твой код тебе не кажется, что ты забыл перегрузить оператор = .
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 15:21  [ТС]     Класс Matrix, Перегрузка #9
Цитата Сообщение от David Sylva Посмотреть сообщение
Я посмотрел, твой код тебе не кажется, что ты забыл перегрузить оператор = .
C++
1
2
3
4
5
6
7
Matrix& Matrix::operator =(Matrix& B)
{ if (this==&B) {return *this;}
    N=B.N; M=B.M;
    for(int i = 0; i < N; i++)
        for(int j = 0; j < M; j++)
            arr[i][j] = B.arr[i][j];
return *this;}
Всё равно не скалдывает.

Добавлено через 8 минут
P.S. Для проверки использую квадратную матрицу, пока не заморачиваюсь с тем, что она может быть любой размерности
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 15:33     Класс Matrix, Перегрузка #10
Надо перегружать оператор индексации [] и складывать по нормальному. У тебя в целом не очень правильно сделано.
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 15:33  [ТС]     Класс Matrix, Перегрузка #11
Можешь,пожалуйста, по порядку объяснить что мне нужно сделать? Если можно пошагово.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 15:34     Класс Matrix, Перегрузка #12
Давай так сделаем, напиши мне полностью задание, я тебе набросаю как правильно, а ты потом переделаешь под свои требовании.
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 15:39  [ТС]     Класс Matrix, Перегрузка #13
Цитата Сообщение от David Sylva Посмотреть сообщение
Давай так сделаем, напиши мне полностью задание, я тебе набросаю как правильно, а ты потом переделаешь под свои требовании.
Составить описание класса для представления типа данных «вещественная матрица»:
typedef double T;
class TMatrix{
private: T **arr; // двумерный массив
int N; // число строк
int M; // число столбцов
};
Обратите внимание на то, что некоторые операции имеют смысл только тогда, когда матрицы имеют одинаковый размер или являются квадратными! Особого внимания заслуживает операция умножения матриц (см. учебники по линейной алгебре и аналитической геометрии).
Список перегружаемых операций и методов:
1. + – операция сложения матриц;
2. - – операция вычитания матриц;
3. * – операция умножения матриц;
4. комбинированные операции +=, -=, *=;
5. операции извлечь из потока >> и поместить в поток <<;
6. ++, -- – операции инкремента и декремента (префиксная и постфиксная форма);
7. - , + – операции унарный минус и плюс;
8. = – операция присваивания;
9. операция обращения к отдельному элементу матрицы с контролем выхода за границы, как перегруженную операцию вызова функции operator()(size_t i, size_t j);
10. *, / – операции умножения и деления с вещественными числами (только в виде перегруженных дружественных функций);
11. методы, реализующие проверку типа матрицы (квадратная, диагональная, нулевая, единичная, симметрическая, верхняя треугольная, нижняя треугольная) – по указанию преподавателя;
12. возведение матрицы в неотрицательную степень;
13. конструктор по умолчанию;
14. конструктор с параметрами;
15. конструктор копирования;
16. деструктор.

Вот...Многого не прошу, хотел сначала с обычным сложением разобраться, а потом уже и остальное само придёт)
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
18.11.2012, 15:44     Класс Matrix, Перегрузка #14
К вечеру напишу всё полностью и с комментариями.
Цитата Сообщение от The1Phoenix Посмотреть сообщение
typedef double T
Но вот так писать неправильно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 15:45     Класс Matrix, Перегрузка
Еще ссылки по теме:

Класс matrix. Не получается перегрузить оператор = - C++
Всем привет! Пишу класс matrix. Не получается перегрузить оператор = Конструктор копирования тоже не получается. Оба выводят одну и ту...

Определить класс «Квадратная матрица» – Matrix. - C++
Определить класс «Квадратная матрица» – Matrix. Класс должен содержать несколько конструкторов, в том числе конструктор ко-пирования. ...

Простенький класс Matrix - не пойму что не так - C++
Пытался создать простенький класс Matrix. Падает с сообщением в консоли: Подскажите, пожалуйста, в чём причина? Matrix.h ...

На основе класса Vector разработать класс Matrix - C++
На основе класса Vector разработать класс Matrix (матрица, физически представляющая собой вектор, состоящий из заданного числа векторов)....

Создать класс Matrix и функции умножения и сложения матриц - C++
Создайте класс Matrix на базе вектора vector&lt;vector&lt;int&gt;&gt;. Определите операторную функцию ostream&amp; operator&lt;&lt;(ostream&amp;, const Matrix&amp;) для...


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

Или воспользуйтесь поиском по форуму:
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
18.11.2012, 15:45  [ТС]     Класс Matrix, Перегрузка #15
Цитата Сообщение от David Sylva Посмотреть сообщение
К вечеру напишу всё полностью и с комментариями.
Но вот так писать неправильно.
Ну это уж преподаватели так составляли => брали из какой-нибудь учебной лит-ры.
Спасибо. Жду с нетерпением.
Yandex
Объявления
18.11.2012, 15:45     Класс Matrix, Перегрузка
Ответ Создать тему
Опции темы

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