Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. import os.simulation.Application;
  2. import os.simulation.AutoCreate;
  3. import os.simulation.Container;
  4. import os.simulation.Item;
  5. import os.simulation.Operation;
  6. import os.simulation.Thread;
  7.  
  8. /*
  9. * Na jednom seoskom vašaru, najinteresantnija atrakcija desetogodišnjacima je
  10. * velika trambolina starog Pere. Stari Pera je dobrog srca i pušta mališane da
  11. * se besplatno zabavljaju na njoj, na opštu radost njihovih roditelja. Mališa-
  12. * ni takođe koriste ovo i non-stop skaču na trambolini, silazeći jedino kada
  13. * se umore od skakanja kako bi se malo odmorili za novu rundu zabave.
  14. *
  15. * Nažalost, i trambolina starog Pere je dosta stara pa ne može izdržati više
  16. * od 300 kila. Prilikom implementacije rešenja imati ovo u vidu i ne dozvoliti
  17. * da se trambolina pokida. Potrebno je blokirati mališane koji žele da skaču
  18. * na trambolini ako bi ukupna težina prešla 300 kila.
  19. *
  20. * Zbog povećane mogućnosti povreda kada više dece skače na trambolini, stari
  21. * Pera ne dozvoljava da na njoj bude više od 5 dece. Takođe, ne terati mališa-
  22. * ne da nepotrebno čekaju ako ima mesta na trambolini.
  23. *
  24. * Dodatni deo
  25. *
  26. * Kako su dečaci nestašniji i manje paze da nekog slučajno ne udare tokom ska-
  27. * kanja, potrebno je odvojiti dečake i devojčice, tj. blokirati ulaz devojči-
  28. * cama ako na trambolini trenutno skaču dečaci, odnosno dečacima ako je trenu-
  29. * tno koriste devojčice.
  30. *
  31. * 2. SKACU SAMO DECAK I DEVOJCICA U JEDNOM TRENUTKU, U PARU SKACU
  32. */
  33.  
  34. class Trambolina {
  35. int brojac = 0; // ide do 2 samo
  36. boolean uslaDevojcica = false;
  37. int tezina = 0;
  38. }
  39.  
  40. public class DecaITrambolina extends Application {
  41.  
  42. protected final int MAX_TEZINA = 300;
  43. protected final int MAX_BR_DECE = 5;
  44.  
  45. protected enum Pol {
  46. MUSKI, ZENSKI;
  47. }
  48.  
  49. @AutoCreate(26)
  50. protected class Dete extends Thread {
  51.  
  52. final Trambolina trambolina = new Trambolina();
  53.  
  54. private final Pol pol = randomElement(Pol.values());
  55. private final int tezina = randomInt(25, 60);
  56.  
  57. public Dete() {
  58. setName(String.format("%4.1f kg", 1.0 * tezina));
  59. setColor(pol == Pol.MUSKI ? AZURE : ROSE);
  60. }
  61.  
  62. @Override
  63. protected void step() {
  64. odmara();
  65. // Sinhronizacija
  66. // Blokirati decu koja ne smeju trenutno da skacu
  67. try {
  68. synchronized(trambolina) {
  69. while (trambolina.tezina + this.tezina > 300 || trambolina.brojac + 1 > 2) {
  70. trambolina.wait();
  71. }
  72. trambolina.brojac++;
  73. trambolina.tezina += this.tezina;
  74. }
  75. } catch (InterruptedException e) {
  76.  
  77. }
  78. skace();
  79. // Sinhronizacija
  80. // Odblokirati one koji sada mogu da skacu
  81.  
  82. synchronized (trambolina) {
  83. trambolina.brojac--;
  84. trambolina.tezina -= this.tezina;
  85. trambolina.notifyAll();
  86. }
  87. }
  88. }
  89.  
  90. // ------------------- //
  91. // Sistemski deo //
  92. // ------------------- //
  93. // Ne dirati kod ispod //
  94. // ------------------- //
  95.  
  96. protected final Container van = box("Клупе").color(OLIVE);
  97. protected final Container unutra = box("Трамболина").color(ARMY);
  98. protected final Container main = column(van, unutra);
  99. protected final Operation dete = init().container(van).name("Дете %d").color(ORANGE);
  100.  
  101. protected final Operation odmaranje = duration("7±2").text("Одмара").textAfter("Чека");
  102. protected final Operation skakanje = duration("5±2").text("Скаче").container(unutra).update(this::azuriraj);
  103.  
  104. protected void odmara() {
  105. odmaranje.performUninterruptibly();
  106. }
  107.  
  108. protected void skace() {
  109. skakanje.performUninterruptibly();
  110. }
  111.  
  112. protected void azuriraj(Item item) {
  113. int br = 0;
  114. double tezina = 0.0;
  115. for (Dete dete : unutra.getItems(Dete.class)) {
  116. br += 1;
  117. tezina += dete.tezina;
  118. }
  119. unutra.setText(String.format("%4.2f kg / %d", tezina, br));
  120. if (tezina > MAX_TEZINA || br > MAX_BR_DECE) {
  121. unutra.setColor(MAROON);
  122. } else {
  123. unutra.setColor(ARMY);
  124. }
  125. }
  126.  
  127. @Override
  128. protected void initialize() {
  129. azuriraj(null);
  130. }
  131.  
  132. public static void main(String[] arguments) {
  133. launch("Деца и трамболина");
  134. }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement