Advertisement
sellmmaahh

tut13-zad1

Aug 3rd, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <stdexcept>
  4. #include <cstring>
  5. #include <string>
  6. #include <algorithm>
  7. #include "TestCurenja.h"
  8.  
  9.  
  10. using namespace std;
  11.  
  12. class Lik
  13. {
  14. protected:
  15.     string naziv;
  16. public:
  17.     Lik (string ime): naziv(ime) {}
  18.     virtual ~Lik () {}
  19.     virtual void  IspisiAtribute() const =0;
  20.     virtual double DajObim () const =0;
  21.     virtual double DajPovrsinu () const =0;
  22.  
  23. };
  24. class Krug : public Lik
  25. {
  26.     double radijus;
  27.     const double PI=4*atan(1);
  28. public:
  29.     Krug(double r) : Lik("Krug"), radijus(r)
  30.     {
  31.         if (r<=0) throw "Poluprecnik mora biti pozitivan.";
  32.     }
  33.  
  34.     double DajObim () const
  35.     {
  36.         return 2*radijus*PI;
  37.     }
  38.  
  39.     double DajPovrsinu() const
  40.     {
  41.         return radijus*radijus*PI;
  42.     }
  43.  
  44.  
  45.     void IspisiAtribute() const
  46.     {
  47.         cout<<naziv<<" : "<<"povrsina: "<<DajPovrsinu()<<" , obim: "<<DajObim()<<endl;
  48.     }
  49. };
  50.  
  51. class Pravougaonik : public Lik
  52. {
  53.     double a,b;
  54. public:
  55.     Pravougaonik (double a, double b) : Lik("Pravougaonik"), a(a), b(b)
  56.     {
  57.         if (a<=0 || b<=0) throw "Duzine stranica pravougaonika moraju biti pozitivne! ";
  58.     }
  59.     double DajObim() const
  60.     {
  61.         return 2*(a+b);
  62.     }
  63.     double DajPovrsinu() const
  64.     {
  65.         return a*b;
  66.     }
  67.  
  68.     void IspisiAtribute() const
  69.     {
  70.         cout<<naziv<<" : "<<"povrsina: "<<DajPovrsinu()<<" , obim: "<<DajObim()<<endl;
  71.     }
  72. };
  73.  
  74. class Trougao : public Lik
  75. {
  76.     double a,b, c;
  77. public:
  78.     Trougao( double a, double b, double c) : Lik("Trougao"), a(a), b(b), c(c)
  79.     {
  80.         if (a<=0 || b<=0 || c<=0) throw "Duzine stranica trougla moraju biti pozitivne! ";
  81.     }
  82.  
  83.     double DajObim() const
  84.     {
  85.         return a+b+c;
  86.     }
  87.     double DajPovrsinu() const
  88.     {
  89.         double s((a+b+c)/2);
  90.         return sqrt(s*(s-a)*(s-b)*(s-c));
  91.     }
  92.     void IspisiAtribute() const
  93.     {
  94.         cout<<naziv<<" : "<<"povrsina: "<<DajPovrsinu()<<" , obim: "<<DajObim()<<endl;
  95.     }
  96. };
  97.  
  98.  
  99.  
  100.  
  101. int main ()
  102. {
  103.     int n;
  104.     cout<<"Unesite broj likova: ";
  105.     cin>>n;
  106.     cin.clear();
  107.     cin.ignore(1000, '\n');
  108.     try
  109.     { Lik **likovi=new Lik*[n];
  110.     fill (likovi, likovi+n, nullptr);
  111.     int i=0;
  112.     while (i<n) {
  113.     char temp;
  114.     switch (temp=cin.get()) {
  115.     case 'P': { double a,b;
  116.      cin>>a;
  117.      if (cin.get()!=',') { cout<<"Nepravilan unos!";
  118.      break;
  119.      }
  120.      cin>>b;
  121.      if (!cin) {
  122.             cout<<"Nepravilan unos!";
  123.      break;
  124.      }
  125.      if(cin.get() != '\n') cout<<"Nepravilan unos!";
  126.      likovi[i]=new Pravougaonik(a,b);
  127.         i++;
  128.         break; }
  129.  
  130.         case 'K': {
  131.             double r;
  132.             cin>>r;
  133.             if (!cin) { cout<<"Nepravilan unos."; break;}
  134.                if(cin.get() != '\n') cout<<"Nepravilan unos!";
  135.             likovi[i]=new Krug(r);
  136.             i++;
  137.         break;
  138.         }
  139.         case 'T': {
  140.             double a,b,c;
  141.             cin>>a; if(cin.get()!=',') {
  142.                 cout<<"Nepravilan unos!";
  143.                 break;
  144.             }
  145.             cin>>b; if(cin.get()!=',') {
  146.                 cout<<"Nepravilan unos!";
  147.                 break;
  148.             }
  149.             cin>>c; if(!cin) {
  150.                 cout<<"Nepravilan unos!";
  151.                 break;
  152.             }
  153.     if(cin.get() != '\n') cout<<"Nepravilan unos!";
  154.             likovi[i]=new Trougao(a,b,c);
  155.             i++;
  156.             break;
  157.         }
  158.         default: cout<<"Greska, unesite ponovo: ";
  159.  
  160.    }
  161.     }
  162.     for (int i=0; i<n; i++)
  163.         likovi[i]->IspisiAtribute();
  164.  
  165.         for (int i=0; i<n; i++) delete likovi[i];
  166.         delete [] likovi;
  167.     }
  168.     catch (const char por[]) {
  169.     cout<<por;
  170.     }
  171.  
  172.     return 0;
  173.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement