Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <stdexcept>
- #include <cstring>
- #include <string>
- #include <algorithm>
- #include "TestCurenja.h"
- using namespace std;
- class Lik
- {
- protected:
- string naziv;
- public:
- Lik (string ime): naziv(ime) {}
- virtual ~Lik () {}
- virtual void IspisiAtribute() const =0;
- virtual double DajObim () const =0;
- virtual double DajPovrsinu () const =0;
- };
- class Krug : public Lik
- {
- double radijus;
- const double PI=4*atan(1);
- public:
- Krug(double r) : Lik("Krug"), radijus(r)
- {
- if (r<=0) throw "Poluprecnik mora biti pozitivan.";
- }
- double DajObim () const
- {
- return 2*radijus*PI;
- }
- double DajPovrsinu() const
- {
- return radijus*radijus*PI;
- }
- void IspisiAtribute() const
- {
- cout<<naziv<<" : "<<"povrsina: "<<DajPovrsinu()<<" , obim: "<<DajObim()<<endl;
- }
- };
- class Pravougaonik : public Lik
- {
- double a,b;
- public:
- Pravougaonik (double a, double b) : Lik("Pravougaonik"), a(a), b(b)
- {
- if (a<=0 || b<=0) throw "Duzine stranica pravougaonika moraju biti pozitivne! ";
- }
- double DajObim() const
- {
- return 2*(a+b);
- }
- double DajPovrsinu() const
- {
- return a*b;
- }
- void IspisiAtribute() const
- {
- cout<<naziv<<" : "<<"povrsina: "<<DajPovrsinu()<<" , obim: "<<DajObim()<<endl;
- }
- };
- class Trougao : public Lik
- {
- double a,b, c;
- public:
- Trougao( double a, double b, double c) : Lik("Trougao"), a(a), b(b), c(c)
- {
- if (a<=0 || b<=0 || c<=0) throw "Duzine stranica trougla moraju biti pozitivne! ";
- }
- double DajObim() const
- {
- return a+b+c;
- }
- double DajPovrsinu() const
- {
- double s((a+b+c)/2);
- return sqrt(s*(s-a)*(s-b)*(s-c));
- }
- void IspisiAtribute() const
- {
- cout<<naziv<<" : "<<"povrsina: "<<DajPovrsinu()<<" , obim: "<<DajObim()<<endl;
- }
- };
- int main ()
- {
- int n;
- cout<<"Unesite broj likova: ";
- cin>>n;
- cin.clear();
- cin.ignore(1000, '\n');
- try
- { Lik **likovi=new Lik*[n];
- fill (likovi, likovi+n, nullptr);
- int i=0;
- while (i<n) {
- char temp;
- switch (temp=cin.get()) {
- case 'P': { double a,b;
- cin>>a;
- if (cin.get()!=',') { cout<<"Nepravilan unos!";
- break;
- }
- cin>>b;
- if (!cin) {
- cout<<"Nepravilan unos!";
- break;
- }
- if(cin.get() != '\n') cout<<"Nepravilan unos!";
- likovi[i]=new Pravougaonik(a,b);
- i++;
- break; }
- case 'K': {
- double r;
- cin>>r;
- if (!cin) { cout<<"Nepravilan unos."; break;}
- if(cin.get() != '\n') cout<<"Nepravilan unos!";
- likovi[i]=new Krug(r);
- i++;
- break;
- }
- case 'T': {
- double a,b,c;
- cin>>a; if(cin.get()!=',') {
- cout<<"Nepravilan unos!";
- break;
- }
- cin>>b; if(cin.get()!=',') {
- cout<<"Nepravilan unos!";
- break;
- }
- cin>>c; if(!cin) {
- cout<<"Nepravilan unos!";
- break;
- }
- if(cin.get() != '\n') cout<<"Nepravilan unos!";
- likovi[i]=new Trougao(a,b,c);
- i++;
- break;
- }
- default: cout<<"Greska, unesite ponovo: ";
- }
- }
- for (int i=0; i<n; i++)
- likovi[i]->IspisiAtribute();
- for (int i=0; i<n; i++) delete likovi[i];
- delete [] likovi;
- }
- catch (const char por[]) {
- cout<<por;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement