#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
#include <cstring>
using namespace std;
class Figura
{
public:
virtual double pole()=0;
virtual double obwod()=0;
};
class Czworokat: public Figura
{
public:
virtual double pole()=0;
virtual double obwod()=0;
};
class Pieciokat: public Figura
{
public:
double a;
Pieciokat(double bok)
{
a=bok;
}
double pole()
{
return 0.25*a*a*sqrt(25+10*sqrt(5));
}
double obwod()
{
return 5*a;
}
~Pieciokat();
};
class Szesciokat: public Figura
{
public:
double a;
Szesciokat(double bok)
{
a=bok;
}
double pole()
{
return 1.5*a*a*sqrt(3);
}
double obwod()
{
return 6*a;
}
~Szesciokat();
};
class Kolo: public Figura
{
public:
double r;
Kolo(double promien)
{
r=promien;
}
double pole()
{
return M_PI*r*r;
}
double obwod()
{
return 2*M_PI*r;
}
~Kolo();
};
class Kwadrat: public Czworokat
{
public:
double a;
Kwadrat(double bok)
{
a=bok;
}
double pole()
{
return a*a;
}
double obwod()
{
return 4*a;
}
~Kwadrat();
};
class Romb: public Czworokat
{
public:
double a;
double k;
Romb(double bok,double kat)
{
a=bok;
k=kat*M_PI/180;
}
double pole()
{
return a*a*sin(k);
}
double obwod()
{
return 4*a;
}
~Romb();
};
class Prostokat: public Czworokat
{
public:
double a;
double b;
Prostokat(double bok1, double bok2)
{
a=bok1;
b=bok2;
}
double pole()
{
return a*b;
}
double obwod()
{
return 2*(a+b);
}
~Prostokat();
};
class Error: public Figura
{
double pole()
{
return -1;
}
double obwod()
{
return -1;
}
};
class Sprawdzenie
{
public:
void spr(char *wejscie, int dlugosc)
{
int dl=2;
for(int i=0;i<strlen(wejscie);i++)
{
if(wejscie[i]=='o'||wejscie[i]=='p'||wejscie[i]=='s')
dl+=1;
else if(wejscie[i]=='c')
dl+=5;
else
throw ("niepoprawny format argumentu");
}
if(dl!=dlugosc)
throw ("Podano za malo argumentow");
}
};
int main(int argc, char *argv[])
{
double *liczby=new double[argc];
Figura *f[strlen(argv[1])];
if (argc==1)
{
cout<<"Nie podano argumentow"<<endl;
exit(-1);
}
try
{
char *tablica=argv[1];
Sprawdzenie s;
s.spr(tablica, argc);
for(int i=2; i<argc; i++)
{
liczby[i]=stod(argv[i]);
}
int i=2;
while(i<argc)
{
for(int j=0; j<argc;j++)
{
if(tablica[j]=='o')
{
Figura *k=new Kolo(liczby[i]);
f[j]=k;
i+=1;
}
if(tablica[j]=='p')
{
Figura *p=new Pieciokat(liczby[i]);
f[j]=p;
i+=1;
}
if(tablica[j]=='s')
{
Figura *s=new Szesciokat(liczby[i]);
f[j]=s;
i+=1;
}
if(tablica[j]=='c')
{
if(liczby[i]==liczby[i+1] && liczby[i+2]==liczby[i+3] && liczby[i+1]==liczby[i+2])
{
if(liczby[i+4]==90)
{
Figura *kw=new Kwadrat(liczby[i]);
f[j]=kw;
i+=5;
}
else if(liczby[i+4]>0 && liczby[i+4]<180)
{
Figura *r=new Romb(liczby[i],liczby[i+4]);
f[j]=r;
i+=5;
}
else
{
f[j]=e;
i+=5;
}
}
else if(liczby[i]==liczby[i+1]&&liczby[i+2]==liczby[i+3]&&liczby[i+4]==90)
{
Figura *p=new Prostokat(liczby[i],liczby[i+2]);
f[j]=p;
i+=5;
}
else if(liczby[i]==liczby[i+2]&&liczby[i+1]==liczby[i+3]&&liczby[i+4]==90)
{
Figura *p=new Prostokat(liczby[i],liczby[i+1]);
f[j]=p;
i+=5;
}
else if(liczby[i]==liczby[i+3]&&liczby[i+1]==liczby[i+2]&&liczby[i+4]==90)
{
Figura *p=new Prostokat(liczby[i],liczby[i+1]);
f[j]=p;
i+=5;
}
else
{
f[j]=e;
i+=5;
}
}
}
}
}
catch(const char* ex1)
{
cout<<ex1<<endl;
}
catch(exception& ex2)
{
cout<<"Argumenty musza byc liczbami rzeczywistymi"<<endl;
}
try
{
for(int i=0; i<strlen(argv[1]);i++)
{
if(f[i]->pole()==-1)
cout<<"Niepoprawny czworokat!"<<endl;
else
cout<<"Pole: "<<f[i]->pole()<<" Obwod: "<<f[i]->obwod()<<endl;
}
}
catch(exception& ex2)
{
exit(-1);
}
return 0;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}