Advertisement
196040

OOP zadaci za vezbanje 2 Transport

May 18th, 2020
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.46 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std; //Туристичка агенција нуди различни понуди за транспорт на патници.
  4. class Transport { //За секоја понуда се чуваат податоци за
  5. char * destinacija; //дестинацијата (низа од знаци),
  6. double osnovna; //основна цена (цел број) и
  7. int rastojanie; //податок за растојанието до дестинацијата изразено во km (цел број).
  8. public:
  9. Transport() {
  10.     this->destinacija = new char[0];
  11.     strcpy(this->destinacija, "");
  12.     this->osnovna = 0.0;
  13.     this->rastojanie = 0;
  14. }
  15. Transport(char * destinacija, double osnovna, int rastojanie) {
  16.     this->destinacija = new char[strlen(destinacija)+1];
  17.     strcpy(this->destinacija, destinacija);
  18.     this->osnovna = osnovna;
  19.     this->rastojanie = rastojanie;
  20. }
  21. Transport(const Transport &copy) {
  22.     this->destinacija = new char[strlen(copy.destinacija)+1];
  23.     strcpy(this->destinacija, copy.destinacija);
  24.     this->osnovna = copy.osnovna;
  25.     this->rastojanie = copy.rastojanie;
  26. }
  27. Transport &operator=(const Transport &copy) {
  28.     if(this!=&copy) {
  29.         this->destinacija = new char[strlen(copy.destinacija)+1];
  30.     strcpy(this->destinacija, copy.destinacija);
  31.     this->osnovna = copy.osnovna;
  32.     this->rastojanie = copy.rastojanie;
  33.     }
  34.     return *this;
  35. }
  36.     char * getdestinacija () {
  37.     return this->destinacija;
  38.     }
  39.     int getrastojanie() {
  40.     return this->rastojanie;
  41.     }
  42. virtual double cenaTransport() {
  43.     return this->osnovna;
  44. }
  45. bool operator<(Transport &compare) { //преоптоварен оператор < за споредба на две понуди за транспорт на патник
  46. return this->cenaTransport() < compare.cenaTransport(); //растојанието до дестинацијата. (5 поени)
  47. }
  48. };
  49. class AvtomobilTransport : public Transport { //Од класата Transport да се изведат класите AvtomobilTransport и
  50. private:// За секоја понуда за транспорт со автомобил се чува податок за тоа дали во понудата има
  51. bool sofer; //платен шофер ( (булова променлива),
  52. public:
  53. AvtomobilTransport() {
  54.     this->sofer = true;
  55. }
  56. AvtomobilTransport(char * destinacija, double osnovna, int rastojanie, bool sofer) : Transport(destinacija, osnovna, rastojanie) {
  57. this->sofer = sofer;
  58. }
  59. AvtomobilTransport(const AvtomobilTransport &copy) : Transport(copy) {
  60.     this->sofer = copy.sofer;
  61. }
  62. double cenaTransport() { //За транспорт со автомобил - основната цена се зголемува за 20% ако има платен шофер
  63. if(this->sofer)
  64. return Transport::cenaTransport() * 1.2;
  65. else return Transport::cenaTransport();
  66. }
  67. };
  68. class KombeTransport : public Transport { //KombeTransport за моделирање на понудите за транспорт кои нудат
  69. private://транспорт со автомобил или комбе, соодветно.даток за тоа дали во понудата има платен шофер
  70. int broj; //а за транспорт со комбе бројот на луѓе кои може да се превезат во комбето (цел број). (5 поени)
  71. public://За секој објект од двете изведени класи треба да бидат на располагање следниве методи:
  72. KombeTransport() {
  73.     this->broj = 0;
  74. }
  75. KombeTransport(char * destinacija, double osnovna, int rastojanie, int broj) : Transport(destinacija, osnovna, rastojanie) {
  76.     this->broj = broj;
  77.  } //конструктор со аргументи што одговараат на податочните членови и set и get методи за податочните членови
  78.    double cenaTransport() { //метод cenaTransport, за пресметување на цената на понудата на следниот начин:
  79.     return Transport::cenaTransport() - this->broj*200; //За секој патник во комбето цената се намалува за 200
  80.     }//За транспорт со комбе-основната цена ќе се намали зависно од бројот на патници
  81. };
  82. void pecatiPoloshiPonudi(Transport **niza, int broj, Transport &t) {//Да се имплементира функција pecatiPoloshiPonudi
  83.    // што на влез прима низа од понуди за транспорт на патник, бројот на елементите од низата и една понуда T.
  84.         Transport *s;  
  85.     for(int i = 0 ; i < broj ; i ++)
  86.     {
  87.         for(int j = 0 ; j < broj ; j++)
  88.         {
  89.         if(*niza[i] < *niza[j])
  90.             {
  91.             s=niza[i];
  92.            niza[i]=niza[j];
  93.             niza[j]=s;        
  94.             }
  95.         }
  96.     }//сортирани во растечки peдослед по растојанието до дестинацијата
  97.      for(int i = 0 ; i < broj ; i ++)
  98.     {
  99.          if(niza[i]->cenaTransport() > t.cenaTransport()) {
  100.             cout<<niza[i]->getdestinacija()<<" "; //Функцијата ја печати дестинацијата,
  101.          cout<<niza[i]->getrastojanie()<<" "; //растојанието до дестинацијата
  102.              cout<<niza[i]->cenaTransport()<<endl;
  103.     }//и цената за понудите од низата кои се поскапи од понудата T
  104. }
  105. }
  106. int main(){
  107. char destinacija[20];
  108. int tip,cena,rastojanie,lugje;
  109. bool shofer;
  110. int n;
  111. cin>>n;
  112. Transport  **ponudi;
  113. ponudi=new Transport *[n];
  114. for (int i=0;i<n;i++){
  115.     cin>>tip>>destinacija>>cena>>rastojanie;
  116.     if (tip==1) {
  117.         cin>>shofer;
  118.         ponudi[i]=new AvtomobilTransport(destinacija,cena,rastojanie,shofer);
  119.     }
  120.     else {
  121.         cin>>lugje;
  122.         ponudi[i]=new KombeTransport(destinacija,cena,rastojanie,lugje);
  123.     }
  124. }
  125. AvtomobilTransport nov("Ohrid",2000,600,false);
  126. pecatiPoloshiPonudi(ponudi,n,nov);
  127. for (int i=0;i<n;i++) delete ponudi[i];
  128. delete [] ponudi;
  129. return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement