Advertisement
SlavkovB

Наследување OOP Exercises

Jun 7th, 2016
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.72 KB | None | 0 0
  1. Наследување Problem 10 (0 / 0)
  2. Да се креира апстрактна класа за репрезентација на недвижности (Nedviznost). За секоја недвижност се чуваат (5 поени):
  3.  
  4. адреса (низа од 100 знаци)
  5. град (низа од 30 знаци)
  6. квадратура на земјиштето (реален број)
  7. За класата Nedviznost треба да се напишат операторите (15 поени):
  8.  
  9. оператор << - за печатење на адресата, градот, квадратурата и проценетата цена
  10. оператор < - за споредување на недвижностите според нивната проценета цена
  11. Од класата недвижност треба да се изведат класите Kukja, Zgrada и Stovariste (5 поени).
  12.  
  13. За секоја куќа дополнително се чуваат:
  14.  
  15. број на катови (цел број)
  16. квадратура на еден кат (реален број). Се смета дека површината на секој кат и поткровјето (доколку го има) се исти
  17. дали има поткровје (bool променлива)
  18. За секоја зграда дополнително се чува:
  19.  
  20. квадратура на еден стан
  21. број на станови во зградата
  22. За секоје стовариште се чува:
  23.  
  24. квадратура на покриен дел од стовариштето
  25. дали има канцеларија (bool променлива)
  26. За секоја недвижност потребно е да се направи проценка на цената (15 поени).
  27.  
  28. Цената на куќата се добива како: kvadratkukja∗700+kvadratdvor∗200+kvadratpotkrovje∗450 . Секој кат од куќата е со иста квадратура. Површината на дворот е површина на земјиштето минус површината на еден кат.
  29. Цената на зградата се добива како: (kvadratstan∗800)∗brojstanovi+brojstanovi∗500. Во цената на зградата, квадратурата на земјиштето не игра улога.
  30. Цената на стовариштето се добива како: (kvadratpokrien−del∗250+kvadraturanepokrien−del∗100). Доколку стовариштето има канцеларија, цената се зголемува за 10%.
  31. Да се напише надворешна функција najskap_Imot која како аргументи прима низа од покажувачи од класата Nedviznost и нивниот број и ги печати информациите за недвижноста со највисока цена (10 поени).
  32.  
  33. Sample input
  34. 2
  35. 1 Vostanicka Skopje 54.5 1 70 0
  36. 2 Prvomajska Skopje 100  10 66
  37.  
  38. Sample output
  39. == IMOTI ==
  40. Adresa: Vostanicka
  41. Grad: Skopje
  42. 54.5 kvadrati
  43. Cena: 45900
  44.  
  45. Adresa: Prvomajska
  46. Grad: Skopje
  47. 100 kvadrati
  48. Cena: 533000
  49.  
  50. === NAJSKAP IMOT ===
  51. Adresa: Prvomajska
  52. Grad: Skopje
  53. 100 kvadrati
  54. Cena: 533000
  55.  
  56. //CODE//
  57.  
  58.  
  59. #include <iostream>
  60. #include <cstdlib>
  61. #include <cstring>
  62.  
  63. using namespace std;
  64.  
  65. class Nedviznost{
  66. char adresa[100];
  67.     char grad[30] ;
  68.     float kvadratura;
  69.     public:
  70.     virtual float cena()  = 0;
  71.    float getKvadrat(){return kvadratura;}
  72.     Nedviznost(const char *adresa = " ", const char *grad = " " , float kvadratura = 0.0){
  73.     strcpy(this -> adresa, adresa);
  74.     strcpy(this -> grad, grad);
  75.    this -> kvadratura = kvadratura;}
  76.    
  77.     Nedviznost(const Nedviznost &ob){
  78.     strcpy(this -> adresa, ob.adresa);
  79.     strcpy(this -> grad, ob.grad);
  80.     this -> kvadratura = ob.kvadratura;}
  81.  
  82.     Nedviznost &operator=(const Nedviznost &ob){
  83.         if(this!= &ob){
  84.     strcpy(this -> adresa, ob.adresa);
  85.     strcpy(this -> grad, ob.grad);
  86.     this -> kvadratura = ob.kvadratura;
  87.         }
  88.     return *this;
  89.     }
  90.  friend ostream& operator<< (ostream &o, Nedviznost &x) {
  91.         o<< "Adresa: " << x.adresa << endl << "Grad: " << x.grad << endl << x.kvadratura<< " kvadrati" << endl;
  92.         o<< "Cena: " << x.cena()<<endl;
  93.      return o;}
  94.  
  95.     bool operator<(Nedviznost &x) {
  96.         return (x.cena() < x.cena());
  97.     }
  98.     virtual ~Nedviznost(){}
  99. };
  100. class Kukja: public Nedviznost{
  101.    int br_kat;
  102.    float kvadrat_kat;
  103.    bool potkrovje;
  104.     public:
  105.     Kukja(const char *adresa = " ", const char *grad = " ", float kvadratura = 0.0, int br_kat = 0, float kvadrat_kat = 0.0, bool potkrovje = false):Nedviznost(adresa,grad,kvadratura)
  106.     {this -> br_kat = br_kat;
  107.     this -> kvadrat_kat = kvadrat_kat;
  108.     this -> potkrovje = potkrovje;}
  109.     ~Kukja(){}
  110. float cena(){  
  111.         float cena;
  112.   cena = ((kvadrat_kat) * 700 + (getKvadrat() - kvadrat_kat) * 200 + potkrovje * kvadrat_kat * 450);
  113. return cena;}
  114. };
  115.  
  116. class Zgrada: public Nedviznost{
  117.     int br_stanovi;
  118.             float kvadrat_na_stan;
  119. public:
  120.     Zgrada(){}
  121.     Zgrada(const char *adresa = " ", const char *grad = " ", float kvadratura = 0.0, int br_stanovi = 0, float kvadrat_na_stan = 0.0):Nedviznost(adresa,grad,kvadratura){
  122.  
  123.    this -> br_stanovi = br_stanovi;
  124.         this -> kvadrat_na_stan = kvadrat_na_stan;}
  125.     float cena(){
  126.     return ((kvadrat_na_stan*800)*br_stanovi+(br_stanovi*500));}
  127.     ~Zgrada(){}
  128. };
  129. class Stovariste: public Nedviznost{
  130.     float kvadrati_pokrien_del;
  131.             bool kancelarija;
  132.     public:
  133.     Stovariste(const char *adresa = " ", const char *grad = " ", int kvadratura = 0, float kvadrati_pokrien_del = 0.0, bool kancelarija = false):Nedviznost(adresa,grad,kvadratura){
  134.     this -> kvadrati_pokrien_del = kvadrati_pokrien_del;
  135.     this -> kancelarija = kancelarija;}
  136.    
  137.     float cena(){  
  138.         if(kancelarija == 0) {
  139.             return ((kvadrati_pokrien_del * 250 + (getKvadrat() - kvadrati_pokrien_del) * 100) * 0.1);
  140.         } else {
  141.             return (kvadrati_pokrien_del * 250 + (getKvadrat() - kvadrati_pokrien_del) * 100);}
  142.     }
  143.     ~Stovariste(){}
  144. };
  145.  
  146.  
  147.  
  148. Nedviznost &najskap_imot(Nedviznost **ned, int n){
  149. Nedviznost *max = ned[0];
  150.     for(int i = 0; i < n; i++){
  151.     if(ned[i]  > max){
  152.         max = ned[i];                      
  153.     }
  154.     }
  155.     return *max;
  156. }
  157. int main() {
  158.     int n; // Broj na nedviznosti
  159.  
  160.     int tip_nedviznost; // Tip na nedviznost (1-kukja, 2-zgrada, 3-stovariste)
  161.  
  162.     cin >> n;
  163.  
  164.     Nedviznost **ned = new Nedviznost*[n];
  165.     char adresa[100];
  166.     char grad[30] ;
  167.     float kvadratura;
  168.     for(int i = 0; i < n; ++i) {
  169.         cin >> tip_nedviznost>> adresa >> grad >> kvadratura;
  170.         if(tip_nedviznost==1) {
  171.             int br_kat;
  172.             float kvadrat_kat;
  173.             bool potkrovje;
  174.             cin >> br_kat >> kvadrat_kat >> potkrovje;
  175.             ned[i] = new Kukja(adresa, grad, kvadratura, br_kat, kvadrat_kat, potkrovje);
  176.         }
  177.         else if(tip_nedviznost == 2) {
  178.             int br_stanovi;
  179.             float kvadrat_na_stan;
  180.             cin >> br_stanovi >> kvadrat_na_stan;
  181.  
  182.             ned[i] = new Zgrada(adresa, grad, kvadratura, br_stanovi, kvadrat_na_stan);
  183.         }
  184.         else if(tip_nedviznost == 3){
  185.             float kvadrati_pokrien_del;
  186.             bool kancelarija;
  187.             cin >>kvadrati_pokrien_del >> kancelarija;
  188.  
  189.             ned[i]= new Stovariste(adresa, grad, kvadratura, kvadrati_pokrien_del,kancelarija);
  190.         }
  191.     }
  192.  
  193.     cout<<"== IMOTI =="<<endl;
  194.     for (int i=0; i<n; i++){
  195.         cout<<*(ned[i])<<endl;
  196.     }
  197.  
  198.     cout << "=== NAJSKAP IMOT ===" << endl;
  199.     cout << najskap_imot(ned, n);
  200.  
  201.     return 0;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement