diff --git a/exercises/4/seminar/4/Matrix/Matrix.cbp b/exercises/4/seminar/4/Matrix/Matrix.cbp
new file mode 100644
index 0000000..0ca3aba
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/Matrix.cbp
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/exercises/4/seminar/4/Matrix/Matrix.depend b/exercises/4/seminar/4/Matrix/Matrix.depend
new file mode 100644
index 0000000..7c6617d
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/Matrix.depend
@@ -0,0 +1,18 @@
+# depslib dependency file v1.0
+1584117413 source:c:\users\dtrz\desktop\sem3\new folder\matrix\rational.cpp
+ "ration.hpp"
+
+1584117865 c:\users\dtrz\desktop\sem3\new folder\matrix\ration.hpp
+
+1584117687 source:c:\users\dtrz\desktop\sem3\new folder\matrix\main.cpp
+
+ "ration.hpp"
+ "matrix.hpp"
+
+1584117920 c:\users\dtrz\desktop\sem3\new folder\matrix\matrix.hpp
+ "ration.hpp"
+
+1584117754 source:c:\users\dtrz\desktop\sem3\new folder\matrix\matrix.cpp
+
+ "matrix.hpp"
+
diff --git a/exercises/4/seminar/4/Matrix/Matrix.layout b/exercises/4/seminar/4/Matrix/Matrix.layout
new file mode 100644
index 0000000..83ca1ca
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/Matrix.layout
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/exercises/4/seminar/4/Matrix/bin/Debug/Matrix.exe b/exercises/4/seminar/4/Matrix/bin/Debug/Matrix.exe
new file mode 100644
index 0000000..2a28c16
Binary files /dev/null and b/exercises/4/seminar/4/Matrix/bin/Debug/Matrix.exe differ
diff --git a/exercises/4/seminar/4/Matrix/main.cpp b/exercises/4/seminar/4/Matrix/main.cpp
new file mode 100644
index 0000000..bb6323c
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/main.cpp
@@ -0,0 +1,21 @@
+#include
+#include "ration.hpp"
+#include "matrix.hpp"
+using namespace std;
+
+int main () {
+ Rational r1(5, 2), r2(1, 1);
+ Rational r3, r4;
+
+ Rational data[2][2];
+ data[0][0] = r1;
+ data[0][1] = r2;
+ data[1][0] = r3;
+ data[1][1] = r4;
+
+ Matrix m1(data, 2, 2);
+
+ cout<< r3.getA()<< " "<< r3.getB()<< endl;
+
+ return 0;
+}
diff --git a/exercises/4/seminar/4/Matrix/matrix.cpp b/exercises/4/seminar/4/Matrix/matrix.cpp
new file mode 100644
index 0000000..8f66e95
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/matrix.cpp
@@ -0,0 +1,60 @@
+#include
+#include "matrix.hpp"
+
+
+void Matrix::clearData() {
+ for(int i = 0; i< N; ++i) {
+ delete [] data[i];
+ }
+ delete [] data;
+}
+
+void Matrix::copyData(const Matrix& m) {
+ data = new Rational*[N];
+ for(int i = 0; i< m.N; ++i) {
+ data[i] = new Rational[m.M];
+ }
+
+ for(int i = 0; i< m.N; ++i) {
+ for(int j = 0; j< m.M; ++j) {
+ data[i][j] = m.data[i][j];
+ }
+ }
+}
+
+Matrix::Matrix(Rational** data, int N, int M): data(NULL), N(N), M(M) {
+ if(data == NULL) {
+ return;
+ }
+
+ this->data = new Rational*[N];
+ for(int i = 0; i< N; ++i) {
+ this->data[i] = new Rational[M];
+ }
+
+ for(int i = 0; i< N; ++i) {
+ for(int j = 0; j< M; ++j) {
+ this->data[i][j] = data[i][j];
+ }
+ }
+}
+
+Matrix::Matrix(const Matrix& m) {
+ copyData();
+}
+
+Matrix::Matrix& operator=(const Matrix& m) {
+ if(this == &m) {
+ return *this;
+ }
+ clearData();
+ copyData(m);
+ return *this;
+}
+
+Matrix::~Matrix() {
+ for(int i = 0; i< N; ++i) {
+ delete [] data[i];
+ }
+ delete [] data;
+}
diff --git a/exercises/4/seminar/4/Matrix/matrix.hpp b/exercises/4/seminar/4/Matrix/matrix.hpp
new file mode 100644
index 0000000..969c034
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/matrix.hpp
@@ -0,0 +1,20 @@
+#include
+#include "ration.hpp"
+#ifndef MATRIX
+#define MATRIX
+
+class Matrix {
+ int N, M;
+ Rational** data;
+
+ void clearData();
+ void copyData(const Matrix& m);
+
+public:
+ Matrix(Rational** data = NULL, int N = 0, int M = 0);
+ Matrix(const Matrix& m);
+ Matrix& operator=(const Matrix& m);
+ ~Matrix();
+};
+
+#endif
diff --git a/exercises/4/seminar/4/Matrix/obj/Debug/main.o b/exercises/4/seminar/4/Matrix/obj/Debug/main.o
new file mode 100644
index 0000000..af3eb6c
Binary files /dev/null and b/exercises/4/seminar/4/Matrix/obj/Debug/main.o differ
diff --git a/exercises/4/seminar/4/Matrix/obj/Debug/matrix.o b/exercises/4/seminar/4/Matrix/obj/Debug/matrix.o
new file mode 100644
index 0000000..ee28bd9
Binary files /dev/null and b/exercises/4/seminar/4/Matrix/obj/Debug/matrix.o differ
diff --git a/exercises/4/seminar/4/Matrix/obj/Debug/rational.o b/exercises/4/seminar/4/Matrix/obj/Debug/rational.o
new file mode 100644
index 0000000..19030fa
Binary files /dev/null and b/exercises/4/seminar/4/Matrix/obj/Debug/rational.o differ
diff --git a/exercises/4/seminar/4/Matrix/ration.hpp b/exercises/4/seminar/4/Matrix/ration.hpp
new file mode 100644
index 0000000..209afb5
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/ration.hpp
@@ -0,0 +1,16 @@
+#ifndef RATIONAL
+#define RATIONAL
+
+class Rational {
+ int a;
+ int b;
+
+public:
+
+ int getA() const;
+ int getB() const;
+
+ Rational(int c = 0, int d = 1);
+};
+
+#endif
diff --git a/exercises/4/seminar/4/Matrix/rational.cpp b/exercises/4/seminar/4/Matrix/rational.cpp
new file mode 100644
index 0000000..52e1ee9
--- /dev/null
+++ b/exercises/4/seminar/4/Matrix/rational.cpp
@@ -0,0 +1,18 @@
+#include "ration.hpp"
+
+int Rational::getA() const {
+ return a;
+}
+
+int Rational::getB() const {
+ return b;
+}
+
+Rational::Rational(int c, int d) {
+ a = c;
+ if(b == 0) {
+ b = 1;
+ } else {
+ b = d;
+ }
+}
diff --git a/exercises/4/seminar/4/string.cpp b/exercises/4/seminar/4/string.cpp
new file mode 100644
index 0000000..5321068
--- /dev/null
+++ b/exercises/4/seminar/4/string.cpp
@@ -0,0 +1,105 @@
+#include
+#include
+using namespace std;
+
+int strlen(const char* str) {
+ int i = 0;
+ for(; str[i] != '\0'; ++i);
+ return i;
+}
+
+void strcpy(char* destination, const char* source) {
+ int i = 0;
+ for(; source[i] != '\0'; ++i) {
+ destination[i] = source[i];
+ }
+ destination[i] = '\0';
+}
+
+// strlen, strcpy, strcat
+class String {
+
+private:
+ char* data;
+ int length;
+
+ void copyData(const String& str) {
+ length = str.length;
+ this->data = new char[length + 1];
+ strcpy(this->data, str.data);
+ }
+
+ void clearData() {
+ delete [] data;
+ }
+
+public:
+ // resource aquisition is initialization
+ String(const char* data = ""): data(NULL), length(0) {
+ length = strlen(data);
+ this->data = new char[length + 1];
+ strcpy(this->data, data);
+ }
+
+ String(const String& str) {
+ copyData(str);
+ }
+
+ String& operator=(const String& str) {
+ if(this == &str) {
+ return *this;
+ }
+ clearData();
+ copyData(str);
+
+ return *this;
+ }
+
+ ~String() {
+ clearData();
+ }
+
+ void strcat(const String& str) {
+ char* newData = new char[length + str.length + 1];
+ for(int i = 0; data[i] != '\0'; ++i) {
+ newData[i] = data[i];
+ }
+ cout<< length<< endl;
+ for(int i = 0; str.data[i] != '\0'; ++i) {
+ newData[i + length] = str.data[i];
+ }
+ newData[length + str.length] = '\0';
+
+ delete [] data;
+
+ data = newData;
+ length = length + str.length;
+ }
+
+ static String strcat(const String& s1, const String& s2) {
+ String result;
+ result.strcat(s1);
+ result.strcat(s2);
+ return result;
+ }
+
+ int getLength() const {
+ return length;
+ }
+
+ const char* getData() const {
+ return data;
+ }
+};
+
+int main () {
+ String s1("str1"), s2("str2");
+
+ s1.strcat(s2);
+ cout<< s1.getData()<< endl;
+
+ String s3 = String::strcat(s1, s2);
+ cout<< s3.getData()<< endl;
+
+ return 0;
+}
diff --git a/exercises/4/seminar/4/stringBuild.cpp b/exercises/4/seminar/4/stringBuild.cpp
new file mode 100644
index 0000000..2cdd741
--- /dev/null
+++ b/exercises/4/seminar/4/stringBuild.cpp
@@ -0,0 +1,36 @@
+#include
+using namespace std;
+
+int strlen(const char* str) {
+ int i = 0;
+ for(; str[i] != '\0'; ++i);
+ return i;
+}
+
+void strcpy(char* destination, const char* source) {
+ int i = 0;
+ for(; source[i] != '\0'; ++i) {
+ destination[i] = source[i];
+ }
+ destination[i] = '\0';
+}
+
+class String {
+ char* data;
+ int length;
+
+public:
+ String(const char* data) {}
+ String(const String& str) = delete;
+ String& operator=(const String& str) = delete;
+ ~String() {}
+};
+
+int main () {
+
+ String s1("str1"), s2("str2");
+
+ cout<< s1.getData()<< " "<< s2.getData()<< endl;
+
+ return 0;
+}
diff --git a/exercises/4/seminar/4/test.cpp b/exercises/4/seminar/4/test.cpp
new file mode 100644
index 0000000..1932411
--- /dev/null
+++ b/exercises/4/seminar/4/test.cpp
@@ -0,0 +1,18 @@
+#include
+using namespace std;
+
+int main() {
+ char* arr = new char[10];
+ for(int i = 0; i< 9; ++i) {
+ arr[i] = 'a' + i;
+ }
+ arr[9] = '\0';
+ cout<< arr<< endl;
+ if(true) {
+ char* arr2 = arr;
+ delete [] arr2;
+ }
+ cout<< arr<< endl;
+
+ return 0;
+}
diff --git a/exercises/4/seminar/4/test1.cpp b/exercises/4/seminar/4/test1.cpp
new file mode 100644
index 0000000..cc2b3c0
--- /dev/null
+++ b/exercises/4/seminar/4/test1.cpp
@@ -0,0 +1,31 @@
+
+#include
+using namespace std;
+
+struct Str {
+ char* data;
+
+ Str(const char* data) {
+ int len = 0;
+ for(; data[len] != '\0'; ++len);
+ this->data = new char[len + 1];
+ for(int i = 0; i< len+1; ++i) {
+ this->data[i] = data[i];
+ }
+ }
+
+ ~Str() {
+ delete [] data;
+ };
+};
+
+int main() {
+ Str str1("asdf");
+ cout<< str1.data<< endl;
+ if(true) {
+ Str str2(str1);
+ }
+ cout<< str1.data<< endl;
+
+ return 0;
+}