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

класс "Матрица" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ динамическая цепочка http://www.cyberforum.ru/cpp-beginners/thread142522.html
Динамические списки, стеки. В соответствии с вариантом задания организовать динамические структуры данных и обработать их по предложенному алгоритму. 2.Создать динамическую цепочку символов, содержащую текст без разделения на строки. Текст вводится из внешнего текстового файла, в общем случае содержащего разделение на строки.
C++ Наибольшее отрицательное значение в массиве Всем доброго времени суток. У меня тут возникла небольшая загвоздка, нужно в массиве найти первый максимальный элемент среди отрицательных элементов, стоящих правее элемента, равного Т. Вот код, но он работает немного некорректно. #include <iostream> using namespace std; int main() { setlocale(LC_ALL,""); int A,n,T,tmp,i,j,max,i_max; cout<<"Введите количество элементов массива: "; http://www.cyberforum.ru/cpp-beginners/thread142496.html
C++ Программа на замену в строке
Реализовать функцию заменяющую в строке последнее слово 'пять' на цифру 5.
Переписать в выходную строку слова из входной строки в порядке возрастания их длины C++
Народ очень нужна помощь решить задачку на простом СИ. Буду очень благодарен кто поможет... можно скинуть на мыло Calipso-777@mail.ru или выложить тут... А вот сама Задачка: Переписать в выходную строку слова из входной строки в порядке возрастания их длины. p.s:Если не сложно с объяснением задачи.
C++ Заполнение дерева http://www.cyberforum.ru/cpp-beginners/thread142463.html
Нужно заполнить дерево так, чтобы указатели помещались наиболее ближе к корню, т.е. чтобы пока не заполнился один уровень он на другой не переходил. Я так понял, что нужно использовать рекурсию. Структура дерева следующая: struct tree { char* str; tree** chs; int count_chs; int inited; void init(int lvl)
C++ Создание внешних модулей в С++ Как создать внешний файл с функциями наподобие модулей в Pascal? Скажите пожалуйста... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.06.2010, 17:18     класс "Матрица"
Alinochka, вот Вам для затравки класс с кучей конструкторов и оператором сложения, а дальше сами как-нибудь
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
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <stdexcept>
#include <cstdlib>
 
template <typename T>
class Matrix {
    int _rows;
    int _columns;
    T ** _ptr;
    int _width; // ширина выводимого поля
public:
    Matrix() : _rows(0), _columns(0), _ptr(0), _width(3) {}
 
    Matrix(int r, int c) : _rows(r), _columns(c), _width(3) {
        _ptr = new T* [ _rows ];
        for ( int i = 0; i < _rows; ++i )
            _ptr[i] = new T [ _columns ];
    }
 
    Matrix(int r, int c, const T & val) : _rows(r), _columns(c), _width(3) {
        _ptr = new T* [ _rows ];
        for ( int i = 0; i < _rows; ++i ){
            _ptr[i] = new T [ _columns ];
            std::fill_n(_ptr[i], _columns, val);
        }
    }
 
    Matrix(const Matrix & m) {
        *this = m;
    }
 
    ~Matrix() {
        if ( ! empty() ){
            for ( int i = 0; i < _rows; ++i )
                delete [] _ptr[i];
            delete [] _ptr;
        }
    }
 
    const Matrix & operator = (const Matrix & m) {
        if ( &m != this ){
            if ( ! empty() ){
                for ( int i = 0; i < _rows; ++i )
                    delete [] _ptr[i];
                delete [] _ptr;
            }
            _rows = m._rows;
            _columns = m._columns;
            _ptr = new T* [ _rows ];
            for ( int i = 0; i < _rows; ++i ){
                _ptr[i] = new T [ _columns ];
                std::copy(m._ptr[i], m._ptr[i] + _columns, _ptr[i]);
            }
            _width = m._width;
        }
        return *this;
    }
 
    const Matrix operator + (const Matrix & m) {
        if ( _rows != m._rows || _columns != m._columns ){
            //std::trow std::runtime_error("Different sizes!"); я не умею этим пользоваться :(
            std::cerr << "Different sizes!" << std::endl;
            exit(EXIT_FAILURE);
        }
        Matrix res(_rows, _columns);
        for ( int i = 0; i < _rows; ++i )
            for ( int j = 0; j < _columns; ++j )
                res._ptr[i][j] = _ptr[i][j] + m._ptr[i][j];
        return res;
    }
 
    bool empty() const {
        return _ptr == 0;
    }
 
    int width() const { return _width; }
 
    void width(int w) { _width = w; }
 
    friend std::ostream & operator << (std::ostream & ost, const Matrix & m) {
        for ( int i = 0; i < m._rows; ++i ) {
            for ( int j = 0; j < m._columns; ++j )
                ost << std::setw(m._width) << m._ptr[i][j];
            ost << std::endl;
        }
        return ost;
    }
 
    friend std::istream & operator >> (std::istream & ist, Matrix & m) {
        for ( int i = 0; i < m._rows; ++i )
            for ( int j = 0; j < m._columns; ++j )
                ist >> m._ptr[i][j];
        return ist;
    }
};
 
int main(){
    Matrix<int> a(3, 4, 1);
    Matrix<int> b(a);
    Matrix<int> c = a + b;
    std::cout << "A:\n" << a << "\nB:\n" << b << "\nA + B:\n" << c << std::endl;
 
    std::cout << "New values for A:" << std::endl;
    std::cin >> a;
 
    c = a + b;
    std::cout << "A:\n" << a << "\nB:\n" << b << "\nA + B:\n" << c << std::endl;
 
    return 0;
}
 
Текущее время: 18:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru