Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Катя 89
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 9
#1

Написать класс «матрица» - C++

10.07.2014, 17:51. Просмотров 1001. Ответов 26
Метки нет (Все метки)

Добрый день я новичок помогите мне Написать класс «матрица». В классе реализовать следующие методы: конструкторы (по умолчанию, с
параметрами, копирования), деструктор, ввод с клавиатуры, поиск элемента по ключу,
вывод на экран (в виде методов класса и при помощи перегруженных операций
потокового ввода и вывода), перегрузить следующие операции: +, += (сложение матриц),
– (вычитание), = (присвоение), = = (сравнение по элементам), [] (взятие элемента с
заданным индексом).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2014, 17:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать класс «матрица» (C++):

Написать класс Матрица. Массив объектов класса Массив - C++
Написать класс Матрица (в данном случае матрица – массив объектов класса Массив из предыдущего задания). В классе реализовать следующие...

Написать класс "матрица" - C++
Написать класс "матрица" В классе реализовать методы: конструкторы (по умолчанию, с параметрами, копирования), деструктор, ввод с...

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица" - C++
Нужно определить класс "матрица" с возможностью динамического выделения и освобождения памяти, наполнения матрицы, сохранения и чтения из...

Написать класс строка и производный класс, ее шифрующий - C++
Добрый день уважаемые форумчане. Вопрос стоит в решении данной задачи. Мне очень нужна ваша помощь по той причине что мне задали задачу по...

Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) - C++
Задача. Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат. Вообщем-то ни...

Написать класс по строительству домов. Написать программу, демонстрирующую работу с классом. - C++
Собственно, в С++ немного насасываю, код читать умею, а прогать - нет. К сожалению, обстоятельства сложились так, что я поступил именно...

26
Катя 89
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 9
13.07.2014, 19:20  [ТС] #16
Вот какую программу я написала, но все равно не работает. Помогите.

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
#include "matrix.h"
#include "array.h"
#include <iostream>
using std::cout; 
 using std::cin; 
#include <iomanip> 
using std::setw;   
#include <cstdlib>
class Matrix
public
 Massiv
Matrix::Matrix() 
{
size = 10; 
ptr = new Array [size]; 
 for (int ix = 0; ix < size; ix++) 
for (int jx = 0; jx < 10; jx++)
ptr[ix][jx] = 0;
}
Matrix::Matrix(int matrixSize, int arraySize) 
{
size = (matrixSize > 0 ? matrixSize : 10); 
ptr = new Array [size]; 
for (int ix = 0; ix < size; ix++) 
ptr[ix].setSize(arraySize > 0 ? arraySize : 10); 
for (int ix = 0; ix < size; ix++) 
for (int jx = 0; jx < ptr->getSize(); jx++)
ptr[ix][jx] = 0;
}
Matrix::Matrix(  Matrix &matrixToCopy ) 
:size(matrixToCopy.size)              
{
ptr = new Array [size]; 
for (int ix = 0; ix < size; ix++) 
ptr[ix].setSize(size); 
for (int ix = 0; ix < size; ix++)
for (int jx = 0; jx < ptr->getSize(); jx++)
ptr[ix][jx] = matrixToCopy[ix][jx];
 matrixToCopy
}
Matrix::~Matrix() 
{
Array *Matrix::getPtr() const
{
return ptr;
}
ostream &operator<< (ostream &output, const Matrix &obj)
{
for (int ix = 0; ix < obj.size; ix++)
{
for (int jx = 0; jx < obj.ptr->getSize(); jx++)
{
output << setw(5) 
<< obj.ptr[ix][jx];
}
cout << std::endl;
}
output << std::endl; 
return output;
 }
for (int ix = 0; ix < obj.size; ix++)
for (int jx = 0; jx < obj.ptr->getSize(); jx++)
input >> obj.ptr[ix][jx]; 
return input;  }
Array &Matrix::operator[] (int subscript)
{
if(subscript < 0 || subscript >= size)
{
void Matrix::setMatrix() 
{
for (int ix = 0; ix < size; ix++)
for (int jx = 0; jx < ptr->getSize(); jx++)
cin >> ptr[ix][jx]; 
}
void Matrix::getMatrix() 
{
for (int ix = 0; ix < size; ix++)
{
for (int jx = 0; jx < ptr->getSize(); jx++)
cout << setw(5) << ptr[ix][jx]; 
cout << std::endl;
}
cout << std::endl; 
}
for (int ix = 0; ix < size; ix++)
for (int jx = 0; jx < ptr->getSize(); jx++)
}
Matrix Matrix::operator+ (const Matrix &right)
{
if (size != right.size || ptr->getSize() != right.getPtr()->getSize())
{
cout << 
exit(1); 
}
0
Sh@dow777
14.07.2014, 07:44
  #17

Не по теме:

Мне вот интересно, почему некоторые пишут что то типа

C++
1
using std::cout;
или
C++
1
using std::cin;
если можно написать одну строчку
C++
1
using namespace std;
и не париться?

0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 07:58 #18
Sh@dow777, подключи еще одну толстую библиотеку, в которой есть вектор и лист и удачно откомпилируй.
0
Sh@dow777
14.07.2014, 07:59
  #19

Не по теме:

Или вообще не пишут

C++
1
using namespace std;
и пишут, где им надо, что то типа
C++
1
std::vector
C++
1
std::map
C++
1
std::cin
Ведь это
C++
1
std
можно в одной строчке убрать Если что, то это лично мое мнение.

0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:03 #20
Sh@dow777, ну лобай теперь все в один неймспейс.
1
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 679
14.07.2014, 08:06 #21
Kukurudza, Тогда объясните мне, чем
C++
1
using namespace std;
хуже
C++
1
2
using std::cout;
using std::cin;
?
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:17 #22
где-то в моем коде:
C++
1
2
3
4
5
6
7
файл some_cool_massive.h
 
namespace cool_containers {
template <typename T>
class vector {
};
}
где-то в твоем коде:

C++
1
2
3
4
5
6
7
#include <vector>
#include <some_cool_massive.h>
 
using namespace std;
using namespace cool_containers;
 
vector<int> v;
компилируй

Добавлено через 1 минуту
ты пытаешься использовать using как противоядие от namespace. namespace это не яд.
0
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 679
14.07.2014, 08:21 #23
Kukurudza, Все, теперь понял. Ну я имел в виду такие проги, где не нужно подключать библиотеки, подобные вашей То есть проги, в которых нужно только одно пространство имен std.
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:25 #24
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Kukurudza, Все, теперь понял. Ну я имел в виду такие проги, где не нужно подключать библиотеки, подобные вашей То есть проги, в которых нужно только одно пространство имен std.
через месяц к вы придете к преподу а он вам скажет, поиспользуйте это...
0
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 679
14.07.2014, 08:32 #25
Kukurudza, Я разберусь и "поиспользую" в таком случае Я вам говорю про легкие программы, где ведь можно не заморачиваться с
C++
1
2
using std::cin;
using std::cout;
а написать
C++
1
using namespace std;
Или тогда вообще не писать все выше написанное, а писать где надо
C++
1
std::...
Просто для меня непривычно смотрится
C++
1
2
using std::cout;
using std::cin;
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
14.07.2014, 08:38 #26
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
а написать
Код C++
1
using namespace std;
плохо
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Или тогда вообще не писать все выше написанное, а писать где надо
Код C++
1
std::...
хорошо. хороший тон.
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Просто для меня непривычно смотрится
Код C++
1
2
using std::cout;
using std::cin;
плохо. дурной тон
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
15.07.2014, 02:30 #27
Частично какая-то реализация уже есть тут:
Класс матрица (не работает конструктор копирования)

Добавлено через 10 минут
Полностью задание мне делать влом, поэтому по мелочи. На поиграться хватит, остальные перегрузки можешь дописать сама:
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
#include <iostream>
#include <cstring>
 
template<typename T>
class Matrix
{
private:
    size_t rows_count, columns_count;
    T **data;
 
public:
    Matrix(size_t rows=5, size_t columns=5);
    Matrix(const Matrix<T>& matrix_obj);
    virtual ~Matrix();
    T* operator[](size_t index);
    bool operator ==(const Matrix<T>& matrix_obj);
 
    template<typename T2>
    friend std::istream& operator>>(std::istream&, const Matrix<T2>&);
    template<typename T2>
    friend std::ostream& operator<<(std::ostream&, const Matrix<T2>&);
};
 
template<typename T>
Matrix<T>::Matrix(size_t rows, size_t columns): rows_count{rows}, columns_count{columns}, data{new T*[rows]}
{
    data[0] = new T[rows*columns];
    for(size_t i=1;i<rows;++i)
        data[i] = data[0]+(i * columns);
}
 
template<typename T>
Matrix<T>::~Matrix()
{
    delete[] data[0];
    delete[] data;
}
 
template<typename T>
T* Matrix<T>::operator [](size_t index) { return data[index]; }
 
template<typename T>
Matrix<T>::Matrix(const Matrix<T>& matrix_obj): rows_count{matrix_obj.rows_count},
        columns_count{matrix_obj.columns_count}, data{new T*[rows_count]}
{
    data[0] = new T[rows_count*columns_count];
    std::memcpy(data[0], matrix_obj.data[0], sizeof(T)*rows_count*columns_count);
    for(size_t i=1;i<rows_count;++i)
        data[i] = data[0]+(i * columns_count);
}
 
template<typename T>
bool Matrix<T>::operator ==(const Matrix& matrix_obj)
{
    if(rows_count != matrix_obj.rows_count || columns_count != matrix_obj.columns_count)
        return false;
    return (memcmp(data[0], matrix_obj.data[0], sizeof(T)*rows_count*columns_count)==0)?true:false;
}
 
template<typename T>
std::istream& operator>>(std::istream& in_stream, const Matrix<T>& matrix_obj)
{
    for(size_t i=0;i!=matrix_obj.rows_count;++i)
        for(size_t j=0;j!=matrix_obj.columns_count;++j)
            std::cout<<"Matrix["<<i<<"]["<<j<<"] = ", std::cin>>matrix_obj.data[i][j];
    return in_stream;
}
 
template<typename T>
std::ostream& operator<<(std::ostream& out_stream, const Matrix<T>& matrix_obj)
{
    for(size_t i=0;i!=matrix_obj.rows_count;++i)
    {
        std::cout<<std::endl;
        for(size_t j=0;j!=matrix_obj.columns_count;++j)
            std::cout<<matrix_obj.data[i][j]<<" ";
    }
    return out_stream;
}
Пример использования:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    Matrix<int> a(2,2);
    std::cin>>a;
    std::cout<<a;
    Matrix<int> c(2,2);
    std::cin>>c;
    std::cout<<c;
    if(a==c)
        std::cout<<std::endl<<"equal"<<std::endl;
    else
        std::cout<<std::endl<<"not equal"<<std::endl;
    a[1][1] = 10;
    std::cout<<a;
    return 0;
}
Pay attention, это просто набросок, нет никаких проверок. И к элементу матрицы 10x10 можно обратиться через [0][25] и так далее.
0
15.07.2014, 02:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2014, 02:30
Привет! Вот еще темы с ответами:

Класс Матрица - C++
Вообщем задали мне в универе написать программу для работы с матрицами. Для этого нужно создать класс Матрица. Вообщем я только начал и...

Класс Матрица - C++
Помогите мне пожалуйста разобраться с классом реализующий матрицы. Я пытаюсь инициализировать матрицу и заполнить ее элементами но не...

Класс матрица - C++
Помогите пожалуйста, не могу понять, почему не работает оператор умножения, выводит одни нули в Dev c++,в Visual выдаёт ошибку #include...

класс матрица - C++
Объявите класс TMatric, создающий тип – матрицу. Элементы – данные класса: - указатель на область памяти, в которой расположена...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

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