Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <string>
- #include <sstream>
- #include <typeinfo>
- #define DIM 50
- using namespace std;
- class A{
- private:
- int *arr;
- short len;
- public:
- A(short m, int a, int b){
- arr=new int[m];
- for(short i=0; i<m; i++)
- arr[i]=rand()%(b-a+1)+a;
- len=m;
- }
- virtual double func(short i)=0;
- short getLen(){return this->len;}
- virtual ostream &put(ostream &s){
- stringstream ss;
- ss<<", arr=[ ";
- for(short i=0; i<getLen(); i++)
- ss<<get(i)<<" ";
- ss<<"]";
- return s<<ss.str();
- }
- int &operator[](short i){return arr[i%getLen()];}
- protected:
- double get(short i){return arr[i%getLen()];}
- };
- class B: public A{
- private:
- double p;
- public:
- B(short m, int y, int z, double x): A(m,y,z), p(x){}
- double func(short i){
- int min=get(0), max=get(0);
- for(short i=1; i<getLen(); i++){
- if(get(i)<min)
- min=get(i);
- if(get(i)>max)
- max=get(i);
- }
- return (double)min/max+p;
- }
- ostream &put(ostream &s){
- A::put(s);
- return s<<", p="<<p;
- }
- };
- class C: public A{
- private:
- char t;
- public:
- C(short n, char c, int a, int b): A(n,a,b), t(c){}
- double func(short i){
- double avg=0;
- for(short i=0; i<getLen(); i++)
- avg+=get(i);
- return avg/getLen();
- }
- string g(char c, short k){
- stringstream ss;
- for(short i=0; i<k; i++)
- ss<<t<<c;
- return ss.str();
- }
- ostream &put(ostream &s){
- A::put(s);
- return s<<", t="<<t;
- }
- };
- ostream &operator<<(ostream &s, A &a){
- if(typeid(a)==typeid(B))
- s<<"1B";
- else if(typeid(a)==typeid(C))
- s<<"1C";
- return a.put(s);
- }
- int main()
- {
- srand(111222333);
- A *vett[DIM];
- for(int i=0; i<DIM; i++){
- short n=1+rand()%10;
- if(rand()%2==0)
- vett[i]= new B(n, rand()%5+1, rand()%11+10, (double) rand()/(RAND_MAX));
- else
- vett[i]= new C(n, (char) (rand()%('z' - 'a' + 1) + 'a'), rand()%5+1, rand()%11+10);
- }
- cout<<"PUNTO 1:"<<endl;
- for(int i=0; i<DIM; i++)
- cout<<i<<")"<<*vett[i]<<", func(3)="<<vett[i]->func(3)<<endl;
- cout<<endl<<"PUNTO 2:"<<endl;
- short counter=0;
- double avg=0;
- C *ptr;
- for(int i=0; i<DIM; i++){
- avg+=vett[i]->func(3);
- if(counter<3)
- if((ptr=dynamic_cast<C*>(vett[i]))!=NULL){
- cout<<"i="<<i<<" g('h',2)="<<ptr->g('h',2)<<endl;
- counter++;
- }
- }
- cout<<"AVG="<<avg/DIM;
- cout<<endl<<"PUNTO 3:"<<endl;
- cout<<*vett[0]<<endl;
- (*vett[0])[3]=5;
- cout<<*vett[0]<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement