Advertisement
Guest User

Untitled

a guest
May 20th, 2018
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.58 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6.  
  7. class silnik_samochodowy
  8. {
  9. protected:
  10.     double moc;
  11.     double wymiary;
  12. public:
  13.     silnik_samochodowy * nast;
  14.     double get_moc(void) { return moc; }
  15.     double get_wymiary(void) { return wymiary; }
  16.     virtual void wypisz(void) { printf("Moc: %.1lf\nWymiary: %.1lf\n", moc, wymiary); }
  17.     silnik_samochodowy() { moc = 100.0; wymiary = 3.7; nast = nullptr; }
  18.     silnik_samochodowy(double moc, double wymiary)
  19.     {
  20.         if (moc > 0.0) this->moc = moc;
  21.         else this->moc = 100.0;
  22.         if (wymiary > 0.0)  this->wymiary = wymiary;
  23.         else this->wymiary = 3.7;
  24.         nast = nullptr;
  25.     }
  26.     silnik_samochodowy(const silnik_samochodowy &mk) { moc = mk.moc; wymiary = mk.wymiary; nast = mk.nast; }
  27.     ~silnik_samochodowy() { delete nast; }
  28.  
  29.     /*LAB13*/
  30.     silnik_samochodowy& operator+= (const silnik_samochodowy &silnik)
  31.     {
  32.         this->moc += silnik.moc;
  33.         this->wymiary += silnik.wymiary;
  34.         return *this;
  35.     }
  36.  
  37.     silnik_samochodowy& operator= (const silnik_samochodowy &silnik)
  38.     {
  39.         moc = silnik.moc;
  40.         wymiary = silnik.wymiary;
  41.         return *this;
  42.     }
  43.  
  44. };
  45.  
  46. class elektryczny: public silnik_samochodowy
  47. {
  48. protected:
  49.     double napiecie_ladowania;
  50.     double czas_pracy_dla_baterii;
  51. public:
  52.     double get_napiecie_ladowania(void) { return napiecie_ladowania; }
  53.     double get_czas_pracy_dla_baterii(void) { return czas_pracy_dla_baterii; }
  54.     void set_napiecie_ladowania(double napiecie)
  55.     {
  56.         if (napiecie > 0.0)
  57.             napiecie_ladowania = napiecie;
  58.         else
  59.             napiecie_ladowania = 5.0;
  60.     }
  61.     void set_czas_pracy_dla_baterii(double czas_pracy)
  62.     {
  63.         if (czas_pracy > 0)
  64.             czas_pracy_dla_baterii = czas_pracy;
  65.         else
  66.             czas_pracy_dla_baterii = 5.0;
  67.     }
  68.     void wypisz(void)
  69.     {
  70.         printf("SILNIK ELEKTRYCZNY:\n");
  71.         silnik_samochodowy::wypisz();
  72.         printf("\n\nNapiecie ladowania: %.1lf\nCzas pracy baterii: %.1lf\n\n", napiecie_ladowania, czas_pracy_dla_baterii);
  73.     }
  74.  
  75.     elektryczny() : silnik_samochodowy(), napiecie_ladowania(12.0), czas_pracy_dla_baterii(5.0) {}
  76.     elektryczny(double mc, double wym, double nap, double czas) : silnik_samochodowy(mc, wym)
  77.     {
  78.         if (nap > 0.0)
  79.             napiecie_ladowania = nap;
  80.         else
  81.             napiecie_ladowania = 10.0;
  82.         if (czas > 0)
  83.             czas_pracy_dla_baterii = czas;
  84.         else
  85.             czas_pracy_dla_baterii = 2.0;
  86.     }
  87.     elektryczny(const elektryczny &mk) :silnik_samochodowy(mk.moc, mk.wymiary), napiecie_ladowania(mk.napiecie_ladowania), czas_pracy_dla_baterii(mk.czas_pracy_dla_baterii) {}
  88.  
  89.     /*LAB13*/
  90.  
  91.     elektryczny& operator= (const elektryczny& el)
  92.     {
  93.         //moc = el.moc; // dziala
  94.         silnik_samochodowy::operator=(el);
  95.         napiecie_ladowania = el.napiecie_ladowania;
  96.         czas_pracy_dla_baterii = el.czas_pracy_dla_baterii;
  97.         return *this;
  98.     }
  99.  
  100.     elektryczny& operator+= (const elektryczny& el)
  101.     {
  102.         silnik_samochodowy::operator+=(el);
  103.         napiecie_ladowania += el.napiecie_ladowania;
  104.         czas_pracy_dla_baterii += el.czas_pracy_dla_baterii;
  105.         return *this;
  106.     }
  107.  
  108. };
  109.  
  110. class spalinowy: public silnik_samochodowy
  111. {
  112. protected:
  113.     char rodzaj_paliwa[32];
  114.     double pojemnosc;
  115.     char rodzaj_oleju[32];
  116. public:
  117.     void get_rodzaj_paliwa(char* paliwo) { strcpy(paliwo, rodzaj_paliwa); }
  118.     double get_pojemnosc(void) { return pojemnosc; }
  119.     void get_rodzaj_oleju(char* olej) { strcpy(olej, rodzaj_oleju); }
  120.     void set_rodzaj_paliwa(char* paliwo) { strcpy(rodzaj_paliwa, paliwo); }
  121.     void set_pojemnosc(double poj)
  122.     {
  123.         if (poj > 0)
  124.             pojemnosc = poj;
  125.         else
  126.             pojemnosc = 4.0;
  127.     }
  128.     void set_rodzaj_oleju(char* olej) { strcpy(rodzaj_oleju, olej); }          
  129.     void wypisz()
  130.     {
  131.         printf("SILNIK SPALINOWY\n");
  132.         silnik_samochodowy::wypisz();
  133.         printf("\n\nRodzaj paliwa: %s\nPojemnosc: %.1lf\nRodzaj oleju: %s\n\n", rodzaj_paliwa, pojemnosc, rodzaj_oleju);
  134.     }
  135.     spalinowy() : silnik_samochodowy(), pojemnosc(4.5)
  136.     {
  137.         strcpy(rodzaj_paliwa, "benzyna");
  138.         strcpy(rodzaj_oleju, "mineralny");
  139.     }
  140.     spalinowy(double mc, double wym, char* paliwo, double poj, char* olej) :silnik_samochodowy(mc, wym)
  141.     {
  142.         if (poj > 0)
  143.             pojemnosc = poj;
  144.         else
  145.             pojemnosc = 4.0;
  146.         strcpy(rodzaj_paliwa, paliwo);
  147.         strcpy(rodzaj_oleju, olej);
  148.     }
  149.     spalinowy(spalinowy &mk) : silnik_samochodowy(mk.moc, mk.wymiary), pojemnosc(mk.pojemnosc)
  150.     {
  151.         strcpy(rodzaj_oleju, mk.rodzaj_oleju);
  152.         strcpy(rodzaj_paliwa, mk.rodzaj_paliwa);
  153.     }
  154.  
  155.     /*LAB13*/
  156.  
  157.     spalinowy& operator= (const spalinowy& spal)
  158.     {
  159.         silnik_samochodowy::operator=(spal);
  160.         strcpy(rodzaj_paliwa, spal.rodzaj_paliwa);
  161.         pojemnosc = spal.pojemnosc;
  162.         strcpy(rodzaj_oleju, spal.rodzaj_oleju);
  163.         return *this;
  164.     }
  165.  
  166.     spalinowy& operator+= (const spalinowy& spal)
  167.     {
  168.         silnik_samochodowy::operator+=(spal);
  169.         strcat(rodzaj_paliwa, spal.rodzaj_paliwa);
  170.         pojemnosc += spal.pojemnosc;
  171.         strcat(rodzaj_oleju, spal.rodzaj_oleju);
  172.         return *this;
  173.     }
  174.  
  175. };
  176.  
  177. class samochod
  178. {
  179. protected:
  180.     double cena;
  181.     char rodzaj[20];
  182. public:
  183.     samochod * nast;
  184.     double get_cena(void) { return cena; }
  185.     char* get_silnik(void) { return rodzaj; }
  186.     void wypisz(void) { printf("Cena: %.1lf\nSilnik: %s\n", cena, rodzaj); }
  187.     samochod()
  188.     {
  189.         cena = 10000.0;
  190.         strcpy(rodzaj, "spalinowy");
  191.         nast = nullptr;
  192.     }
  193.     samochod(double cena, char* y)
  194.     {
  195.         strcpy(rodzaj, y);
  196.         if (cena > 0.0) this->cena = cena;
  197.         else this->cena = 10000.0;
  198.         nast = nullptr;
  199.     }
  200.     samochod(const samochod &mk)
  201.     {
  202.         cena = mk.cena;
  203.         strcpy(rodzaj, mk.rodzaj);
  204.         nast = mk.nast;
  205.     }
  206.     ~samochod() { delete nast; printf("DESTRUKTOR SAMOCHOD\n");}
  207. };
  208.  
  209. class urzadzenie_optyczne
  210. {
  211. protected:
  212.     double zoom;
  213.     double waga;
  214. public:
  215.     urzadzenie_optyczne * nast;
  216.     double get_zoom(void) { return zoom; }
  217.     double get_waga(void) { return waga; }
  218.     void wypisz(void) { printf("Zoom: %.1lf\nWaga: %.1lf\n", zoom, waga); }
  219.     urzadzenie_optyczne() { zoom = 3.0; waga = 500.0; nast = nullptr; }
  220.     urzadzenie_optyczne(double zoom, double waga)
  221.     {
  222.         if (zoom >= 0.0)this->zoom = zoom;
  223.         else this->zoom = 3.0;
  224.         if (waga >= 0.0)this->waga = waga;
  225.         else this->waga = 500.0;
  226.         nast = nullptr;
  227.     }
  228.     urzadzenie_optyczne(const urzadzenie_optyczne &mk) { zoom = mk.zoom;    waga = mk.waga; nast = mk.nast; }
  229.     ~urzadzenie_optyczne() { delete nast; printf("DESTRUKTOR URZADZNIE OPTYCZNE\n");}
  230. };
  231.  
  232. class osoba_na_uczelni
  233. {
  234. protected:
  235.     char imie[32];
  236.     char nazwisko[32];
  237.     char adres_email[32];
  238. public:
  239.     osoba_na_uczelni * nast;
  240.     void get_imie(char *imie_destination) { strcpy(imie_destination, imie); }
  241.     void get_nazwisko(char *nazwisko_destination) { strcpy(nazwisko_destination, nazwisko); }
  242.     void get_email(char *adres_email_destination) { strcpy(adres_email_destination, adres_email); }
  243.     void wypisz(void) { printf("Imie: %s\nNazwisko: %s\nAdres email: %s\n", imie, nazwisko, adres_email); }
  244.     osoba_na_uczelni()
  245.     {
  246.         strcpy(imie, "brak");
  247.         strcpy(nazwisko, "brak");
  248.         strcpy(adres_email, "brak");
  249.         nast = nullptr;
  250.     }
  251.     osoba_na_uczelni(char *wsk_imie, char *wsk_nazwisko, char *wsk_adres_email)
  252.     {
  253.         strcpy(imie, wsk_imie);
  254.         strcpy(nazwisko, wsk_nazwisko);
  255.         strcpy(adres_email, wsk_adres_email);
  256.         nast = nullptr;
  257.     }
  258.     osoba_na_uczelni(const osoba_na_uczelni &mk)
  259.     {
  260.         strcpy(imie, mk.imie);
  261.         strcpy(nazwisko, mk.nazwisko);
  262.         strcpy(adres_email, mk.adres_email);
  263.         nast = nullptr;
  264.     }
  265.     ~osoba_na_uczelni() { delete nast; printf("DESTRUKTOR OSOBA NA UCZELNI\n");}
  266. };
  267.  
  268. int main()
  269. {
  270.     /*WEJSCIOWKA 12*/
  271.     //silnik_samochodowy *silnik_1 = new silnik_samochodowy();
  272.     //silnik_samochodowy *silnik_2 = new silnik_samochodowy(300.0, 4.5);
  273.     //silnik_samochodowy *silnik_3 = new silnik_samochodowy(*silnik_2);
  274.     //silnik_samochodowy *silnik_4 = new silnik_samochodowy();
  275.     //silnik_samochodowy *silnik_5 = new silnik_samochodowy(250.0, 3.5);
  276.  
  277.     //silnik_samochodowy *silnik_head = silnik_1;
  278.     //silnik_1->nast = silnik_2;
  279.     //silnik_2->nast = silnik_3;
  280.     //silnik_3->nast = silnik_4;
  281.     //silnik_4->nast = silnik_5;
  282.     //silnik_samochodowy *wsk = silnik_head;
  283.     //printf("LISTA SILNIKOW:\n");
  284.     //int i = 0;
  285.     //while (wsk != nullptr)
  286.     //{
  287.     //  printf("\nSilnik: %d\n", i + 1);
  288.     //  wsk->wypisz();
  289.     //  wsk = wsk->nast;
  290.     //  i++;
  291.     //}
  292.     //delete silnik_head;
  293.  
  294.     //char rodzaj1[20] = { "Gaz" };
  295.     //char rodzaj2[20] = { "Hybrydowy" };
  296.  
  297.     //samochod *samochod_1 = new samochod();
  298.     //samochod *samochod_2 = new samochod(5000.0, rodzaj1);
  299.     //samochod *samochod_3 = new samochod(*samochod_2);
  300.     //samochod *samochod_4 = new samochod();
  301.     //samochod *samochod_5 = new samochod(30000.0, rodzaj2);
  302.  
  303.     //samochod *samochod_head = samochod_1;
  304.     //samochod_1->nast = samochod_2;
  305.     //samochod_2->nast = samochod_3;
  306.     //samochod_3->nast = samochod_4;
  307.     //samochod_4->nast = samochod_5;
  308.     //samochod *wsk_1 = samochod_head;
  309.     //printf("\n\nLISTA SAMOCHODOW:\n");
  310.     //i = 0;
  311.     //while (wsk_1 != nullptr)
  312.     //{
  313.     //  printf("\nSamochod: %d\n", i + 1);
  314.     //  wsk_1->wypisz();
  315.     //  wsk_1 = wsk_1->nast;
  316.     //  i++;
  317.     //}
  318.     //delete samochod_head;
  319.  
  320.     //urzadzenie_optyczne *urzadzenie_1 = new urzadzenie_optyczne();
  321.     //urzadzenie_optyczne *urzadzenie_2 = new urzadzenie_optyczne(2.0, 200.0);
  322.     //urzadzenie_optyczne *urzadzenie_3 = new urzadzenie_optyczne(*urzadzenie_2);
  323.     //urzadzenie_optyczne *urzadzenie_4 = new urzadzenie_optyczne();
  324.     //urzadzenie_optyczne *urzadzenie_5 = new urzadzenie_optyczne(1.5, 150.0);
  325.  
  326.     //urzadzenie_optyczne *urzadzenie_head = urzadzenie_1;
  327.     //urzadzenie_1->nast = urzadzenie_2;
  328.     //urzadzenie_2->nast = urzadzenie_3;
  329.     //urzadzenie_3->nast = urzadzenie_4;
  330.     //urzadzenie_4->nast = urzadzenie_5;
  331.     //urzadzenie_optyczne *wsk_2 = urzadzenie_head;
  332.     //printf("\n\nLISTA URZADZEN OPTYCZNYCH:\n");
  333.     //i = 0;
  334.     //while (wsk_2 != nullptr)
  335.     //{
  336.     //  printf("\nUrzadzenie: %d\n", i + 1);
  337.     //  wsk_2->wypisz();
  338.     //  wsk_2 = wsk_2->nast;
  339.     //  i++;
  340.     //}
  341.     //delete urzadzenie_head;
  342.  
  343.     //char imie1[32] = { "Mirek" };
  344.     //char nazwisko1[32] = { "Abramowicz" };
  345.     //char email1[32] = { "m.abramowicz@wp.pl" };
  346.  
  347.     //char imie2[32] = { "Krzysztof" };
  348.     //char nazwisko2[32] = { "Michalek" };
  349.     //char email2[32] = { "k.michalek@wp.pl" };
  350.  
  351.     //osoba_na_uczelni *osoba_1 = new osoba_na_uczelni();
  352.     //osoba_na_uczelni *osoba_2 = new osoba_na_uczelni(imie1, nazwisko1, email1);
  353.     //osoba_na_uczelni *osoba_3 = new osoba_na_uczelni(*osoba_2);
  354.     //osoba_na_uczelni *osoba_4 = new osoba_na_uczelni();
  355.     //osoba_na_uczelni *osoba_5 = new osoba_na_uczelni(imie2, nazwisko2, email2);
  356.  
  357.     //osoba_na_uczelni *osoba_head = osoba_1;
  358.     //osoba_1->nast = osoba_2;
  359.     //osoba_2->nast = osoba_3;
  360.     //osoba_3->nast = osoba_4;
  361.     //osoba_4->nast = osoba_5;
  362.     //osoba_na_uczelni *wsk_3 = osoba_head;
  363.     //printf("\n\nLISTA OSOB NA UCZELNI:\n");
  364.     //i = 0;
  365.     //while (wsk_3 != nullptr)
  366.     //{
  367.     //  printf("\nOsoba: %d\n", i + 1);
  368.     //  wsk_3->wypisz();
  369.     //  wsk_3 = wsk_3->nast;
  370.     //  i++;
  371.     //}
  372.     //delete osoba_head;
  373.  
  374.  
  375.     /*LAB12*/
  376.  
  377.     //silnik_samochodowy *head = nullptr, *wsk = nullptr;
  378.     //char wybor;
  379.     //do
  380.     //{
  381.     //  printf("WYBIERZ TYP SILNIKA:\n1 - elektryczny\n2 - spalinowy\n\n");
  382.     //  int typ_silnika;
  383.     //  scanf("%d", &typ_silnika);
  384.     //  switch (typ_silnika)
  385.     //  {
  386.     //      double moc;
  387.     //      double wymiary;
  388.     //      double napiecie;
  389.     //      double czas_pracy;
  390.     //      char paliwo[32];
  391.     //      double pojemnosc;
  392.     //      char olej[32];
  393.     //  case 1:
  394.     //      printf("\nPodaj moc silnika: ");
  395.     //      scanf("%lf", &moc);
  396.     //      printf("Podaj wymiary: ");
  397.     //      scanf("%lf", &wymiary);
  398.     //      printf("Podaj napiecie: ");
  399.     //      scanf("%lf", &napiecie);
  400.     //      printf("Podaj czas pracy na baterii: ");
  401.     //      scanf("%lf", &czas_pracy);
  402.     //      if (head == nullptr)
  403.     //          head = wsk = new elektryczny(moc, wymiary, napiecie, czas_pracy);
  404.     //      else
  405.     //      {
  406.     //          wsk->nast = new elektryczny(moc, wymiary, napiecie, czas_pracy);
  407.     //          wsk = wsk->nast;
  408.     //      }
  409.     //      break;
  410.     //  case 2:
  411.     //      printf("\nPodaj moc silnika: ");
  412.     //      scanf("%lf", &moc);
  413.     //      printf("Podaj wymiary: ");
  414.     //      scanf("%lf", &wymiary);
  415.     //      printf("Podaj rodzaj paliwa: ");
  416.     //      scanf("%s", paliwo);
  417.     //      printf("Podaj pojemnosc: ");
  418.     //      scanf("%lf", &pojemnosc);
  419.     //      printf("Podaj rodzaj oleju: ");
  420.     //      scanf("%s", olej);
  421.     //      if (head == nullptr)
  422.     //          head = wsk = new spalinowy(moc, wymiary, paliwo, pojemnosc, olej);
  423.     //      else
  424.     //      {
  425.     //          wsk->nast = new spalinowy(moc, wymiary, paliwo, pojemnosc, olej);
  426.     //          wsk = wsk->nast;
  427.     //      }
  428.     //      break;
  429.     //  default:
  430.     //      printf("\n\nBledny wybor\n\n");
  431.     //      break;
  432.     //  }
  433.     //  printf("\n\nKONTYNUOWAC ? t/n ");
  434.     //  while (getchar() != '\n') continue;
  435.     //  wybor = getchar();
  436.     //  while (getchar() != '\n') continue;
  437.     //} while (wybor == 't');
  438.  
  439.  
  440.     //printf("\nLISTA SILNIKOW:\n\n");
  441.     //wsk = head;
  442.     //while (wsk != nullptr)
  443.     //{
  444.     //  wsk->wypisz();
  445.     //  wsk = wsk->nast;
  446.     //}
  447.  
  448.     //delete head;
  449.  
  450.  
  451.     /*LAB13*/
  452.     /*1*/
  453.  
  454.     elektryczny A1, A2, A3;
  455.     spalinowy B1, B2, B3;
  456.  
  457.     A2 += A3;
  458.     A1 = A2;
  459.     B1 = B2 += B3;
  460.  
  461.     printf("A1:\n");
  462.     A1.wypisz();
  463.     printf("\n\nB1:\n");
  464.     B1.wypisz();
  465.  
  466.  
  467.     /*2*/
  468.     silnik_samochodowy *head = nullptr, *wsk = nullptr;
  469.     char wybor;
  470.     do
  471.     {
  472.         printf("WYBIERZ TYP SILNIKA:\n1 - elektryczny\n2 - spalinowy\n\n");
  473.         int typ_silnika;
  474.         scanf("%d", &typ_silnika);
  475.         switch (typ_silnika)
  476.         {
  477.             double moc;
  478.             double wymiary;
  479.             double napiecie;
  480.             double czas_pracy;
  481.             char paliwo[32];
  482.             double pojemnosc;
  483.             char olej[32];
  484.         case 1:
  485.             printf("\nPodaj moc silnika: ");
  486.             scanf("%lf", &moc);
  487.             printf("Podaj wymiary: ");
  488.             scanf("%lf", &wymiary);
  489.             printf("Podaj napiecie: ");
  490.             scanf("%lf", &napiecie);
  491.             printf("Podaj czas pracy na baterii: ");
  492.             scanf("%lf", &czas_pracy);
  493.             if (head == nullptr)
  494.                 head = wsk = new elektryczny(moc, wymiary, napiecie, czas_pracy);
  495.             else
  496.             {
  497.                 wsk->nast = new elektryczny(moc, wymiary, napiecie, czas_pracy);
  498.                 wsk = wsk->nast;
  499.             }
  500.             break;
  501.         case 2:
  502.             printf("\nPodaj moc silnika: ");
  503.             scanf("%lf", &moc);
  504.             printf("Podaj wymiary: ");
  505.             scanf("%lf", &wymiary);
  506.             printf("Podaj rodzaj paliwa: ");
  507.             scanf("%s", paliwo);
  508.             printf("Podaj pojemnosc: ");
  509.             scanf("%lf", &pojemnosc);
  510.             printf("Podaj rodzaj oleju: ");
  511.             scanf("%s", olej);
  512.             if (head == nullptr)
  513.                 head = wsk = new spalinowy(moc, wymiary, paliwo, pojemnosc, olej);
  514.             else
  515.             {
  516.                 wsk->nast = new spalinowy(moc, wymiary, paliwo, pojemnosc, olej);
  517.                 wsk = wsk->nast;
  518.             }
  519.             break;
  520.         default:
  521.             printf("\n\nBledny wybor\n\n");
  522.             break;
  523.         }
  524.         printf("\n\nKONTYNUOWAC ? t/n ");
  525.         while (getchar() != '\n') continue;
  526.         wybor = getchar();
  527.         while (getchar() != '\n') continue;
  528.     } while (wybor == 't');
  529.  
  530.  
  531.     printf("\nLISTA SILNIKOW:\n\n");
  532.     wsk = head;
  533.     while (wsk != nullptr)
  534.     {
  535.         wsk->wypisz();
  536.         wsk = wsk->nast;
  537.     }
  538.  
  539.     elektryczny* suma = (elektryczny*) head;
  540.     wsk = head;
  541.  
  542.     while(wsk != nullptr)
  543.     {
  544.         *suma += *(elektryczny*)wsk;
  545.         wsk = wsk->nast;
  546.     }
  547.     printf("\n\nSUMA\n");
  548.     suma->wypisz();
  549.  
  550.     delete head;
  551.    
  552.    
  553.    
  554.     printf("\n\nKoniec programu.\n");
  555.     return 0;
  556. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement