Safiron

ALG

Apr 21st, 2014
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.64 KB | None | 0 0
  1. // Autor:   Laco Super
  2. // Skupina: 2
  3. // Zadání:  6 - Vyložení vlaků
  4.  
  5. #include <iostream>
  6. #include "Vagon.h"
  7. #include "Zasobnik.h"
  8.  
  9. using namespace std;
  10.  
  11. // Konstanty ze zadání
  12. const int C1 = 100;         // Minimální cena položky
  13. const int C2 = 1000;        // Maximální cena položky
  14. const int N = 5;            // Počet vagónů
  15. const int P = 2;            // Maximální počet položek
  16.  
  17. // Zásobníky
  18. Zasobnik vlak(N);
  19. Zasobnik levneVagony(N);    // Maximální cena nákladu vagonu = 1/3 maximální ceny nákladu (C2 x P)
  20. Zasobnik drazsiVagony(N);
  21. Zasobnik ostatniVagony(N);
  22.  
  23.  
  24. Vagon vygenerujVagon(int cisloVagonu);
  25. void vygenerujVlak();
  26. void rozdelVagony();
  27. void vylozVagony();
  28. void vylozVagony2();
  29.  
  30.  
  31. int main()
  32. {
  33.     srand((unsigned int) time(NULL)); // reset hodin pro generování nahodnych čísel
  34.    
  35.     vygenerujVlak();
  36.     rozdelVagony();
  37.     vylozVagony2();
  38.     return 0;
  39. }
  40.  
  41. // 3 zásobniky, procházet dokud všechny nejsou prázdné - do while - all empty
  42. void vylozVagony2()
  43. {
  44.     do
  45.     {
  46.         Vagon levnyVagon;
  47.         Vagon drazsiVagon;
  48.         Vagon ostatniVagon;
  49.        
  50.         if(!levneVagony.empty())
  51.         {
  52.             levnyVagon = levneVagony.pop();
  53.         }
  54.         else
  55.         {
  56.             Vagon *p = &levnyVagon;
  57.             p = NULL;
  58.         }
  59.        
  60.         if(!drazsiVagony.empty())
  61.         {
  62.             drazsiVagon = drazsiVagony.pop();
  63.         }
  64.         else
  65.         {
  66.             Vagon *p = &drazsiVagon;
  67.             p = NULL;
  68.         }
  69.        
  70.         if(!ostatniVagony.empty())
  71.         {
  72.             ostatniVagon = ostatniVagony.pop();
  73.         }
  74.         else
  75.         {
  76.             Vagon *p = &ostatniVagon;
  77.             p = NULL;
  78.         }
  79.        
  80.         do
  81.         {
  82.             if(&levnyVagon != NULL && levnyVagon.PocetPolozek() > 0)
  83.             {
  84.                 levnyVagon.VylozitPolozku();
  85.                 cout << "V" << levnyVagon.Cislo() << "[" << levnyVagon.PocetPolozek() << "]" << endl;
  86.                
  87.                 if (levnyVagon.PocetPolozek() == 0)
  88.                 {
  89.                     vlak.push(levnyVagon);
  90.                     cout  << "X" << levnyVagon.Cislo() << "[1]" << endl << endl;
  91.                 }
  92.             }
  93.  
  94.            
  95.             if(&drazsiVagon != NULL && drazsiVagon.PocetPolozek() > 0)
  96.             {
  97.                 drazsiVagon.VylozitPolozku();
  98.                 cout << "V" << drazsiVagon.Cislo() << "[" << drazsiVagon.PocetPolozek() << "]" << endl;
  99.                 if (drazsiVagon.PocetPolozek() == 0)
  100.                 {
  101.                     vlak.push(drazsiVagon);
  102.                     cout << "X" << drazsiVagon.Cislo() << "[2]" << endl << endl;
  103.                 }
  104.             }
  105.  
  106.            
  107.             if(&ostatniVagon != NULL && ostatniVagon.PocetPolozek() > 0)
  108.             {
  109.                 ostatniVagon.VylozitPolozku();
  110.                 cout << "V" << ostatniVagon.Cislo() << "[" << ostatniVagon.PocetPolozek() << "]" << endl;
  111.                
  112.                 if (ostatniVagon.PocetPolozek() == 0)
  113.                 {
  114.                     vlak.push(ostatniVagon);
  115.                     cout << "X" << ostatniVagon.Cislo() << "[3]" << endl << endl;
  116.                 }
  117.             }
  118.  
  119.            
  120.         }
  121.         while ((&levnyVagon == NULL || levnyVagon.PocetPolozek() == 0) && (&drazsiVagon == NULL || drazsiVagon.PocetPolozek() == 0) && (&ostatniVagon == NULL || ostatniVagon.PocetPolozek() == 0));
  122.        
  123.     }
  124.     while (!(levneVagony.empty() && drazsiVagony.empty() && ostatniVagony.empty()));
  125. }
  126.  
  127.  
  128.  
  129.  
  130. // Projde všechny tři zasobniky s vagony a postupně je vyloží, po vyložení vagonu připojí vagon do vlaku
  131. void vylozVagony()
  132. {
  133.     Vagon temp;
  134.     Vagon temp1;
  135.     Vagon temp2;
  136.    
  137.     do
  138.     {
  139.         if(!levneVagony.empty())
  140.         {
  141.             temp = levneVagony.pop();
  142.         }
  143.         if(!drazsiVagony.empty())
  144.         {
  145.             temp1 = drazsiVagony.pop();
  146.         }
  147.         if(!ostatniVagony.empty())
  148.         {
  149.             temp2 = ostatniVagony.pop();
  150.         }
  151.  
  152.         do
  153.         {
  154.  
  155.             if (!levneVagony.empty())
  156.             {
  157.                 if(temp.PocetPolozek() > 0)
  158.                 {
  159.                     temp.VylozitPolozku();
  160.                     cout << "V" << temp.Cislo() << "[" << temp.PocetPolozek() << "]" << endl << endl;
  161.                     cout << endl;
  162.                 }
  163.                 else if (temp.PocetPolozek() == 0)
  164.                 {
  165.                     vlak.push(temp);
  166.                     cout << endl << endl << "Vagonu vylozen: " << "X" << temp.Cislo() << "[1]" << endl;
  167.                 }
  168.             }
  169.            
  170.  
  171.             if (!drazsiVagony.empty())
  172.             {
  173.                 if(temp1.PocetPolozek() > 0)
  174.                 {
  175.                     temp1.VylozitPolozku();
  176.                     cout << "V" << temp1.Cislo() << "[" << temp1.PocetPolozek() << "]" << endl;
  177.                     cout << endl;
  178.                 }
  179.                 else if (temp1.PocetPolozek() == 0)
  180.                 {
  181.                     vlak.push(temp1);
  182.                     cout << endl << endl << "Vagonu vylozen: " << "X" << temp1.Cislo() << "[2]" << endl;
  183.                 }
  184.             }
  185.            
  186.             if (!ostatniVagony.empty())
  187.             {
  188.                 if(temp2.PocetPolozek() > 0)
  189.                 {
  190.                     temp2.VylozitPolozku();
  191.                     cout << "V" << temp2.Cislo() << "[" << temp2.PocetPolozek() << "]" << endl;
  192.                     cout << endl;
  193.                 }
  194.                 else if (temp2.PocetPolozek() == 0)
  195.                 {
  196.                     vlak.push(temp2);
  197.                     cout << endl << endl << "Vagonu vylozen: " << "X" << temp2.Cislo() << "[3]" << endl;
  198.                 }
  199.             }
  200.         }
  201.         // cyklus končí jsou li všechny vagony prazdne nebo jsou li, všechny položky prazdne
  202.         while ( (temp.PocetPolozek() != 0 || levneVagony.empty()) && (temp1.PocetPolozek() != 0 || drazsiVagony.empty()) && (temp2.PocetPolozek() != 0 || ostatniVagony.empty()));
  203.        
  204.     }
  205.     while(levneVagony.empty() && drazsiVagony.empty() && ostatniVagony.empty());
  206. }
  207.  
  208.  
  209.  
  210.  
  211. //vygeneruje vlak - přidá objekty do zásobníku
  212. void vygenerujVlak()
  213. {
  214.     cout << "Vlak vygenerovan:" << endl << endl;
  215.    
  216.     for(int i = 0; i < N; i++)
  217.     {
  218.         vlak.push(vygenerujVagon(i));
  219.     }
  220.    
  221. }
  222.  
  223. // rozdělí vagony do jednotlivych zasobniku podle ceny nákladu
  224. void rozdelVagony()
  225. {
  226.     Vagon temp;
  227.     int maxCenaNakladu;
  228.    
  229.     cout << endl << endl << "Rozdeleni vagonu do zasobniku" << endl << endl;
  230.    
  231.     for(int i = 0; i < N; i++)
  232.     {
  233.         temp = vlak.pop();
  234.         maxCenaNakladu = temp.PocetPolozek() * C2;
  235.        
  236.         if (temp.CenaNakladu() <= (maxCenaNakladu * 0.3))
  237.         {
  238.             levneVagony.push(temp);
  239.             cout << "Z" << temp.Cislo() << "[1]" << endl;
  240.            
  241.         }
  242.         else if (temp.CenaNakladu() > (maxCenaNakladu * 0.3) && temp.CenaNakladu() < (maxCenaNakladu * 0.6))
  243.         {
  244.             drazsiVagony.push(temp);
  245.             cout << "Z" << temp.Cislo() << "[2]" << endl;
  246.         }
  247.         else
  248.         {
  249.             ostatniVagony.push(temp);
  250.             cout << "Z" << temp.Cislo() << "[3]" << endl;
  251.         }
  252.     }
  253.     cout << endl << endl << endl;
  254. }
  255.  
  256. // vygeneruje jeden vagon
  257. Vagon vygenerujVagon(int cisloVagonu)
  258. {
  259.  
  260.     int cenaPolozky = C1 + (rand() % ( C2 - C1 + 1 ) );
  261.     int pocetPolozek = rand() % P + 1;
  262.    
  263.     cout << "G" << cisloVagonu << "[" << pocetPolozek << "]" << "[" << cenaPolozky<< "]" << endl;
  264.     return Vagon(cisloVagonu, pocetPolozek, cenaPolozky);
  265. }
Advertisement
Add Comment
Please, Sign In to add comment