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

Нужно дореализовать доступ по индексу в матрице - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу обработки двумерных массивов, используя динамическое размещение данных http://www.cyberforum.ru/cpp-beginners/thread588847.html
Сформировать вектор из наименьших значений элементов столбцов и найти их среднее арифметическое помогите написать программу..
C++ В программе предусмотреть процедуры ввода-вывода элементов массива В одномерном массиве из n вещественных элементов вычислить: - сумму элементов массива с нечетными номерами; - сумму элементов массива, расположенных между первым и последним отрицательными элементами помогите написать программу.... http://www.cyberforum.ru/cpp-beginners/thread588844.html
Задача на классы файловых потоков C++
Помогите, пожалуйста, добавить возможность записи объектов в файл и чтения объектов из файла. #include <iostream> #include <conio.h> using namespace std; //базовый класс "студент" class CStudent { protected: char m_Fio;//ФИО int m_Year;//год поступления
Напечатать таблицу истинности для логической функции C++
Напечатать таблицу истинности для логической функции: (A<=>B<=>C)A-, где v,-,<=>-знаки логических операций или, не, эквивалентность
C++ Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида http://www.cyberforum.ru/cpp-beginners/thread588806.html
Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида. Алгоритм Евклида: вычитаем числа меньшее до тех число и есть НОД
C++ Адрес первого элемента массива 1. Написать функцию, принимающую в качестве параметра количество строк и столбцов в таблице умножения. Функция должна создать двумерный массив целых чисел размера, достаточного для хранения таблицы умножения и заполнить массив элементами таблицы умножения. Функция должна вернуть адрес первого элемента массива. Заголовок функции: int * get_multiplication_table (unsigned int count); подробнее

Показать сообщение отдельно
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
28.05.2012, 14:24     Нужно дореализовать доступ по индексу в матрице
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
#ifndef MATRIX_H
#define MATRIX_H
 
#   include <exception>
 
    class MatrixLine {
        friend class Matrix;
        const unsigned n;
        double* const data;
 
        MatrixLine(double*, unsigned);
        void operator=(const MatrixLine& m) { }
    public:
        double& operator[ ](unsigned) throw (std::exception);
        const double& operator[ ](unsigned) const throw (std::exception);
    };
 
    class Matrix {
        unsigned m, n;
        double* data;
    public:
        Matrix(unsigned = 1, unsigned = 1) throw (std::exception);
        Matrix(const Matrix&);
        ~Matrix();
 
        Matrix operator-() const;
        Matrix operator+(const Matrix&) const;
        Matrix operator+(const double&) const;
        Matrix operator-(const Matrix&) const;
        Matrix operator-(const double& d) const { return *this + -d; }
        Matrix operator*(const Matrix&) const;
        Matrix operator*(const double&) const;
        Matrix operator/(const Matrix&) const;
        Matrix operator/(const double& d) const { return *this * (1. / d); }
        Matrix& operator=(const Matrix&);
        Matrix& operator=(const double&);
 
        MatrixLine operator[ ](unsigned) throw (std::exception);
        const MatrixLine operator[ ](unsigned) const throw (std::exception);
    };
 
#endif
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
#include "Matrix.h"
 
using namespace std;
 
MatrixLine::MatrixLine(double* d, unsigned dim):
    data(d),
    n(dim)
{
}
 
double& MatrixLine::operator[ ](unsigned d2) throw (exception) {
    if (d2 < n)
        return data[d2];
    throw exception();
}
 
const double& MatrixLine::operator[ ](unsigned d2) const throw (exception) {
    if (d2 < n)
        return data[d2];
    throw exception();
}
 
 
Matrix::Matrix(unsigned d1, unsigned d2) throw (exception) {
    if (!d1 || !d2)
        throw exception();
    m = d1;
    n = d2;
    data = new double[m * n];
}
 
Matrix::Matrix(const Matrix& mx) {
    m = mx.m;
    n = mx.n;
    data = new double[m * n];
}
 
Matrix::~Matrix() {
    delete[ ] data;
}
 
Matrix Matrix::operator-() const {
    Matrix result(m, n);
    for (unsigned i = 0, j; i < m; i++)
        for (j = 0; j < n; j++)
            result.data[j * m + i] = -data[j * m + i];
    return result;
}
 
Matrix Matrix::operator+(const Matrix& mx) const {
    Matrix result(m, n);
    const unsigned m1 = (m < mx.m)? m: mx.m,
        n1 = (n < mx.n)? n: mx.n;
    for (unsigned i = 0, j; i < m1; i++)
        for (j = 0; j < n1; j++)
            result.data[j * m + i] = data[j * m + i] + mx.data[j * m + i];
    return result;
}
 
Matrix Matrix::operator+(const double& d) const {
    Matrix result(m, n);
    for (unsigned i = 0, j; i < m; i++)
        for (j = 0; j < n; j++)
            result.data[j * m + i] = data[j * m + i] + d;
    return result;
}
 
Matrix Matrix::operator-(const Matrix& mx) const {
    Matrix result(m, n);
    const unsigned m1 = (m < mx.m)? m: mx.m,
        n1 = (n < mx.n)? n: mx.n;
    for (unsigned i = 0, j; i < m1; i++)
        for (j = 0; j < n1; j++)
            result.data[j * m + i] = data[j * m + i] - mx.data[j * m + i];
    return result;
}
 
Matrix Matrix::operator*(const Matrix& mx) const {
    Matrix result(m, n);
    const unsigned m1 = (m < mx.m)? m: mx.m,
        n1 = (n < mx.n)? n: mx.n;
    for (unsigned i = 0, j; i < m1; i++)
        for (j = 0; j < n1; j++)
            result.data[j * m + i] = data[j * m + i] * mx.data[j * m + i];
    return result;
}
 
Matrix Matrix::operator*(const double& d) const {
    Matrix result(m, n);
    for (unsigned i = 0, j; i < m; i++)
        for (j = 0; j < n; j++)
            result.data[j * m + i] = data[j * m + i] * d;
    return result;
}
 
Matrix Matrix::operator/(const Matrix& mx) const {
    Matrix result(m, n);
    const unsigned m1 = (m < mx.m)? m: mx.m,
        n1 = (n < mx.n)? n: mx.n;
    for (unsigned i = 0, j; i < m1; i++)
        for (j = 0; j < n1; j++)
            result.data[j * m + i] = data[j * m + i] / mx.data[j * m + i];
    return result;
}
 
Matrix& Matrix::operator=(const Matrix& mx) {
    m = mx.m;
    n = mx.n;
    delete[ ] data;
    data = new double[m * n];
    for (unsigned i = 0, j; i < m; i++)
        for (j = 0; j < n; j++)
            data[j * m + i] = mx.data[j * m + i];
    return *this;
}
 
Matrix& Matrix::operator=(const double& d) {
    for (unsigned i = 0, j; i < m; i++)
        for (j = 0; j < n; j++)
            data[j * m + i] = d;
    return *this;
}
 
MatrixLine Matrix::operator[ ](unsigned d1) throw (exception) {
    if (d1 < m)
        return MatrixLine(data + d1 * n, n);
    throw exception();
}
 
const MatrixLine Matrix::operator[ ](unsigned d1) const throw (exception) {
    if (d1 < m)
        return MatrixLine(data + d1 * n, n);
    throw exception();
}
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
#include <conio.h>
#include <iostream>
#include "Matrix.h"
 
using namespace std;
 
void PrintMx(const Matrix& mx) {
    for (int i = 0, j; i < 2; i++) {
        for (j = 0; j < 3; j++)
            cout << mx[i][j] << ' ';
        cout << endl;
    }
}
 
void ScanMx(Matrix& mx) {
    for (int i = 0, j; i < 2; i++)
        for (j = 0; j < 3; j++)
            cin >> mx[i][j];
}
 
int main() {
    Matrix m(2, 3);
    ScanMx(m);
    PrintMx(m);
    cout << endl;
    m = 2;
    PrintMx(m);
    getch();
}
 
Текущее время: 06:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru