1/*
2 Copyright(C) 1998
3 All Rights Reserved. Salih Yurttas, ZCubes, BitsOfCode Software Systems, Inc..
4
5 Permission to use, copy, modify, and distribute this
6 software and its documentation for EDUCATIONAL purposes
7 and without fee is hereby granted provided that this
8 copyright notice appears in all copies.
9
10 date : January 1, 1998.
11 author : Salih Yurttas.
12
13 matrix.cpp
14*/
15
16
17#include <iostream>
18
19using namespace std;
20
21#include "matrix.h"
22
23matrix::
24matrix(const int r,
25 const int c) : r_size(r),
26 c_size(c),
27 m(new int*[r_size]) {
28 for(int i=0; i<r_size; ++i) {
29 m[i]= new int[c_size];
30 for(int j=0; j<c_size; ++j)
31 m[i][j] = 0;
32 }
33}
34
35matrix::
36matrix(const matrix& m1) : r_size(m1.r_size),
37 c_size(m1.c_size),
38 m(new int*[r_size]) {
39 for(int i=0; i<r_size; ++i) {
40 m[i]= new int[c_size];
41 for(int j=0; j<c_size; ++j)
42 m[i][j] = m1.m[i][j];
43 }
44}
45
46matrix::
47~matrix() {
48 for(int i=0; i<r_size; ++i) {
49 delete [] m[i];
50 m[i] = NULL;
51 }
52 delete [] m;
53 m = NULL;
54 r_size = 0;
55 c_size = 0;
56}
57
58matrix&
59matrix::
60operator=(const matrix& m1) {
61 if(this==&m1) return *this;
62
63 for(int i=0; i<r_size; ++i)
64 delete [] m[i];
65 delete [] m;
66
67 r_size = m1.r_size;
68 c_size = m1.c_size;
69
70 m = new int*[r_size];
71
72 for(int i=0; i<r_size; ++i) {
73 m[i]= new int[c_size];
74 for(int j=0; j<c_size; ++j)
75 m[i][j] = m1.m[i][j];
76 }
77
78 return *this;
79}
80
81matrix&
82matrix::
83operator+=(const matrix& m1) {
84 for(int i=0; i<r_size; ++i)
85 for(int j=0; j<c_size; ++j)
86 m[i][j] += m1.m[i][j];
87
88 return *this;
89}
90
91matrix&
92matrix::
93operator-=(const matrix& m1) {
94 for(int i=0; i<r_size; ++i)
95 for(int j=0; j<c_size; ++j)
96 m[i][j] -= m1.m[i][j];
97
98 return *this;
99}
100
101matrix&
102matrix::
103operator*=(const matrix& m1) {
104 for(int i=0; i<r_size; ++i)
105 for(int j=0; j<m1.c_size; ++j) {
106 m[i][j] = 0;
107 for(int k=0; k<c_size; k++)
108 m[i][j] += m[i][k] * m1.m[k][j];
109 }
110
111 return *this;
112}
113
114matrix
115operator+(const matrix& m1,
116 const matrix& m2) {
117 matrix t(m1.r_size,
118 m1.c_size);
119
120 for(int i=0; i<m1.r_size; ++i)
121 for(int j=0; j<m1.c_size; ++j)
122 t.m[i][j] = m1.m[i][j] + m2.m[i][j];
123
124 return t;
125}
126
127matrix
128operator-(const matrix& m1,
129 const matrix& m2) {
130 matrix t(m1.r_size,
131 m1.c_size);
132
133 for(int i=0; i<m1.r_size; ++i)
134 for(int j=0; j<m1.c_size; ++j)
135 t.m[i][j] = m1.m[i][j] - m2.m[i][j];
136
137 return t;
138}
139
140matrix
141operator*(const matrix& m1,
142 const matrix& m2) {
143 matrix t(m1.r_size,
144 m1.c_size);
145
146 for(int i=0; i<m1.r_size; ++i)
147 for(int j=0; j<m2.c_size; ++j) {
148 t.m[i][j] = 0;
149 for(int k=0; k<m1.c_size; k++)
150 t.m[i][j] += m1.m[i][k] * m2.m[k][j];
151 }
152
153 return t;
154}
155
156matrix
157operator*(const matrix& m1,
158 const int s) {
159 matrix t(m1.r_size,
160 m1.c_size);
161
162 for(int i=0; i<m1.r_size; ++i)
163 for(int j=0; j<m1.c_size; ++j)
164 t.m[i][j] = m1.m[i][j] * s;
165
166 return t;
167}
168
169matrix
170operator*(const int s,
171 const matrix& m1) {
172 matrix t(m1.r_size,
173 m1.c_size);
174
175 for(int i=0; i<m1.r_size; ++i)
176 for(int j=0; j<m1.c_size; ++j)
177 t.m[i][j] = s * m1.m[i][j];
178
179 return t;
180}
181
182int
183matrix::
184retrieve_element(const int r,
185 const int c) const {
186 return m[r][c];
187}
188
189void
190matrix::
191assign_element(const int r,
192 const int c,
193 const int value) {
194 m[r][c] = value;
195}
196
197void
198matrix::
199negate() {
200 for(int i=0; i<r_size; ++i)
201 for(int j=0; j<c_size; ++j)
202 m[i][j] *= -1;
203}
204
205void
206matrix::
207put_matrix() const {
208 for(int i=0; i<r_size; ++i) {
209 for(int j=0; j<c_size; ++j)
210 cout << m[i][j] << ' ';
211 cout << endl;
212 }
213}