Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Kiril Klein
cpp_introduction
Commits
e249ebe4
Commit
e249ebe4
authored
Oct 22, 2019
by
Kevin Höllring
Browse files
Add sample with custom class and more complex operations
parent
9f574587
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/matrix.h
0 → 100644
View file @
e249ebe4
#ifndef __MATRIX_H__
#define __MATRIX_H__
#include <vector>
#include <iostream>
namespace
magic
{
using
std
::
vector
;
// This is a custom Matrix type to allow for matrix multiplication
class
Matrix
{
public:
Matrix
(
uint8_t
rows
,
uint8_t
columns
)
{
this
->
_rows
=
rows
;
this
->
_columns
=
columns
;
this
->
entries
.
assign
(
rows
,
vector
<
int32_t
>
(
columns
,
0
));
}
void
setValue
(
uint8_t
i
,
uint8_t
j
,
int32_t
value
)
{
entries
[
i
][
j
]
=
value
;
}
int32_t
getValue
(
uint8_t
i
,
uint8_t
j
)
{
return
entries
[
i
][
j
];
}
// Calculate the matrix product with another matrix
Matrix
multiply
(
Matrix
&
other
)
{
// Create the result matrix
Matrix
result
(
this
->
_rows
,
other
.
_columns
);
// Calculate all entries in the resulting matrix
for
(
uint8_t
r
=
0
;
r
<
this
->
_rows
;
r
++
)
{
for
(
uint8_t
c
=
0
;
c
<
other
.
_columns
;
c
++
)
{
for
(
uint8_t
link
=
0
;
link
<
this
->
_columns
;
link
++
)
{
int32_t
res
=
result
.
getValue
(
r
,
c
)
+
this
->
getValue
(
r
,
link
)
*
other
.
getValue
(
link
,
c
);
result
.
setValue
(
r
,
c
,
res
);
}
}
}
// Return the resulting matrix
return
result
;
}
// Output the matrix to screen
void
print
()
{
using
std
::
cout
;
using
std
::
endl
;
for
(
uint8_t
r
=
0
;
r
<
this
->
_rows
;
r
++
)
{
for
(
uint8_t
c
=
0
;
c
<
this
->
_columns
;
c
++
)
{
cout
<<
entries
[
r
][
c
]
<<
'\t'
;
}
cout
<<
endl
;
}
}
private:
uint8_t
_rows
;
uint8_t
_columns
;
vector
<
vector
<
int32_t
>>
entries
;
};
}
#endif
\ No newline at end of file
src/sample_4.cpp
0 → 100644
View file @
e249ebe4
#include "matrix.h"
#include <iostream>
// A simple program to multiply to matrices read in from std input
int
main
(
int
argc
,
char
**
argv
)
{
using
std
::
cin
;
using
std
::
cout
;
using
std
::
cerr
;
using
std
::
endl
;
uint8_t
rows1
,
columns1
;
cout
<<
"Number of rows of the first matrix"
<<
endl
;
cin
>>
rows1
;
cout
<<
"Number of columns of the first matrix"
<<
endl
;
cin
>>
columns1
;
// Import our custom Matrix type
using
magic
::
Matrix
;
Matrix
matrix_1
(
rows1
,
columns1
);
cout
<<
"Please enter the entries of the matrix in a row-after-row fashion with spaces separating subsequent entries"
<<
endl
;
for
(
uint8_t
r
=
0
;
r
<
rows1
;
r
++
)
{
for
(
uint8_t
c
=
0
;
c
<
columns1
;
c
++
)
{
int32_t
val
;
cin
>>
val
;
matrix_1
.
setValue
(
r
,
c
,
val
);
}
}
cout
<<
"Matrix 1 was read:"
<<
endl
;
matrix_1
.
print
();
uint8_t
rows2
,
columns2
;
cout
<<
"Number of rows of the second matrix"
<<
endl
;
cin
>>
rows2
;
if
(
rows2
!=
columns1
)
{
cerr
<<
"The number of rows in the second matrix has to equal the number of columns in the first matrix"
<<
endl
;
// Declare an error and stop execution
exit
(
1
);
}
cout
<<
"Number of columns of the second matrix"
<<
endl
;
cin
>>
columns2
;
Matrix
matrix_2
(
rows2
,
columns2
);
cout
<<
"Please enter the entries of the matrix in a row-after-row fashion with spaces separating subsequent entries"
<<
endl
;
for
(
uint8_t
r
=
0
;
r
<
rows2
;
r
++
)
{
for
(
uint8_t
c
=
0
;
c
<
columns2
;
c
++
)
{
int32_t
val
;
cin
>>
val
;
matrix_2
.
setValue
(
r
,
c
,
val
);
}
}
cout
<<
"Matrix 2 was read:"
<<
endl
;
matrix_2
.
print
();
Matrix
product
=
matrix_1
.
multiply
(
matrix_2
);
cout
<<
"M1 * M2 ="
<<
endl
;
product
.
print
();
return
0
;
}
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment