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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Последовательность из 40 нулей и единиц http://www.cyberforum.ru/cpp-beginners/thread767356.html
Всем доброго времени суток. Дали задание курсовой, даже нет идей как это реализовать. Задание: Найти последовательность из 40 нулей и единиц, в которой никакой отрезок не повторяется три раза...
C++ Описать структуру Animal, которая содержит данные о животном Помогите пожалуйста, очень нужно решении вот такой задачи: объявите структуру Animal, которая должна содержать следующие данные о животном возраст пол, имя, есть/нет хозяина. пользователь должен... http://www.cyberforum.ru/cpp-beginners/thread767335.html
Функция Аккермана без рекурсии C++
Задача: A(0, n) = n + 1; A(m, 0) = A(m–1, 1); при m > 0; A(m, n) = A(m–1, A(m, n–1)); при m > 0 и n > 0. С рекурсией она решается так (размер стека пришлось увеличить, дабы хотя бы (4;1),...
C++ Нужно составить программу вычисления выражения
нужно составить программу вычисления Z,
C++ Проверка открытия файла вывода http://www.cyberforum.ru/cpp-beginners/thread767288.html
#include <iostream> #include <fstream> #include <stdio.h> #include <string> using namespace std; int main () { cout <<"enter way: ";
C++ Неадекватное поведение цикла Предсавляю вашему вниманию код программы: #include <iostream> #include <stdlib.h> int main() { for (int i=1; i<=999; i++) printf ("%d\n", i); подробнее

Показать сообщение отдельно
_andrew_
22 / 22 / 3
Регистрация: 14.11.2012
Сообщений: 64

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

20.01.2013, 20:14. Просмотров 289. Ответов 0
Метки (Все метки)

Ввести класс для работы с прямоугольной матрицей(3х3).
Реализовать оперцию : ввод матрицы с консоли (оператор >>). Продемонстрируйте выполнение операции с объектами этого класса.
Код:
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <iomanip>
 
template<typename T>
class M3
{
private:
    typedef typename std::initializer_list<std::initializer_list<T>>::const_iterator cListIter;
    typedef typename std::initializer_list<T>::const_iterator cIter;
    T** p;
    static std::size_t const msize;
    void allocate()
    {
        p = new T*[msize];
        std::size_t i, j;
        try
        {
            for(i = 0; i < msize; ++i)
            {
                p[i] = new T[msize];
            }
        }
        catch (std::bad_alloc const&)
        {
            while(i--)
            {
                delete[] p[i];
            }
            delete[] p;
            throw;
        }
        return;
    }
public:
    M3(std::initializer_list<std::initializer_list<T>> l = std::initializer_list<std::initializer_list<T>>({{T(), T(), T()}, {T(), T(), T()}, {T(), T(), T()}}))
    {
        if(msize != l.size())
        {
            throw std::invalid_argument("matrix must be 3 x 3");
        }
        for(auto const& lst : l)
        {
            if(msize != lst.size()) throw std::invalid_argument("matrix must be 3 x 3");
        }
        allocate();
 
        std::size_t i = 0, j;
        for(cListIter it = l.begin(); i < msize; ++i, ++it)
        {
            j = 0;
            for(cIter subIt = it->begin(); j < msize; ++j, ++subIt)
            {
                p[i][j] = *subIt;
            }
        }
        return;
    }
 
    M3(M3 const& m)
    {
        allocate();
        for(std::size_t i = 0; i < msize; ++i)
        {
            for(std::size_t j = 0; j < msize; ++j)
            {
                p[i][j] = m.p[i][j];
            }
        }
        return;
    }
 
    virtual ~M3()
    {
        for(std::size_t i = 0; i < msize; ++i)
        {
            delete[] p[i];
        }
        delete[] p;
        return;
    }
 
    M3& operator=(M3 const& m)
    {
        if(this != &m)
        {
            this->~M3();
            new(this) M3(m);
        }
        return *this;
    }
 
    T* operator[](std::size_t ind)
    {
        if(ind >= msize)
        {
            throw std::out_of_range("ind >= msize");
        }
        else return p[ind];
    }
 
    friend std::istream& operator>>(std::istream& is, M3& m)
    {
        for(std::size_t i = 0; i < msize; ++i)
        {
            for(std::size_t j = 0; j < msize; ++j)
            {
                std::cout << "p[" << i << "][" << j << "] = ";
                is >> m.p[i][j];
            }
        }
        return is;
    }
 
    friend std::ostream& operator<<(std::ostream& os, M3 const& m)
    {
        for(std::size_t i = 0; i < msize; ++i)
        {
            for(std::size_t j = 0; j < msize; ++j)
            {
                std::cout << std::setw(5) << std::left << m.p[i][j];
            }
            std::cout << std::endl;
        }
        return os;
    }
};
 
template<typename T>
std::size_t const M3<T>::msize(3);
 
int main()
{
    M3<int> m({{-19,-5,19},{22,22,22},{3,3,3}}), m1({{5,5,5},{6,6,6},{7,7,7}}), m2;
    std::cin >> m2;
    m2[0][1] = -78;
    std::cout << m2 << std::endl;
    return 0;
}
кучу ошибок выдает(((
Если у кого-нибудь есть похожая задача, поделитесь, если не сложно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.