diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..96eeaf2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++.exe build active file", + "command": "C:\\msys64-2\\ucrt64\\bin\\g++.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${workspaceFolder}/*.cpp", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/1/.vscode/tasks.json b/1/.vscode/tasks.json new file mode 100644 index 0000000..96eeaf2 --- /dev/null +++ b/1/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++.exe build active file", + "command": "C:\\msys64-2\\ucrt64\\bin\\g++.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${workspaceFolder}/*.cpp", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/1/1.cpp b/1/1.cpp index b83dbef..99df921 100644 --- a/1/1.cpp +++ b/1/1.cpp @@ -4,14 +4,42 @@ #include using namespace std; +#define MAX_SIZE 100 + class Person { public: Person(const string& name) { this->name = name; + age = 0; + } + + Person(string _name, int _age) + { + name = _name; + age = _age; } + Person() + { + name = " "; + age = 0; + } + + string getName() const {return name;} string& getName() { return name; } + void setName(const string& _name) {name = _name;} + void setAge(int _age) {age = _age;} + + bool operator<(const Person& person) const { + return name < person.name; + } + bool operator==(const Person& person) const + { + return (person.name == name); + } + + friend class Group; private: string name; @@ -20,12 +48,13 @@ class Person { }; ostream& operator<<(ostream& out, const Person& p) { - cout << p.getName(); + out << p.getName(); return out; } + class Group { public: @@ -34,29 +63,98 @@ class Group { this->members = new Person[max_lenght]; this->size = 0; } - void add(Person p) { - if (this->size == this->cap) { - return; + Group(const Group& other) { + this->cap = other.cap; + this->size = other.size; + this->members = new Person[other.cap]; + + for (int i = 0; i < other.size; i++) { + this->members[i] = other.members[i]; + } + } + Group(Group& g) + { + this->size = g.size; + this->cap = g.cap; + this->members = new Person[g.cap]; + for(int i = 0;i < g.size;++i) + { + this->members[i] = g.members[i]; } - this->members[size] = p; - this->size++; } - void deletePerson(string name) { - int i; - for (i = 0; i < size; i++) { - if(members[i].name == name) - break; - + Group& operator=(const Group& other) { + if (this != &other) { + delete[] members; + this->cap = other.cap; + this->size = other.size; + this->members = new Person[other.cap]; + + for (int i = 0; i < other.size; i++) { + this->members[i] = other.members[i]; + } + } + return *this; + } + void add(const Person& p) { + if (size == cap) { + return; + } + members[size] = p; + size++; + } + void deletePerson(const string& name) { + int i; + for (i = 0; i < size; i++) { + if (members[i].getName() == name) + break; + } + if (i == size) { + return; + } + for (int index = i; index < size - 1; index++) { + members[index] = members[index + 1]; + } + members[size - 1].setName(""); + size--; + } + Group operator+(const Group& g) const { + Group res(size + g.size); + for (int i = 0; i < size; ++i) { + res.members[i] = members[i]; + } + for (int i = size, j = 0; i < size + g.size; ++i, ++j) { + res.members[i] = g.members[j]; + } + res.size = size + g.size; + res.cap = size + g.size; + return res; + } + Group& operator+=(const Group& g) { + cap = size + g.size; + Person *tmp = new Person[cap]; + for(int i = 0;i < size;++i) + { + tmp[i] = members[i]; } - for (int index = i; index < size - 1; index++) { - members[index] = members[index + 1]; + members = new Person[cap]; + for(int i = 0;i < size;++i) + { + members[i] = tmp[i]; } - size--; - } + for (int i = size, j = 0; i < size + g.size; ++i, ++j) { + members[i] = g.members[j]; + size++; + } + delete []tmp; + return *this; + } + + friend ostream& operator<< (ostream& out, const Group &g); ~Group() { delete[] members; } + friend bool isGroupFull(const Group& g); private: int size; @@ -65,39 +163,47 @@ class Group { }; -bool isGroupFull(Group g) { - return (g.size == g.cap); +ostream& operator<< (ostream& out, const Group &g) +{ + for(int i = 0;i < g.size; ++i) + { + out << g.members[i] << '\t'; + } + return out; +} + +bool isGroupFull(const Group& g) { + return (g.size == g.cap); } int main() { - /* Person p1("somename"); - Person p1("somename2"); + Person p2("somename2"); cout << p1<score = score; this->label = label; this->detail = detail; @@ -8,5 +10,50 @@ Score::Score(int score,char* detail, Label label) :ID(Score::ID_generator) { ID_generator++; } +Score::Score(int score,const string detail, Label label) :ID(Score::ID_generator) { + this->score = score; + this->label = label; + this->detail = detail; + + ID_generator++; +} +Score::Score():ID(0) +{ + score = 0; + label = GREAT; + detail = " "; +} +void print(const Score& score) +{ + cout << "Score: " << score.score << endl; + cout << "Label: "; + switch (score.label) + { + case Score::GREAT: + cout << "GREAT"; + break; + case Score::GOOD: + cout << "GOOD"; + break; + case Score::NOTBAD: + cout << "NOTBAD"; + break; + case Score::BAD: + cout << "BAD"; + break; + } + cout << endl; + cout << "Detail: " << score.detail << endl; +} +void Score::set_score(int _score){score = _score;} +void Score::set_label(Label _label){label = _label;} +void Score::set_detail(const string& _detail){detail = _detail;} +void Score::setID_generator(int id_g){ID_generator = id_g;} +Score Score::operator=(const Score &sc) +{ + Score res(sc.score,sc.detail,sc.label); + return res; +} +Score::~Score(){} diff --git a/2/Score.h b/2/Score.h index 0dd79cb..8e1856e 100644 --- a/2/Score.h +++ b/2/Score.h @@ -1,3 +1,5 @@ +#ifndef SCORE_H +#define SCORE_H #include #include using namespace std; @@ -10,9 +12,18 @@ class Score { GOOD, NOTBAD, BAD, - }Label; + }Label; - Score(int score, char* detail, Label label); + Score(int score, const char* detail, Label label); + Score(int score, const string detail, Label label); + Score(); + void set_score(int _score); + void set_label(Label _label); + void set_detail(const string& _detail); + void setID_generator(int id_g); + Score operator=(const Score &scor); + + ~Score(); private: int score; Label label; @@ -21,5 +32,5 @@ class Score { static int ID_generator; }; - +#endif diff --git a/2/main.cpp b/2/main.cpp index 64d213e..0915e54 100644 --- a/2/main.cpp +++ b/2/main.cpp @@ -5,6 +5,11 @@ #include #include "Score.h" #include "SomeRandomDotHFile.h" +#include +#include + +int Score::ID_generator = 0; + using namespace std; #define FOR(n) for(int i=0;i