Advertisement
Guest User

Lab 3_7_A

a guest
Feb 24th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. #include <sstream>
  5. #include <typeinfo>
  6. #define DIM 50
  7. using namespace std;
  8.  
  9. class A{
  10. private:
  11.     int *arr;
  12.     short len;
  13. public:
  14.     A(short m, int a, int b){
  15.         arr=new int[m];
  16.         for(short i=0; i<m; i++)
  17.             arr[i]=rand()%(b-a+1)+a;
  18.         len=m;
  19.     }
  20.  
  21.     virtual double func(short i)=0;
  22.  
  23.     short getLen(){return this->len;}
  24.  
  25.     virtual ostream &put(ostream &s){
  26.         stringstream ss;
  27.         ss<<", arr=[ ";
  28.         for(short i=0; i<getLen(); i++)
  29.             ss<<get(i)<<" ";
  30.         ss<<"]";
  31.         return s<<ss.str();
  32.     }
  33.  
  34.     int &operator[](short i){return arr[i%getLen()];}
  35. protected:
  36.     double get(short i){return arr[i%getLen()];}
  37. };
  38.  
  39. class B: public A{
  40. private:
  41.     double p;
  42. public:
  43.     B(short m, int y, int z, double x): A(m,y,z), p(x){}
  44.  
  45.     double func(short i){
  46.         int min=get(0), max=get(0);
  47.         for(short i=1; i<getLen(); i++){
  48.             if(get(i)<min)
  49.                 min=get(i);
  50.             if(get(i)>max)
  51.                 max=get(i);
  52.         }
  53.         return (double)min/max+p;
  54.     }
  55.  
  56.     ostream &put(ostream &s){
  57.         A::put(s);
  58.         return s<<", p="<<p;
  59.     }
  60. };
  61.  
  62. class C: public A{
  63. private:
  64.     char t;
  65. public:
  66.     C(short n, char c, int a, int b): A(n,a,b), t(c){}
  67.  
  68.     double func(short i){
  69.         double avg=0;
  70.         for(short i=0; i<getLen(); i++)
  71.             avg+=get(i);
  72.         return avg/getLen();
  73.     }
  74.  
  75.     string g(char c, short k){
  76.         stringstream ss;
  77.         for(short i=0; i<k; i++)
  78.             ss<<t<<c;
  79.         return ss.str();
  80.     }
  81.  
  82.     ostream &put(ostream &s){
  83.         A::put(s);
  84.         return s<<", t="<<t;
  85.     }
  86. };
  87.  
  88. ostream &operator<<(ostream &s, A &a){
  89.     if(typeid(a)==typeid(B))
  90.         s<<"1B";
  91.     else if(typeid(a)==typeid(C))
  92.         s<<"1C";
  93.     return a.put(s);
  94. }
  95.  
  96. int main()
  97. {
  98.     srand(111222333);
  99.     A *vett[DIM];
  100.     for(int i=0; i<DIM; i++){
  101.         short n=1+rand()%10;
  102.         if(rand()%2==0)
  103.             vett[i]= new B(n, rand()%5+1, rand()%11+10, (double) rand()/(RAND_MAX));
  104.         else
  105.             vett[i]= new C(n, (char) (rand()%('z' - 'a' + 1) + 'a'), rand()%5+1, rand()%11+10);
  106.     }
  107.  
  108.     cout<<"PUNTO 1:"<<endl;
  109.     for(int i=0; i<DIM; i++)
  110.         cout<<i<<")"<<*vett[i]<<", func(3)="<<vett[i]->func(3)<<endl;
  111.  
  112.     cout<<endl<<"PUNTO 2:"<<endl;
  113.     short counter=0;
  114.     double avg=0;
  115.     C *ptr;
  116.     for(int i=0; i<DIM; i++){
  117.         avg+=vett[i]->func(3);
  118.         if(counter<3)
  119.             if((ptr=dynamic_cast<C*>(vett[i]))!=NULL){
  120.                 cout<<"i="<<i<<"  g('h',2)="<<ptr->g('h',2)<<endl;
  121.                 counter++;
  122.             }
  123.     }
  124.     cout<<"AVG="<<avg/DIM;
  125.  
  126.     cout<<endl<<"PUNTO 3:"<<endl;
  127.     cout<<*vett[0]<<endl;
  128.     (*vett[0])[3]=5;
  129.     cout<<*vett[0]<<endl;
  130.     return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement