Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 139 additions & 30 deletions 1/1.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,45 @@
/*??????
* Complex Number (Part 1)
* AP ??? ?? ????????
* 1403/1/23
* ???????? ?????
*/

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

class Person {
public:

Person(const string& name) {
this->name = name;

}
string& getName() { return name; }
Person(const string& _name,int _age) {
this->name = _name;
this->age = _age;
}
Person() { name = ""; age = 0; }

//Add distructor
~Person(){}

string& getname() { return name; }
string getname() const { return name; }

void setname(string _name) { name=_name; }
void setage(int _age) { age = _age; }
int getage() const { return age; }

//Overload boolian operator
bool operator<(const Person& p) { return stoi(name) < stoi(p.name); }
bool operator==(const Person& p) { return name == p.name; }

friend class Group;
friend ostream& operator<<(ostream& out, const Person& p);

private:
string name;
Expand All @@ -20,20 +48,35 @@ class Person {
};

ostream& operator<<(ostream& out, const Person& p) {
cout << p.getName();
cout << p.getname()<<endl;
return out;
}



class Group {
public:

Group(int max_lenght) {
Group(int max_lenght) {
this->cap = max_lenght;
this->members = new Person[max_lenght];
this->size = 0;
}
Group(Group& g) {
this->cap =g.cap;
this->members = new Person[g.cap];
this->size = 0;

for (int i = 0; i < g.size; i++) {
this->members[i].name = g.members[i].name;
this->members[i].age = g.members[i].age;
this->size++;
}
}
Group() {
cap = 0;
size = 0;
}

void add(Person p) {
if (this->size == this->cap) {
return;
Expand All @@ -46,7 +89,6 @@ class Group {
for (i = 0; i < size; i++) {
if(members[i].name == name)
break;

}
for (int index = i; index < size - 1; index++) {
members[index] = members[index + 1];
Expand All @@ -58,68 +100,135 @@ class Group {
delete[] members;
}

//Overloading operators
Group operator+(const Group& g) {
Group result;
result.cap = cap + g.cap;
result.size = size + g.size;
result.members = new Person[result.cap];

int i = 0;
for (i = 0; i < size; i++) {
result.members[i].name = members[i].name;
result.members[i].age = members[i].age;
}

for (int j = 0; j < g.size; j++) {
result.members[i].name = g.members[j].name;
result.members[i].age = g.members[j].age;
i++;
}

return result;
}

Group& operator+=(const Group& g) {
int new_size = size + g.size;
int new_cap = cap + g.cap;
Person* new_members = new Person[new_cap];

for (int i = 0; i < size; i++) {
new_members[i].name = members[i].name;
new_members[i].age = members[i].age;
}

for (int j = 0; j < g.size; j++) {
new_members[size + j].name = g.members[j].name;
new_members[size + j].age = g.members[j].age;
}

delete[] members;
members = new_members;
size = new_size;
cap = new_cap;

return *this;
}

Group& operator=(const Group& g) {
if (this == &g) {
return *this;
}

delete[] members;

cap = g.cap;
size = g.size;
members = new Person[cap];

for (int i = 0; i < size; i++) {
members[i].name = g.members[i].name;
members[i].age = g.members[i].age;
}

return *this;
}

//Friends
friend bool isGroupFull(Group g);
friend ostream& operator<<(ostream& out, Group g);

private:
int size;
int cap;
Person* members;

};

ostream& operator<<(ostream& out, Group g) {
for (int i = 0; i < g.size; i++) {
out << g.members[i].getname() << "\t";
}
return out;
}

bool isGroupFull(Group g) {
return (g.size == g.cap);
}

int main()
{
/*
Person p1("somename");
Person p1("somename2");
Person p2("somename2");
cout << p1<<p2;
*/
/*


Group g1(5);
g1.add({ "Erfan",20 });
g1.add({ "Saba",20 });
g1.add({ "Mahrokh",20 });
g1.add({ "Yasin",21 });
cout<<isGroupFull(g1)<<endl;
*/
/*


Group g2(g1);
Group g3(10);
g2.deletePerson("Erfan");
cout << g1<<endl;//should cout every person in it with a \t as the separator
cout << g2 << endl;
*/
/*


g3 = g1;
cout << g3;
g3 = g2 + g3;//adds members of g2 and g3 to each other
cout << g3<<endl;
g3 += g3 += g3 += g3;
*/
/*
cout << g3;

Person persons[10];
Person Erfan("Erfan",20);
persons[1]=Erfan;
for(int i=0;i<10;i++){
persons[i].getName()=to_string(rand()%100);
persons[i].getname()=to_string(rand()%100);
}

sort(persons,persons+10);//what operator should be overloaded for sort? :)

cout << endl;
for(int i=0;i<10;i++){
cout<<persons[i].getName()<<' ';
}*/
/*
cout<<*find(persons,persons+10,Erfan);
*/
cout << persons[i].getname() << ' ';
}









cout << endl << find(persons, persons + 10, Erfan);
}

38 changes: 38 additions & 0 deletions 2/Score.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "Score.h"

int Score::ID_generator = 0;

Score::Score(int score,char* detail, Label label) :ID(Score::ID_generator) {
this->score = score;
this->label = label;
Expand All @@ -8,5 +10,41 @@ Score::Score(int score,char* detail, Label label) :ID(Score::ID_generator) {
ID_generator++;

}
Score::Score(int score, const char* _detail, Label label) :ID(Score::ID_generator),detail(_detail) {
this->score = score;
this->label = label;

ID_generator++;
}
Score::Score(int score, string detail, Label label) :ID(Score::ID_generator) {
this->score = score;
this->label = label;
this->detail = detail;

ID_generator++;

}
Score::Score() :ID(Score::ID_generator) {
this->score = 0;
this->detail = "";
ID_generator++;
}

void Score::setID_generator(int num) { ID_generator = num; }

Score& Score::operator=(const Score& S)
{
this->score = S.score;
this->detail = S.detail;
this->label = S.label;

return *this;
}

void print(const Score& score)
{
cout << endl << "ID -> " << score.ID << endl;
cout << "Score -> " << score.score << endl;
cout << "Lable -> " << score.label << endl;
cout << "Detail -> " << score.detail << endl;
}
13 changes: 13 additions & 0 deletions 2/Score.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
#pragma once
#include <iostream>
#include <string>

using namespace std;

class Score {
public:

friend int main();
friend void print(const Score& score);

typedef enum {
Expand All @@ -12,7 +17,15 @@ class Score {
BAD,
}Label;

Score();
Score(int score, char* detail, Label label);
Score(int score, string detail, Label label);
Score(int score, const char* _detail, Label label);

Score& operator=(const Score& S);

static void setID_generator(int num);

private:
int score;
Label label;
Expand Down
2 changes: 2 additions & 0 deletions 2/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
#include <algorithm>
#include "Score.h"
#include "SomeRandomDotHFile.h"

using namespace std;

#define FOR(n) for(int i=0;i<n;i++)
#define SETSCORE(i) int score=rand()%20+1;/*no 0s*/\
scores[i] = Score( score,("some string " + to_string(i)).c_str(),Score::Label(3-score/5)) ;
Expand Down