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;
- virtual ~Number() {}
- };
- class Integer : public Number { //TODO da se dodadi izraz za nasleduvanje od Number
- private:
- //TODO da se deklariraat promenlivite
- int num;
- public:
- //TODO konstruktor so eden argument
- Integer(int n) {num=n;}
- //TODO da se prepokrijat metodite od klasata Number
- double doubleValue() {return num;}
- int intValue() {return num;}
- void print() {
- cout <<"Integer: "<<num<<endl;
- }
- };
- class Double : public Number { //TODO da se dodadi izraz za nasleduvanje od Number
- private:
- //TODO da se deklariraat promenlivite
- double num;
- public:
- //TODO konstruktor so eden argument
- Double(double n) {num=n;}
- //TODO da se prepokrijat metodite od klasata Number
- double doubleValue() {return num;}
- int intValue() {return num;}
- void print() {
- cout <<"Double: "<<num<<endl;
- }
- };
- class Numbers{
- private:
- //TODO deklariranje na promenlivite
- Number** nums;
- int n;
- public:
- //TODO default konstruktor
- Numbers() {nums=0;n=0;}
- //TODO copy konstruktor
- Numbers(const Numbers &N) {
- n=N.n;
- nums=N.nums;
- }
- //TODO operator =
- Numbers& operator=(const Numbers &N){
- if(this==&N) return *this;
- for (int i=0;i<n;i++)
- delete nums[i];
- delete[] nums;
- nums=N.nums;
- return *this;
- }
- //TODO destruktor
- ~Numbers() {
- }
- //TODO operator += (operatorot da prima pointer od objekt od Number, a ne referenca)
- Numbers operator+=(Number* N) {
- Number** temp=new Number*[n+1];
- for (int i=0;i<n;i++) {
- temp[i]=nums[i];
- }
- temp[n]=N;
- delete[] nums;
- nums=temp;
- n++;
- return *this;
- }
- double sum() {
- double summ=0;
- for (int i=0;i<n;i++)
- summ+=nums[i]->doubleValue();
- return summ;
- }
- int countInts() {
- int counter=0;
- for (int i=0;i<n;i++) {
- Integer* ip=dynamic_cast<Integer*>(nums[i]);
- if(ip!=0)
- counter++;
- }
- return counter;
- }
- int sumInts() {
- int sumI=0;
- for (int i=0;i<n;i++) {
- Integer* ip=dynamic_cast<Integer*>(nums[i]);
- if(ip!=0)
- sumI+=ip->intValue();
- }
- return sumI;
- }
- int countDoubles() {
- int counter=0;
- for (int i=0;i<n;i++) {
- Double* ip=dynamic_cast<Double*>(nums[i]);
- if(ip!=0)
- counter++;
- }
- return counter;
- }
- double sumDoubles() {
- double sumI=0;
- for (int i=0;i<n;i++) {
- Double* ip=dynamic_cast<Double*>(nums[i]);
- if(ip!=0)
- sumI+=ip->doubleValue();
- }
- return sumI;
- }
- //TODO void statistics()
- void statistics() {
- cout <<"Count of numbers: "<<n<<endl;
- cout <<"Sum of all numbers: "<<sum()<<endl;
- cout <<"Count of integer numbers: "<<countInts()<<endl;
- cout <<"Sum of integer numbers: "<<sumInts()<<endl;
- cout <<"Count of double numbers: "<<countDoubles()<<endl;
- cout <<"Sum of double numbers: "<<sumDoubles()<<endl;
- }
- //TODO void integersLessThan (Integer n)
- void integersLessThan (Integer N) {
- bool flag=1;
- for (int i=0;i<n;i++) {
- if (nums[i]->intValue()<N.intValue()&&dynamic_cast<Integer*>(nums[i])!=0) {
- nums[i]->print();
- flag=0;
- }
- }
- if(flag) cout<<"None"<<endl;
- }
- //TODO void doublesBiggerThan (Double n)
- void doublesBiggerThan (Double D) {
- bool flag=1;
- for (int i=0;i<n;i++) {
- if (nums[i]->doubleValue()>D.doubleValue()&&dynamic_cast<Double*>(nums[i])!=0){
- nums[i]->print();
- flag=0;
- }
- }
- if(flag) 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