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

Класс для работы с матрицами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дан символьный файл . Добавить в его конец символы (если это необходимо, использовать дополнительный файл ) http://www.cyberforum.ru/cpp-beginners/thread595458.html
Дан символьный файл . Добавить в его конец символы (если это необходимо, использовать дополнительный файл ).
C++ Наследование классов Базовый класс – шар. Производный класс – конус. Функция – объем. 1. Реализуйте приведенные ниже задания, создав необходимую иерархию классов, а также реализуйте основную программу, которая будет работать с данными классами (так называемую программу-драйвер). Описания классов должны находиться в заголовочных файлах (.h), а реализация методов – в файлах реализации (.cpp). Иерархия классов должна... http://www.cyberforum.ru/cpp-beginners/thread595450.html
C++ Реализовать класс ShortArray
Класс ShortArray. Тип элементов массива – short int. Функция (signum) – вычисление функции сигнум для суммы первых m членов массива. 1. Реализуйте приведенные ниже задания, используя классы, а также реализуйте основную программу, которая будет работать с данными классами (так называемую программу-драйвер). Описание класса должно находиться в заголовочном файле (.h), а реализация методов – в...
Отобрать блоки массива C++
Всем доброго времени суток, необходимо отобрать элементы массива заключённые в нули (то есть отобрать единицы) и переместить каждый блок из единиц в отдельный массив.Размер массива может быть произвольный, как и расположение элементов в нём, также могут быть и сложные конструкции типа 00111111100 00100000100 00101100100 00101100100 00100000100 00111111100 00000000000 ну и естественно не...
C++ Книги Герберта Шилдта http://www.cyberforum.ru/cpp-beginners/thread595440.html
Здравствуйте! Закончил 1 курс, по программированию на С++ остановились на классах, наследовании и пр. для дальнейшего изучения языка хочу приобрести книжку, больше всего хвалят именно Шилдта. Хорошо, в продаже от его имени есть: С++ для начинающих. Шаг за шагом Полный справочник по C++ C++: базовый курс Самоучитель C++ C++. Руководство для начинающих Что выбрать и чем они отличаются?...
C++ Оформление программы в виде функций Программа определяет произведение элементов в тех строках, которые не содержат отрицательных элементов. Нужно оформить ее в виде функции. Все данные для функций должны передаваться им в качестве параметров. Не понимаю, как это сделать? #include "iostream.h" #include "conio.h" int main() { int a; int i, j, n=10, m=10, c=1; bool flag; int *p; подробнее

Показать сообщение отдельно
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
11.06.2012, 13:12     Класс для работы с матрицами
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
115
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
class Matrix
{
    int** matrix;
    int row;
    int col;
    
    Matrix();
public:
    Matrix(int _row,int _col):row(_row),col(_col)
    {
    matrix = new int*[row];
    for(int i = 0;i < row; ++i)
        matrix[i] = new int [col];
    for(int i = 0; i < row;++i)
        for(int j = 0; j < col; ++j)
        matrix[i][j] = rand();
    };
    Matrix(const Matrix& m)
    {
    if(row != m.row || col != m.col)
    {
        for(int i = 0; i < row; ++i)
        delete [] matrix[i];
        delete [] matrix;
        row = m.row;
        col = m.col;
        matrix = new int*[row];
        for(int i = 0;i < row; ++i)
        matrix[i] = new int [col];
    }
    for(int i = 0; i < row;++i)
        for(int j = 0; j < col; ++j)
        matrix[i][j] = m.matrix[i][j];
    };
    ~Matrix()
    {
    for(int i = 0; i < row; ++i)
        delete [] matrix[i];
    delete [] matrix;
    };
    
    long getAvg();
    void substitute();
    
    friend std::ostream& operator <<(std::ostream& out,const Matrix& m);
    friend Matrix operator+(const Matrix& l, const Matrix& r);
    friend Matrix operator-(const Matrix&, const Matrix&);
};
struct wrong_matrix_size{};
long Matrix::getAvg()
{
    long avg = 0;
    for(int i = 0; i < row;++i)
    for(int j = 0; j < col; ++j)
        avg += matrix[i][j];
    return avg / (row * col);
}
void Matrix::substitute()
{
    for(int i = 0; i < row;++i)
    for(int j = 0; j < col; ++j)
        if(matrix[i][j] < 0)
        matrix[i][j] = 0;
}
Matrix operator +(const Matrix& l, const Matrix& r)
{
    if(l.col != r.col || l.row != r.row)
    throw wrong_matrix_size();
    Matrix result(l.row,l.col);
    for(int i = 0; i < l.row;++i)
    for(int j = 0; j < l.col; ++j)
        result.matrix[i][j] = l.matrix[i][j] + r.matrix[i][j];
    return result;
}
Matrix operator -(const Matrix& l, const Matrix& r)
{
    if(l.col != r.col || l.row != r.row)
    throw wrong_matrix_size();
    Matrix result(l.row,l.col);
    for(int i = 0; i < l.row;++i)
    for(int j = 0; j < l.col; ++j)
        result.matrix[i][j] = l.matrix[i][j] - r.matrix[i][j];
    return result;
}
std::ostream& operator <<(std::ostream& out,const Matrix& m )
{
    for(int i = 0; i < m.row;++i)
    {
    for(int j = 0; j < m.col; ++j)
        out<<m.matrix[i][j]<<' ';
    out<<'\n';
    }
    return out;
}
int main()
{
    srand(time(NULL));
    Matrix m1(4,4);
    std::cout<<m1;
    Matrix m2(4,5);
    try{
    Matrix m3 = m1 - m2;
    m3.substitute();
    std::cout<<'\n'<<m3;
    }catch(wrong_matrix_size)
    {
    std::cerr<<"wrong matrix size";
    }
    return 0;
}
 
Текущее время: 10:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru