Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- class Number {
- public:
- //TODO da se deklariraat trite cisto virtuelni metodi
- virtual double doubleValue() = 0;
- virtual int intValue() = 0;
- virtual void print() = 0;
- bool operator==(Number& n)
- {
- return (this->doubleValue() == n.doubleValue());
- }
- };
- //ТODO preoptovaruvanje na operatorot ==
- class Integer : public Number{ //TODO da se dodadi izraz za nasleduvanje od Number
- private:
- //TODO da se deklariraat promenlivite
- int broj;
- public:
- //TODO konstruktor so eden argument
- Integer(int broj)
- {
- this->broj = broj;
- }
- //TODO da se prepokrijat metodite od klasata Number
- int intValue()
- {
- return broj;
- }
- double doubleValue()
- {
- return double(broj);
- }
- void print()
- {
- cout << broj;
- }
- };
- class Double : public Number{ //TODO da se dodadi izraz za nasleduvanje od Number
- private:
- //TODO da se deklariraat promenlivite
- double broj;
- public:
- //TODO konstruktor so eden argument
- Double(double broj)
- {
- this->broj = broj;
- }
- //TODO da se prepokrijat metodite od klasata Number
- int intValue()
- {
- return int(broj);
- }
- double doubleValue()
- {
- return broj;
- }
- void print()
- {
- cout << broj;
- }
- };
- class Numbers{
- private:
- //TODO deklariranje na promenlivite
- Number** niza;
- int brElem;
- public:
- //TODO default konstruktor
- Numbers()
- {
- niza = new Number*[0];
- brElem = 0;
- }
- //TODO copy konstruktor
- Numbers(const Numbers& n)
- {
- brElem = n.brElem;
- niza = new Number*[brElem];
- for (int i = 0; i < n.brElem; i++)
- {
- niza[i] = n.niza[i];
- }
- }
- //TODO operator =
- Numbers& operator=(const Numbers& n)
- {
- brElem = n.brElem;
- niza = new Number*[brElem];
- for (int i = 0; i < n.brElem; i++)
- {
- niza[i] = n.niza[i];
- }
- return *this;
- }
- //TODO destruktor
- ~Numbers()
- {
- delete[] niza;
- }
- //TODO operator += (operatorot da prima pointer od objekt od Number, a ne referenca)
- Numbers& operator+=(Number* n)
- {
- bool add = true;
- for (int i = 0; i < brElem; i++)
- {
- if (*niza[i] == *n)
- {
- add = false;
- }
- }
- if (add)
- {
- Number** nova = new Number*[brElem + 1];
- for (int i = 0; i < brElem; i++)
- {
- nova[i] = niza[i];
- }
- if (add)
- {
- nova[brElem] = n;
- brElem++;
- }
- delete[] niza;
- niza = nova;
- }
- return *this;
- }
- //TODO void statistics()
- void statistics()
- {
- cout << "Count of numbers: " << brElem << endl;
- double allSum = 0;
- for (int i = 0; i < brElem; i++)
- {
- allSum += niza[i]->doubleValue();
- }
- cout << "Sum of all numbers: " << allSum << endl;
- int countIntegers = 0;
- int intSum = 0;
- for (int i = 0; i < brElem; i++)
- {
- if (dynamic_cast<Integer*>(niza[i]))
- {
- countIntegers++;
- intSum += niza[i]->intValue();
- }
- }
- cout << "Count of integer numbers: " << countIntegers << endl;
- cout << "Sum of integer numbers: " << intSum << endl;
- int countDoubles = 0;
- double doubleSum = 0;
- for (int i = 0; i < brElem; i++)
- {
- if (dynamic_cast<Double*>(niza[i]))
- {
- countDoubles++;
- doubleSum += niza[i]->doubleValue();
- }
- }
- cout <<"Count of double numbers: " << countDoubles << endl;
- cout <<"Sum of double numbers: " << doubleSum << endl;
- }
- //TODO void integersLessThan (Integer n)
- void integersLessThan(Integer n)
- {
- bool none = true;
- for (int i = 0; i < brElem; i++)
- {
- if (dynamic_cast<Integer*>(niza[i]))
- {
- if (niza[i]->intValue() < n.intValue())
- {
- none = false;
- cout << "Integer: " << niza[i]->intValue() << endl;
- }
- }
- }
- if (none) cout << "None" << endl;
- }
- //TODO void doublesBiggerThan (Double n)
- void doublesBiggerThan(Double n)
- {
- bool none = true;
- for (int i = 0; i < brElem; i++)
- {
- if (dynamic_cast<Double*>(niza[i]))
- {
- if (niza[i]->doubleValue() > n.doubleValue())
- {
- none = false;
- cout << "Double: " << niza[i]->doubleValue() << endl;
- }
- }
- }
- if (none) cout << "None" << endl;
- }
- };
- int main() {
- int n;
- cin>>n;
- Numbers numbers;
- for (int i=0;i<n;i++){
- int type;
- double number;
- cin>>type>>number;
- if (type==0){//Integer object
- Integer * integer = new Integer((int) number);
- numbers+=integer;
- }
- else {
- Double * doublee = new Double(number);
- numbers+=doublee;
- }
- }
- int lessThan;
- double biggerThan;
- cin>>lessThan;
- cin>>biggerThan;
- cout<<"STATISTICS FOR THE NUMBERS\n";
- numbers.statistics();
- cout<<"INTEGER NUMBERS LESS THAN "<<lessThan<<endl;
- numbers.integersLessThan(Integer(lessThan));
- cout<<"DOUBLE NUMBERS BIGGER THAN "<<biggerThan<<endl;
- numbers.doublesBiggerThan(Double(biggerThan));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement