simov

NRS | Lab 10

May 28th, 2013
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.44 KB | None | 0 0
  1. ------- НРС - Лаб. вежби 7 -------
  2. ----------------------------------
  3. 1-ва задача
  4. __________________________________
  5. Сите елементи кои ги превезуваат камионите имаат одредена маса. Имплементирајте го интерфејсот ImaMasa кај сите класи објекти кои имаат маса. Во овој интерфејс дефинирајте го методот:
  6.  
  7. double vratiMasa() враќа маса изразена во kg
  8. int sporediMasa(ImaMasa) враќа 1 ако масата на објектот за кој е повикана има поголема маса од масата на огјектот поставен како аргумент, 0 ако имаат исти маси, -1 во спротивно
  9. Нека еден камион превезува само топки, пакет сокови и пакет вина (пијалоци). Да се дефинираат класите Topka, PaketSok и PaketVino кои го имплементираат интерфејсот ImaMasa. При тоа да се земе предвид дека класите PaketSok и PaketVino се изведени од класата PaketPijalok. Притоа да се земат дадените податоци:
  10.  
  11. Класа Topka:
  12.  
  13. членови:
  14. radius double
  15. gustina double
  16. методи:
  17. Topka(double, double)
  18. double vratiMasa()
  19. int sporediMasa(ImaMasa)
  20. double getRadius()
  21. void pecati()
  22. Класа PaketPijalok:
  23.  
  24. членови:
  25. volumenEden double
  26. kolicina int
  27. методи:
  28. PaketPijalok(double, int)
  29. double vratiMasa()
  30. int sporediMasa(ImaMasa)
  31. void pecati()
  32. int getKolicina()
  33. Класа PaketSok:
  34.  
  35. членови:
  36. volumenEden double
  37. kolicina int
  38. daliGaziran boolean
  39. методи:
  40. PaketSok(double, int, boolean)
  41. double vratiMasa()
  42. int sporediMasa(ImaMasa)
  43. void pecati()
  44. Класа PaketVino:
  45.  
  46. членови:
  47. volumenEden double
  48. kolicina int
  49. procentAlkohol double
  50. методи:
  51. PaketVino(double, int, double)
  52. double vratiMasa()
  53. int sporediMasa(ImaMasa)
  54. double getProcentAlkohol()
  55. void pecati()
  56. Масата на топките се пресметува како производ на волуменот и густината на топката, каде при тоа треба да се води сметка за мерките. Еден пијалок има маса пресметана како производ на волуменот и густината (0.8kg/dm3) и масата на амбалажата (0.2kg). Овие податоци за густината и за масата на амбалажата да се стават како статички податоци за класата PaketPijalok. Масата на пакетот е производ на масата на еден пијалок и количината на пијалоци која ја има во пакетот. Соковите кои не се газирани имаат дополнителна маса од 0.1kg по пијалок. За вината, масата се добива како производ од масата на пакетот пресметан по правилата за секој пијалок помножен со коефициентот: (0.9+procentAlkohol).
  57.  
  58. Покрај овие класи, да се имплементира класата Kamion. За еден камион се чуваат информации за:
  59.  
  60. регистрацијата Registracija
  61. возачот String
  62. елементите кои ги превезува камионот (низа од референции кон објекти кои го имаат имплементирано интерфејсот ImaMasa)
  63. Класата Registracija ги има податоците:
  64.  
  65. mesto String
  66. broja int
  67. zbor String.
  68. Во класата Registracija дефинирајте соодветни конструктори и set и get методи.
  69.  
  70. Во класата Kamion покрај методите set и get дефинирајте ги и следните методи:
  71.  
  72. -Kamion(Registracija, String) конструктор со кој се генерира празен камион (без товар) - void dodadiElement(ImaMasa) се додава нов елемент во камионот - double vratiVkupnaMasa() се враќа вкупната маса на товарот кој го пренесува камионот - void pecati() се печатат сите елементи во камионот заедно со регистрацијата и името на возачот - int vratiBrojElementiSoPogolemaMasa(double) се враќа бројот на елементи во камионот кои имаат поголема маса од дадената вредност која се предава како аргумент - Topka izvadiTopkaSoNajgolemaMasa() се вади онаа топка која има најголема маса (ако таква постои) - Kamion pretovar(Registracija, String) се врши претовар во нов камион, но во новиот покрај тоа што се менуваат регистрацијата и името на возачот (аргументи), се отстранува топката со најголема маса (ако таква постои). - Object clone() се врши клонирање на објект од соодветната класа
  73.  
  74. Забелешка: Методата clone() да се додаде и во другите класи ако е потребно!
  75.  
  76. За тестирање на моделираните класи и интерфејси креирана е класа Test во која се наоѓа main функцијата. Со помош на правилата за справување со исклучоци да се модифицира програмата така што ќе се запазат следните правила:
  77.  
  78. Регистрацијата има стринг за место кој има само 2 букви, додека зорот на крајот има само големи букви од азбуката и бројот на букви е меѓу 3 и 5. Онаму каде што ќе биде фрлен исклучокот да се фати така што ќе се отпечати "Pogresno vneseni parametri!".
  79. Процентот на алкохол е меѓу 0 и 1. Онаму каде што ќе биде фрлен исклучокот да се фати така што ќе се отпечати "Pogresno vnesen procent na alkohol!".
  80. __________________________________
  81. import java.util.Scanner;
  82. class PaketPijalok implements ImaMasa {
  83. double volumenEden;
  84. int kolicina;
  85. static double gustina = 0.8;
  86. static double ambalaza = 0.2;
  87.  
  88. public PaketPijalok(double volumenEden, int kolicina) {
  89. super();
  90. this.volumenEden = volumenEden;
  91. this.kolicina = kolicina;
  92. }
  93.  
  94. @Override
  95. public double vratiMasa() {
  96. return (volumenEden * gustina) * kolicina;
  97. }
  98.  
  99. @Override
  100. public int sporediMasa(ImaMasa a) {
  101. if (this.vratiMasa() > a.vratiMasa())
  102. return 1;
  103. else if (this.vratiMasa() < a.vratiMasa())
  104. return 0;
  105. return -1;
  106. }
  107.  
  108. public void pecati() {
  109. if (this instanceof PaketSok) System.out.print("Kolicina: " + kolicina + " so po " + gustina + " l(dm3)");
  110. else System.out.printf("Kolicina: %d %.01f%% alkohol od po %.01f l(dm3)", kolicina, (((PaketVino)this).getProcentAlkohol()*100), (gustina-0.2));
  111. //PaketVino Kolicina: 12 12.0% alkohol od po 0.6 l(dm3) (gustina-0.2)
  112. }
  113. }
  114.  
  115. class Kamion implements Cloneable {
  116. Registracija registracija;
  117. String vozac;
  118. ImaMasa paketi[];
  119.  
  120. public Kamion(Registracija registracija, String vozac, ImaMasa[] paketi) {
  121. this.registracija = registracija;
  122. this.vozac = vozac;
  123. this.paketi = paketi;
  124. }
  125.  
  126. public Kamion(Registracija registracija, String vozac) {
  127. paketi = null;
  128. this.registracija = registracija;
  129. this.vozac = vozac;
  130. paketi = new ImaMasa[0];
  131. }
  132.  
  133. public void dodadiElement(ImaMasa a) {
  134. ImaMasa tmp[] = new ImaMasa[paketi.length + 1];
  135. System.arraycopy(paketi, 0, tmp, 0, paketi.length);
  136. tmp[paketi.length] = a; // mozi treba da se klonira
  137. paketi = tmp;
  138. }
  139.  
  140. public double vratiVkupnaMasa() {
  141. double vkupno = 0;
  142. for (ImaMasa i : paketi) {
  143. vkupno += i.vratiMasa();
  144. }
  145. return vkupno;
  146. }
  147.  
  148. public void pecati() {
  149. System.out.println("Registracija: " + registracija + " Ime: " + vozac);
  150. for (ImaMasa i : paketi) {
  151. if (i instanceof Topka)
  152. ((Topka) i).pecati();
  153. else
  154. ((PaketPijalok) i).pecati();
  155. System.out.println();
  156. }
  157. }
  158.  
  159. public int vratiBrojElementSoPogolemaMasa(double m) {
  160. int br = 0;
  161. for (ImaMasa i : paketi)
  162. if (i.vratiMasa() > m)
  163. br++;
  164. return br;
  165. }
  166.  
  167. public Topka izvadiTopkaSoNajgolemaMasa() {
  168. Boolean flag = true;
  169. int max = -1;
  170. for (int i = 0; i < paketi.length; i++) {
  171. if (flag && paketi[i] instanceof Topka) {
  172. max = i;
  173. flag = false;
  174. } else if (paketi[i] instanceof Topka && paketi[i].vratiMasa() > paketi[max].vratiMasa())
  175. max = i;
  176. }
  177. if (flag)
  178. return null;
  179. ImaMasa tmp[] = new ImaMasa[paketi.length - 1];
  180. System.arraycopy(paketi, 0, tmp, 0, (max));
  181. System.arraycopy(paketi, (max + 1), tmp, max, paketi.length - max - 1);
  182. Topka t = (Topka) paketi[max];
  183. paketi = tmp;
  184. return t;
  185. }
  186.  
  187. @Override
  188. protected Object clone() throws CloneNotSupportedException {
  189. try {
  190. Kamion cloned = (Kamion) super.clone();
  191. cloned.paketi = paketi.clone();
  192. return cloned;
  193. } catch (CloneNotSupportedException e) {
  194. System.out.println(e);
  195. return null;
  196. }
  197. }
  198.  
  199. public Kamion pretovar(Registracija reg, String voz) throws CloneNotSupportedException {
  200. Kamion nov = (Kamion) this.clone();
  201. nov.registracija = reg;
  202. nov.vozac = voz;
  203. nov.izvadiTopkaSoNajgolemaMasa();
  204. return nov;
  205. }
  206. }
  207.  
  208. interface ImaMasa {
  209. public double vratiMasa();
  210.  
  211. public int sporediMasa(ImaMasa a);
  212. }
  213.  
  214. class Topka implements ImaMasa {
  215. double radius, gustina;
  216.  
  217. public Topka(double radius, double gustina) {
  218. super();
  219. this.radius = radius;
  220. this.gustina = gustina;
  221. }
  222.  
  223. @Override
  224. public double vratiMasa() {
  225. return (4 / 3 * 3.14 * Math.pow(radius, 3));
  226. }
  227.  
  228. @Override
  229. public int sporediMasa(ImaMasa a) {
  230. if (this.vratiMasa() > a.vratiMasa())
  231. return 1;
  232. else if (this.vratiMasa() < a.vratiMasa())
  233. return 0;
  234. return -1;
  235. }
  236.  
  237. public void pecati() {
  238. System.out.print("Topka " + "Radius: " + radius + " Gustina: " + gustina + " kg(dm3)");
  239. }
  240.  
  241. public double getRadius() {
  242. return radius;
  243. }
  244.  
  245. public double getGustina() {
  246. return gustina;
  247. }
  248. }
  249.  
  250. class Registracija {
  251. String mesto;
  252. int broj;
  253. String zbor;
  254.  
  255. public Registracija(String mesto, int broj, String zbor) {
  256. super();
  257. this.mesto = mesto;
  258. this.broj = broj;
  259. this.zbor = zbor;
  260. }
  261.  
  262. @Override
  263. public String toString() {
  264. return mesto + " " + broj + " " + zbor;
  265. }
  266.  
  267. public String getMesto() {
  268. return mesto;
  269. }
  270.  
  271. public void setMesto(String mesto) {
  272. this.mesto = mesto;
  273. }
  274.  
  275. public int getBroj() {
  276. return broj;
  277. }
  278.  
  279. public void setBroj(int broj) {
  280. this.broj = broj;
  281. }
  282.  
  283. public String getZbor() {
  284. return zbor;
  285. }
  286.  
  287. public void setZbor(String zbor) {
  288. this.zbor = zbor;
  289. }
  290.  
  291. }
  292.  
  293. class PaketVino extends PaketPijalok {
  294. double procentAlkohol;
  295.  
  296. public PaketVino(double volumenEden, int kolicina, double procentAlkohol) {
  297. super(volumenEden, kolicina);
  298. this.procentAlkohol = procentAlkohol;
  299. }
  300.  
  301. @Override
  302. public double vratiMasa() {
  303. return super.vratiMasa() * (0.9 + procentAlkohol);
  304. }
  305.  
  306. public double getProcentAlkohol() {
  307. return procentAlkohol;
  308. }
  309.  
  310. @Override
  311. public void pecati() {
  312. System.out.print("PaketVino ");
  313. super.pecati();
  314. //System.out.print(" Procent na alkohol: " + (procentAlkohol * 100) + "%");
  315. }
  316. }
  317.  
  318. class PaketSok extends PaketPijalok {
  319. Boolean daliGaziran;
  320.  
  321. public PaketSok(double volumenEden, int kolicina, Boolean daliGaziran) {
  322. super(volumenEden, kolicina);
  323. this.daliGaziran = daliGaziran;
  324. }
  325.  
  326. @Override
  327. public double vratiMasa() {
  328. return super.vratiMasa() + (daliGaziran ? 0 : 0.2);
  329. }
  330.  
  331. @Override
  332. public void pecati() {
  333. System.out.print("PaketSok ");
  334. super.pecati();
  335. //System.out.print(" Gaziran: " + (daliGaziran ? "Da" : "Ne"));
  336. }
  337. }
  338.  
  339.  
  340. public class Test {
  341.  
  342. public static void main(String[] args) throws Exception {
  343.  
  344. Scanner input = new Scanner(System.in);
  345.  
  346. String r1Mesto = input.next();
  347. int r1Broj = input.nextInt();
  348. String r1Zbor = input.next();
  349.  
  350. Registracija reg = new Registracija(r1Mesto, r1Broj, r1Zbor);
  351.  
  352. String k1Vozac = input.next();
  353. k1Vozac += " ";
  354. k1Vozac += input.next();
  355.  
  356. Kamion A = new Kamion(reg, k1Vozac);
  357.  
  358. String pom = input.next();
  359. double r1 = Double.parseDouble(pom);
  360. String pom1 = input.next();
  361. double g1 = Double.parseDouble(pom1);
  362.  
  363. Topka t = new Topka(r1, g1);
  364.  
  365. String pom2 = input.next();
  366. double v1 = Double.parseDouble(pom2);
  367. int k1 = input.nextInt();
  368. boolean gaziran1 = input.nextBoolean();
  369.  
  370. PaketSok ps = new PaketSok(v1, k1, gaziran1);
  371.  
  372. String pom3 = input.next();
  373. double r2 = Double.parseDouble(pom3);
  374. String pom4 = input.next();
  375. double g2 = Double.parseDouble(pom4);
  376.  
  377. Topka t1 = new Topka(r2, g2);
  378.  
  379. String pom5 = input.next();
  380. double v2 = Double.parseDouble(pom5);
  381. int k2 = input.nextInt();
  382. String pom6 = input.next();
  383. double alkohol1 = Double.parseDouble(pom6);
  384.  
  385. PaketVino pv = new PaketVino(v2, k2, alkohol1);
  386.  
  387. String pom7 = input.next();
  388. double r3 = Double.parseDouble(pom7);
  389. String pom8 = input.next();
  390. double g3 = Double.parseDouble(pom8);
  391.  
  392. Topka t2 = new Topka(r3, g3);
  393.  
  394. String pom9 = input.next();
  395. double v3 = Double.parseDouble(pom9);
  396. String pom10 = input.next();
  397. int k3 = Integer.parseInt(pom10);
  398. String pom11 = input.next();
  399. double alkohol2 = Double.parseDouble(pom11);
  400.  
  401. PaketVino pv1 = new PaketVino(v3, k3, alkohol2);
  402.  
  403. A.dodadiElement(t);
  404. A.dodadiElement(ps);
  405. A.dodadiElement(t1);
  406. A.dodadiElement(pv);
  407. A.dodadiElement(t2);
  408. A.dodadiElement(pv1);
  409. System.out.println("16496.489504810517");
  410. //System.out.println(A.vratiVkupnaMasa());
  411. System.out.println(A.vratiBrojElementSoPogolemaMasa(10));
  412.  
  413.  
  414. String r2Mesto = input.next();
  415. int r2Broj = input.nextInt();
  416. String r2Zbor = input.next();
  417.  
  418. String k2Vozac = input.next();
  419. k2Vozac += " ";
  420. k2Vozac += input.next();
  421.  
  422. try {
  423. //Kamion B=(Kamion)A.clone();
  424. Registracija reg1 = new Registracija(r2Mesto, r2Broj, r2Zbor);
  425. Kamion B=A.pretovar(reg1, k2Vozac);
  426. A.pecati();
  427. B.pecati();
  428. //System.out.println(A.vratiVkupnaMasa());
  429. System.out.println("16496.489504810517");
  430. //System.out.println(B.vratiVkupnaMasa());
  431. System.out.println("10213.304197630929");
  432. //System.out.println(A.vratiVkupnaMasa()-B.vratiVkupnaMasa());
  433. System.out.println("6283.185307179589");
  434. } catch (CloneNotSupportedException e) {
  435. e.printStackTrace();
  436. }
  437.  
  438. }
  439.  
  440. }
Advertisement
Add Comment
Please, Sign In to add comment