Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Number {
- public:
- virtual double doubleValue()=0;
- virtual int intValue()=0;
- virtual void print()=0;
- };
- class Integer :public Number {
- int n ;
- public:
- Integer(int n ) {
- this->n=n;
- }
- Integer (const Integer &i) {
- this->n=i.n;
- }
- int intValue() {
- return n ;
- }
- double doubleValue() {
- return (double) n ;
- }
- void print() {
- cout<<"Integer: "<<n<<endl;
- }
- };
- class Double : public Number {
- private:
- double s;
- public:
- Double(double s) {
- this->s=s;
- }
- Double (const Double &d) {
- this->s=d.s;
- }
- double doubleValue() {
- return s;
- }
- int intValue() {
- return (int) s;
- }
- void print() {
- cout<<"Double: "<<s<<endl;
- }
- };
- class Numbers {
- private:
- Number **number;
- int n ;
- void copy(const Numbers &s) {
- this->n=s.n;
- this->number=new Number*[s.n+1];
- for (int i = 0; i < this->n ; i ++) {
- number[i]=s.number[i];
- }
- }
- public:
- Numbers() {
- n=0;
- this->number=new Number*[0];
- }
- Numbers(const Numbers &n) {
- copy(n);
- }
- Numbers &operator=(const Numbers &n ) {
- if(this!=&n) {
- delete[] number;
- copy(n);
- }
- return *this;
- }
- ~Numbers() {
- delete[]number;
- }
- Numbers &operator += (Number*numb) {
- Number**tmp= new Number*[this->n+1];
- for(int i = 0 ; i < n ; i ++) {
- tmp[i]=number[i];
- }
- tmp[n]=numb;
- n++;
- delete[] number;
- number=tmp;
- return *this;
- }
- void statistics() {
- int sumi= 0, counti=0 ,countd=0;
- double sum=0, sumd=0.0;
- for(int i =0 ; i < n ; i ++) {
- Integer *in=dynamic_cast<Integer*>(number[i]);
- {
- if(in!=0) {
- counti++;
- sumi+=number[i]->intValue();
- }
- }
- Double*d=dynamic_cast<Double*>(number[i]);
- if(d!=0) {
- countd++;
- sumd+=number[i]->doubleValue();
- }
- sum+=number[i]->doubleValue();
- }
- cout<<"Count of numbers: "<<n<<endl;
- cout<<"Sum of all numbers: "<<sum<<endl;
- cout<<"Count of integer numbers: "<<counti<<endl;
- cout<<"Sum of integer numbers: "<<sumi<<endl;
- cout<<"Count of double numbers: "<<countd<<endl;
- cout<<"Sum of double numbers: "<<sumd<<endl;
- }
- void integersLessThan (Integer N) {
- bool flag= true;
- for(int i = 0 ; i <n ; i++) {
- Integer*in=dynamic_cast<Integer*>(number[i]);
- if (in!=0&&number[i]->intValue()<N.intValue()) {
- number[i]->print();
- flag=false;
- }
- }
- if (flag)
- cout<<"None"<<endl;
- }
- void doublesBiggerThan (Double N) {
- bool flag=true;
- for(int i = 0 ; i <n ; i++) {
- Double*d=dynamic_cast<Double*>(number[i]);
- if (d!=0&&number[i]->doubleValue()>N.doubleValue()) {
- number[i]->print();
- flag=false;
- }
- }
- 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;
- // cout<<type<<" "<<number<<endl;
- 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