Advertisement
simov

OOP Lab.9 - Статички членови и исклучоци

May 2nd, 2014
2,595
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.06 KB | None | 0 0
  1. /*
  2. Сите елементи кои ги превезуваат камионите имаат одредена маса. Имплементирајте апстрактна класа ImaMasa од која што ќе наследуваат сите класи кои имаат маса. Во оваа класа треба да се дефинираат методите:
  3.  
  4. double vratiMasa() враќа маса изразена во kg
  5. void pecati() печати информации за соодветниот објект
  6. Нека еден камион превезува пијалоци и тоа: пакет сокови и пакет вина. Да се дефинираат класите PaketSok и PaketVino кои ги имплементираат методите од апстрактната класа ImaMasa. При тоа да се земе предвид дека класите PaketSok и PaketVino се изведени од класата PaketPijalok. Притоа да се земат дадените податоци:
  7.  
  8. Класа PaketPijalok:
  9.  
  10. членови:
  11. volumenEden double
  12. kolicina int
  13. методи:
  14. double vratiMasa()
  15. void pecati()
  16. int getKolicina()
  17. Класа PaketSok:
  18.  
  19. членови:
  20. volumenEden double
  21. kolicina int
  22. daliGaziran bool
  23. методи:
  24. double vratiMasa()
  25. void pecati()
  26. Класа PaketVino:
  27.  
  28. членови:
  29. volumenEden double
  30. kolicina int
  31. procentAlkohol double
  32. методи:
  33. double vratiMasa()
  34. double getProcentAlkohol()
  35. void pecati()
  36. Еден пијалок има маса пресметана како производ на волуменот и густината (0.8kg/dm3) и масата на амбалажата (0.2kg). Овие податоци за густината и за масата на амбалажата да се стават како статички податоци за класата PaketPijalok. Масата на пакетот е производ на масата на еден пијалок и количината на пијалоци која ја има во пакетот. Соковите кои не се газирани имаат дополнителна маса од 0.1kg по пијалок. За вината, масата се добива како производ од масата на пакетот пресметан по правилата за секој пијалок помножен со коефициентот: (0.9+procentAlkohol).
  37.  
  38. Покрај овие класи, да се имплементира класата Kamion. За еден камион се чуваат информации за:
  39.  
  40. регистрацијата char*
  41. возачот char*
  42. елементите кои ги превезува камионот (низа од покажувачи од ImaMasa)
  43. Во класата Kamion покрај методите set и get дефинирајте ги и следните методи:
  44.  
  45. -Kamion(char* , char* ) конструктор со кој се генерира празен камион (без товар) - void dodadiElement(ImaMasa) се додава нов елемент во камионот - double vratiVkupnaMasa() се враќа вкупната маса на товарот кој го пренесува камионот - void pecati() се печатат сите елементи во камионот заедно со регистрацијата и името на возачот - Kamion pretovar(char* , char* ) се врши претовар во нов камион, но во новиот покрај тоа што се менуваат регистрацијата и името на возачот (аргументи), се отстранува пакетот со најголема маса.
  46.  
  47. Со помош на правилата за справување со исклучоци да се модифицира програмата така што ќе се запазат следните правила:
  48.  
  49. Регистрацијата има 8 карактери, така што првите два и последните два мора да бидат букви. Онаму каде што ќе се фати исклучокот, ќе се отпечати "Pogresno vnesena registracija!" и нема да може да се креира објект од тип на камион.
  50. Процентот на алкохол е меѓу 0 и 1. Онаму каде што ќе биде фрлен исклучокот да се фати така што ќе се отпечати "Pogresno vnesen procent na alkohol!" и притоа истиот ќе го постави на 0.
  51.  
  52. Sample input:
  53. SK3456RG
  54. Ljupcho
  55. 1 20
  56. 1
  57. 3 45
  58. 0.7
  59. 2 10
  60. 0.12
  61. 0.5 50
  62. 0
  63. 5 12
  64. 0.8
  65. BT1234GH
  66. Petko
  67.  
  68. Sample output:
  69. Kamion so registracija SK3456RG i vozac Ljupcho prenesuva:
  70. Paket sok
  71. kolicina 20, so po 0.8 l(dm3)
  72. Paket vino
  73. kolicina 45, 70% alkohol od po 2.4 l(dm3)
  74. Paket vino
  75. kolicina 10, 12% alkohol od po 1.6 l(dm3)
  76. Paket sok
  77. kolicina 50, so po 0.4 l(dm3)
  78. Paket vino
  79. kolicina 12, 80% alkohol od po 4 l(dm3)
  80. Vkupna masa: 346.24
  81. Kamion so registracija BT1234GH i vozac Petko prenesuva:
  82. Paket sok
  83. kolicina 20, so po 0.8 l(dm3)
  84. Paket vino
  85. kolicina 10, 12% alkohol od po 1.6 l(dm3)
  86. Paket sok
  87. kolicina 50, so po 0.4 l(dm3)
  88. Paket vino
  89. kolicina 12, 80% alkohol od po 4 l(dm3)
  90. Vkupna masa: 159.04
  91. */
  92.  
  93. #include<iostream>
  94. #include<cstring>
  95. using namespace std;
  96.  
  97. class ImaMasa {
  98. public:
  99.     virtual double vratiMasa()=0;
  100.     virtual void pecati()=0;
  101. };
  102. class PaketPijalok {
  103. protected:
  104.     double volumenEden;
  105.     int kolicina;
  106. public:
  107.     static const double ambalaza=0.2;
  108.     static const double gustina=0.8;
  109.     PaketPijalok(double vol,int kol) {
  110.         volumenEden=vol;
  111.         kolicina=kol;
  112.     }
  113.     int getKolicina() {
  114.         return kolicina;
  115.     }
  116.     double vratiMasa() {
  117.         return (volumenEden*gustina+ambalaza)*getKolicina();
  118.     }
  119.     double getVolumen() {
  120.         return volumenEden;
  121.     }
  122.     double getGustina() {
  123.         return gustina;
  124.     }
  125.     void pecati() {
  126.         cout<<"kolicina "<<kolicina;
  127.     }
  128. };
  129.  
  130. class PaketSok:public PaketPijalok,public ImaMasa {
  131. private:
  132.     bool daliGaziran;
  133. public:
  134.     PaketSok(double vol,int kol, bool gaziran):PaketPijalok(vol,kol) {
  135.         daliGaziran=gaziran;
  136.     }
  137.    
  138. double vratiMasa() {
  139.     if(daliGaziran==true) {
  140.     return PaketPijalok::vratiMasa();
  141.     }
  142.     else {
  143.         return PaketPijalok::vratiMasa()+0.1*PaketPijalok::getKolicina();
  144.     }
  145. }
  146.    
  147. void pecati() {
  148.     cout<<"Paket sok"<<endl;
  149.     cout<<"kolicina "<<kolicina<<", so po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
  150. }
  151. };
  152.  
  153. class PaketVino:public PaketPijalok,public ImaMasa {
  154. private:
  155.     double procent_alkohol;
  156. public:
  157.     PaketVino(double vol,int kol,double pro):PaketPijalok(vol,kol) {
  158.         try {
  159.             procent_alkohol=pro;
  160.             if(procent_alkohol<0 || procent_alkohol>1)
  161.             throw 1;
  162.         }
  163.         catch (int) {
  164.             cout<<"Pogresno vnesen procent na alkohol!"<<endl;
  165.             procent_alkohol=0;
  166.         }
  167. }
  168. double getProcentAlkohol() {
  169.     return procent_alkohol;
  170. }
  171. double vratiMasa() {
  172.     return PaketPijalok::vratiMasa()*(0.9+procent_alkohol);
  173. }
  174. void pecati() {
  175.     cout<<"Paket vino"<<endl;
  176.     cout<<"kolicina "<<kolicina<<", "<<procent_alkohol*100<<"% alkohol od po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
  177. }
  178. };
  179.  
  180. class Kamion {
  181. private:
  182.     char registracija[9];
  183.     char vozac[50];
  184.     ImaMasa ** niza;
  185.     int broj_elementi;
  186. public:
  187.     Kamion(char *reg,char *voz) {
  188.         if(!(isalpha(reg[0]) && isalpha(reg[1]) && isalpha(reg[7]) && isalpha(reg[6])))
  189.         throw 0;
  190.         strcpy(registracija,reg);
  191.         strcpy(vozac,voz);
  192.         niza=new ImaMasa*[10];
  193.         broj_elementi=0;
  194. }
  195. void setRegistracija(char* r) {
  196.     strcpy(registracija, r);
  197. }
  198. void setVozac(char* v) {
  199.     strcpy(vozac, v);
  200. }
  201. void setBroj(int b) {
  202.     broj_elementi= b;
  203. }
  204. Kamion(char *reg,char *voz,ImaMasa ** m,int broj) {
  205.     niza=new ImaMasa*[broj];
  206.     for(int i=0;i<broj;i++)
  207.     niza[i]=m[i];
  208.     broj_elementi=broj;
  209. }
  210. void dodadiElement(ImaMasa *n) {
  211.     ImaMasa ** pom=new ImaMasa*[broj_elementi+1];
  212.     for(int i=0;i<broj_elementi;i++) {
  213.         pom[i]=niza[i];
  214.     }
  215.     pom[broj_elementi]=n;
  216.     broj_elementi++;
  217.     niza=new ImaMasa*[broj_elementi];
  218.     for(int i=0;i<broj_elementi;i++) {
  219.         niza[i]=pom[i];
  220.     }
  221. }
  222. double vratiVkupnaMasa() {
  223.     double vkupno=0;
  224.     for(int i=0;i<broj_elementi;i++) {
  225.         vkupno+=niza[i]->vratiMasa();
  226.     }
  227.     return vkupno;
  228. }
  229. void pecati() {
  230.     cout<<"Kamion so registracija "<<registracija<<" i vozac "<< vozac<<" prenesuva: "<<endl;
  231.     for(int i=0;i<broj_elementi;i++) {
  232.         niza[i]->pecati();
  233.     }
  234. }
  235. Kamion pretovar(char *reg,char * voz) {
  236.     Kamion nov(reg,voz);
  237.     int max_i=0;
  238.     double max_masa=niza[0]->vratiMasa();
  239.     for(int i=0;i<broj_elementi;i++) {
  240.         if(niza[i]->vratiMasa()>max_masa) {
  241.             max_masa=niza[i]->vratiMasa();
  242.             max_i=i;
  243.         }
  244.     }
  245.     for(int i=0;i<broj_elementi;i++) {
  246.         if(i!=max_i)
  247.         nov.dodadiElement(niza[i]);
  248.     }
  249.     return nov;
  250.     }
  251. };
  252.  
  253. int main() {
  254.     char ime[20], reg[9];
  255.     double vol;
  256.     int kol;
  257.     bool g;
  258.     double proc;
  259. try {
  260.     cin>>reg;
  261.     cin>>ime;
  262.     Kamion A(reg, ime);
  263.     ImaMasa **d = new ImaMasa*[5];
  264.     cin>>vol>>kol;
  265.     cin>>g;
  266.     d[0] = new PaketSok(vol, kol, g);
  267.     cin>>vol>>kol;
  268.     cin>>proc;
  269.     d[1] = new PaketVino(vol, kol, proc);
  270.     cin>>vol>>kol;
  271.     cin>>proc;
  272.     d[2] = new PaketVino(vol, kol, proc);
  273.     cin>>vol>>kol;
  274.     cin>>g;
  275.     d[3] = new PaketSok(vol, kol, g);
  276.     cin>>vol>>kol;
  277.     cin>>proc;
  278.     d[4] = new PaketVino(vol, kol, proc);
  279.     A.dodadiElement(d[0]);
  280.     A.dodadiElement(d[1]);
  281.     A.dodadiElement(d[2]);
  282.     A.dodadiElement(d[3]);
  283.     A.dodadiElement(d[4]);
  284.     A.pecati();
  285.     cout<<"Vkupna masa: "<<A.vratiVkupnaMasa()<<endl;
  286.     cin>>reg;
  287.     cin>>ime;
  288.     Kamion B = A.pretovar(reg, ime);
  289.     B.pecati();
  290.     cout<<"Vkupna masa: "<<B.vratiVkupnaMasa()<<endl;
  291. }
  292. catch(int) {
  293.     cout<<"Pogresno vnesena registracija"<<endl;
  294. }
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement