Facebook
From Arkadiusz Dębski, 6 Years ago, written in Java.
Embed
Download Paste or View Raw
Hits: 486
  1. #include <iostream>
  2. #define _USE_MATH_DEFINES
  3. #include <cmath>
  4. #include <cstring>
  5. using namespace std;
  6. class Figura
  7. {
  8. public:
  9.     virtual double pole()=0;
  10.     virtual double obwod()=0;
  11. };
  12. class Czworokat: public Figura
  13. {
  14. public:
  15.     virtual double pole()=0;
  16.     virtual double obwod()=0;
  17. };
  18. class Pieciokat: public Figura
  19. {
  20. public:
  21.     double a;
  22.     Pieciokat(double bok)
  23.     {
  24.         a=bok;
  25.     }
  26.     double pole()
  27.     {
  28.         return 0.25*a*a*sqrt(25+10*sqrt(5));
  29.     }
  30.     double obwod()
  31.     {
  32.         return 5*a;
  33.     }
  34.     ~Pieciokat();
  35. };
  36. class Szesciokat: public Figura
  37. {
  38. public:
  39.     double a;
  40.     Szesciokat(double bok)
  41.     {
  42.         a=bok;
  43.     }
  44.     double pole()
  45.     {
  46.         return 1.5*a*a*sqrt(3);
  47.     }
  48.     double obwod()
  49.     {
  50.         return 6*a;
  51.     }
  52.     ~Szesciokat();
  53. };
  54. class Kolo: public Figura
  55. {
  56. public:
  57.     double r;
  58.     Kolo(double promien)
  59.     {
  60.         r=promien;
  61.     }
  62.     double pole()
  63.     {
  64.         return M_PI*r*r;
  65.     }
  66.     double obwod()
  67.     {
  68.         return 2*M_PI*r;
  69.     }
  70.     ~Kolo();
  71. };
  72. class Kwadrat: public Czworokat
  73. {
  74. public:
  75.     double a;
  76.     Kwadrat(double bok)
  77.     {
  78.         a=bok;
  79.     }
  80.     double pole()
  81.     {
  82.         return a*a;
  83.     }
  84.     double obwod()
  85.     {
  86.         return 4*a;
  87.     }
  88.     ~Kwadrat();
  89. };
  90. class Romb: public Czworokat
  91. {
  92. public:
  93.     double a;
  94.     double k;
  95.     Romb(double bok,double kat)
  96.     {
  97.         a=bok;
  98.         k=kat*M_PI/180;
  99.     }
  100.     double pole()
  101.     {
  102.         return a*a*sin(k);
  103.     }
  104.     double obwod()
  105.     {
  106.         return 4*a;
  107.     }
  108.     ~Romb();
  109. };
  110. class Prostokat: public Czworokat
  111. {
  112. public:
  113.     double a;
  114.     double b;
  115.     Prostokat(double bok1, double bok2)
  116.     {
  117.         a=bok1;
  118.         b=bok2;
  119.     }
  120.     double pole()
  121.     {
  122.         return a*b;
  123.     }
  124.     double obwod()
  125.     {
  126.         return 2*(a+b);
  127.     }
  128.     ~Prostokat();
  129. };
  130. class Error: public Figura
  131. {
  132.     double pole()
  133.     {
  134.         return -1;
  135.     }
  136.     double obwod()
  137.     {
  138.         return -1;
  139.     }
  140. };
  141. class Sprawdzenie
  142. {
  143. public:
  144.     void spr(char *wejscie, int dlugosc)
  145.     {
  146.         int dl=2;
  147.         for(int i=0;i<strlen(wejscie);i++)
  148.         {
  149.             if(wejscie[i]=='o'||wejscie[i]=='p'||wejscie[i]=='s')
  150.                 dl+=1;
  151.             else if(wejscie[i]=='c')
  152.                 dl+=5;
  153.             else
  154.                 throw ("niepoprawny format argumentu");
  155.         }
  156.         if(dl!=dlugosc)
  157.             throw ("Podano za malo argumentow");
  158.     }
  159. };
  160. int main(int argc, char *argv[])
  161. {
  162.     double *liczby=new double[argc];
  163.     Figura *f[strlen(argv[1])];
  164.     if (argc==1)
  165.     {
  166.         cout<<"Nie podano argumentow"<<endl;
  167.         exit(-1);
  168.     }
  169.     try
  170.     {
  171.         char *tablica=argv[1];
  172.         Sprawdzenie s;
  173.         s.spr(tablica, argc);
  174.         for(int i=2; i<argc; i++)
  175.         {
  176.             liczby[i]=stod(argv[i]);
  177.         }
  178.         int i=2;
  179.         while(i<argc)
  180.         {
  181.             for(int j=0; j<argc;j++)
  182.                         {
  183.                 if(tablica[j]=='o')
  184.                                 {
  185.                                         Figura *k=new Kolo(liczby[i]);
  186.                                         f[j]=k;
  187.                                         i+=1;
  188.                                 }
  189.                                 if(tablica[j]=='p')
  190.                                 {
  191.                                         Figura *p=new Pieciokat(liczby[i]);
  192.                                         f[j]=p;
  193.                                         i+=1;
  194.                                 }
  195.                                 if(tablica[j]=='s')
  196.                                 {
  197.                                         Figura *s=new Szesciokat(liczby[i]);
  198.                                         f[j]=s;
  199.                                         i+=1;
  200.                                 }
  201.                                 if(tablica[j]=='c')
  202.                                 {
  203.                                         if(liczby[i]==liczby[i+1] && liczby[i+2]==liczby[i+3] && liczby[i+1]==liczby[i+2])
  204.                                         {
  205.                                                 if(liczby[i+4]==90)
  206.                                                 {
  207.                                                         Figura *kw=new Kwadrat(liczby[i]);
  208.                                                         f[j]=kw;
  209.                                                         i+=5;
  210.                                                 }
  211.                                                 else if(liczby[i+4]>0 && liczby[i+4]<180)
  212.                                                 {
  213.                                                         Figura *r=new Romb(liczby[i],liczby[i+4]);
  214.                                                         f[j]=r;
  215.                                                         i+=5;
  216.                                                 }
  217.                                                 else
  218.                                                 {
  219.                                                         Figura *e=new Error();
  220.                                                         f[j]=e;
  221.                                                         i+=5;
  222.                                                 }
  223.                                         }
  224.                                         else if(liczby[i]==liczby[i+1]&&liczby[i+2]==liczby[i+3]&&liczby[i+4]==90)
  225.                                         {
  226.                                                 Figura *p=new Prostokat(liczby[i],liczby[i+2]);
  227.                                                 f[j]=p;
  228.                                                 i+=5;
  229.                                         }
  230.                                         else if(liczby[i]==liczby[i+2]&&liczby[i+1]==liczby[i+3]&&liczby[i+4]==90)
  231.                                         {
  232.                                                 Figura *p=new Prostokat(liczby[i],liczby[i+1]);
  233.                                                 f[j]=p;
  234.                                                 i+=5;
  235.                                         }
  236.                                         else if(liczby[i]==liczby[i+3]&&liczby[i+1]==liczby[i+2]&&liczby[i+4]==90)
  237.                                         {
  238.                                                 Figura *p=new Prostokat(liczby[i],liczby[i+1]);
  239.                                                 f[j]=p;
  240.                                                 i+=5;
  241.                                         }
  242.                                         else
  243.                                         {
  244.                                                 Figura *e=new Error();
  245.                                                 f[j]=e;
  246.                                                 i+=5;
  247.                     }
  248.                 }
  249.             }
  250.         }
  251.     }
  252.     catch(const char* ex1)
  253.     {
  254.         cout<<ex1<<endl;
  255.     }
  256.     catch(exception& ex2)
  257.     {
  258.         cout<<"Argumenty musza byc liczbami rzeczywistymi"<<endl;
  259.     }
  260.     try
  261.     {
  262.         for(int i=0; i<strlen(argv[1]);i++)
  263.         {
  264.             if(f[i]->pole()==-1)
  265.                 cout<<"Niepoprawny czworokat!"<<endl;
  266.             else
  267.                 cout<<"Pole: "<<f[i]->pole()<<" Obwod: "<<f[i]->obwod()<<endl;
  268.         }
  269.     }
  270.     catch(exception& ex2)
  271.     {
  272.         exit(-1);
  273.     }
  274.     return 0;
  275. }
  276.