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

Операции над матрицами-сложение, вычитание, умножение на число - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамические структуры данных.Стек. Значение выражения в постфиксной форме http://www.cyberforum.ru/cpp-beginners/thread1195275.html
Пусть строка символов, введенная с клавиатуры, задает выражение, записанное в постфиксной форме (например, 6523+8*+3+*). В выражении встречаются цифры 0..9 и знаки арифметических операций. Необходимо вычислить значение выражения.В данном моем примере мы вводим числа типа int и считаем значение выражения ,а надо сделать под double может кто помочь? # include <iostream> using namespace...
C++ Подскажите,как сделать блок-схему по программе.Кто умеет их делать.Заранее благодарю) --------------------------------------------------------------------------- * #include <vcl.h> #pragma hdrstop * //--------------------------------------------------------------------------- #include<iostream.h> #include <math.h> #include <stdio.h> #pragma argsused http://www.cyberforum.ru/cpp-beginners/thread1195251.html
C++ Как запихнуть массив строк в класс?
Есть класс, один из методов который использует массив строк: char* pszName = { "Anton", "Alex" }; Сейчас это вне класса, как в класс запихнуть?
C++ Выход из цикла
Проблема следующая: Согласно i из внутреннего цикла берутся значения из вектора, но можно выйти за границы вектора. Для границы снизу - всё работает считает. Но нужно сделать , что если end1> чем размер файла, то присвоить end1=end+p и продолжить выполнения цикла. Но получается, что входит в бесконечный цикл for(int j =start, end =n+start; j < end; j++) { // считаем значение для...
C++ Проставить шкалу на осях координат http://www.cyberforum.ru/cpp-beginners/thread1195221.html
Здравствуйте. Мне необходимо проставить шкалу на осях координат. Составил следующий код программы: k=800*0.3/(n2-n1); outtextxy (X0, Y0, "0"); for(i=1;i<=1000;i++) {outtextxy (X0, Y0-i*k, "1"); outtextxy (X0+i*k, Y0, "1");} X0 и Y0 равны 400, 800 - ширина окна (само окно 800х800). Подставив этот цикл я получаю шкалу на осях координат по положительным направлениям, но при этом у меня...
C++ Разработка программы составления расписания занятий Исходные данные: Наименование дисциплин Количество лекций, семинаров и лабораторных занятий по каждой дисциплине на неделе Фамилии преподавателей, проводящих занятие Список аудиторий предназначенных для каждого вида занятий Выходные данные: Расписание занятий потока на две недели Ограничения: подробнее

Показать сообщение отдельно
АЛЕКСЕЙ_92
3 / 3 / 0
Регистрация: 01.06.2014
Сообщений: 130
05.06.2014, 11:42  [ТС]     Операции над матрицами-сложение, вычитание, умножение на число
matrix.cpp: определяет точку входа для консольного приложения.
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include "stdafx.h"
#include <iostream>
#include <iomanip>
//#include <cstdlib>
#include <ctime>
//#include <exception>
//#include <stdexcept>
//#include <matrix.h>
 
using namespace std;
 
class Array
{
protected:
        int** _data;
        int _cols, _rows;
public:
        Array(void) : _data(0), _rows(0),_cols(0) {};
        Array(int rows, int cols, bool fill=false, int filler=0)
                : _rows(rows), _cols(cols), _data(0)
        {
                _data = new int* [_rows];
                for (int i=0; i<_rows; i++)
                {
                        _data[i] = new int[_cols];
                        if (fill)
                                for (int j=0; j<_cols; j++)
                                        _data[i][j] = filler;
                }
        }
 
        Array(const Array& other) :
                _cols(other.cols()),
                _rows(other.rows())
        {
                _data = new int* [_rows];
                for (int i=0; i<_rows; i++)
                {
                        _data[i] = new int[_cols];
                        for (int j=0; j<_cols; j++)
                                _data[i][j] = other._data[i][j];
                }
        }
 
        // возвращает транспонированную матрицу
        const Array transpon() const
        {
                Array C(_cols, _rows);
                for (int i=0; i<_cols; i++)
                        for (int j=0; j<_rows; j++)
                                C[i][j] = _data[j][i];
                return C;
        }
        // сложение двух матриц
        const Array operator+(const Array& other) const
        {
                if ((_cols != other.cols()) || (_rows != other.rows()))
                        throw out_of_range("Multiplied matrixes do not have same number of cols and rows.");
                Array C(_rows, _cols);
                for (int i=0; i<C.rows(); i++)
                        for (int j=0; j<C.cols(); j++)
                                C._data[i][j] = _data[i][j] + other._data[i][j];
                return C;
        }
        //вычитание двух матриц
        const Array operator+(const Array& other) const
        {
                if ((_cols != other.cols()) || (_rows != other.rows()))
                        throw out_of_range("Multiplied matrixes do not have same number of cols and rows.");
                Array C(_rows, _cols);
                for (int i=0; i<C.rows(); i++)
                        for (int j=0; j<C.cols(); j++)
                                C._data[i][j] = _data[i][j] - other._data[i][j];
                return C;
        }
 
        // умножение двух матриц
        const Array operator*(const Array& other) const
        {
                if (_cols != other.rows())
                        throw out_of_range("Multiplied matrixes do not have same number of cols and rows.");
                Array C(_rows, other.cols(), true);
                for (int i=0; i<C.rows(); i++)
                        for (int j=0; j<C.cols(); j++)
                                for (int k=0; k<_cols; k++)
                                C[i][j] += _data[i][k]*other._data[k][j];
                return C;
        }
 
        // присваивание матрицы
        Array& operator= (const Array& other)
        {
                if (this!=&other)
                {
                        if (_data!=0)
                        {
                                for (int i=0; i<_rows; i++)
                                        delete [] _data[i];
                                delete [] _data;
                        }
                        _rows = other.rows();
                        _cols = other.cols();
 
                        _data = new int* [_rows];
                        for (int i=0; i<_rows; i++)
                                _data[i] = new int[_cols];
 
                        for (int i=0; i<_rows; i++)
                                for (int j=0; j<_cols; j++)
                                        _data[i][j] = other._data[i][j];
                }
                return *this;
        }
 
        // вывод матрицы
        friend ostream& operator<< (ostream& o, const Array& a)
        {
                for (int i=0; i<a._rows; i++)
                {
                        for (int j=0; j<a._cols; j++)
                                o << setw(4) << a._data[i][j];
                        o << endl;
                }
                return o;
        }
 
void fill_random()
{
for (int i=0; i<_rows; i++)
for (int j=0; j<_cols; j++)
_data[i][j] = rand()%100+1;
}
int* operator[](int i) { return _data[i]; }
int& at(int i, int j) { return _data[i][j]; }
const int cols() const { return _cols; }
const int rows() const { return _rows; }
 
        ~Array()
        {
                if (_data!=0)
                {
                        for (int i=0; i<_rows; i++)
                                delete [] _data[i];
                        delete [] _data;
                }
        }
};
 
int main()
{
        srand(static_cast<unsigned int>(time(0)));
 
        int N,M,K;
        cin>>N>>M>>K;
        Array x(N, M, true, 1);
        Array y(N, M, true, 1);
        Array z(N, K);
        z.fill_random();
 
        cout << (x*y) << endl;
        cout << (x+y) << endl;
        cout << z << endl << z.transpon() << endl;
 
        return 0;
}

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