Advertisement
ivafinki

Лаб вежба: Хеширање - Аптека Problem 4

Dec 20th, 2020
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.33 KB | None | 0 0
  1. /* Лаб вежба: Хеширање - Аптека Problem 4 */
  2. /* Потребно е да се направи компјутерска апликација со која ќе се забрза работењето на една аптека. Притоа апликацијата треба да му овозможи на корисникот (фармацевтот) брзо да пребарува низ огромното множество со лекови кои се внесени во системот. Начинот на кој тој треба да пребарува е следен: доволно е да ги внесе првите 3 букви од името на лекот за да може да му се излиста листа од лекови кои ги има во системот. Работата на фармацевтот е да провери дали внесениот лек го има во системот и да му даде информација на клиентот. Информацијата што треба да му ја даде на клиентот е дали лекот се наоѓа на позитивната листа на лекови, која е цената и колку парчиња од лекот има на залиха. Доколку лекот постои клиентот го нарачува со што кажува колку парчиња ќе купи. Оваа акција фармацевтот треба да ја евидентира на системот (односно да ја намали залихата на лекови за онолку парчиња колку што му издал на клиентот). Доколку нарачката на клиентот е поголема од залихата на лекот што ја има во системот, не се презема никаква акција.
  3.  
  4. Влез: Од стандарден влез прво се дава број N кој претставува број на лекови кои ќе бидат внесени во системот. Во наредните N реда се дадени имињата на лековите, дали ги има на позитивната листа (1/0), цената и број на парчиња, сите разделени со по едно празно место. Потоа се даваат редови со имиња на лекови и број на парчиња нарачани од клиентот. За означување на крај се дава зборот KRAJ.
  5.  
  6. Излез: На стандарден излез треба да се испечати за секој од влезовите следната информација: IME POZ/NEG CENA BR_LEKOVI. Доколку лекот не е најден се печати Nema takov lek. Доколку нарачката на клиентот е поголема од залихата се печати Nema dovolno lekovi инаку Napravena naracka.
  7.  
  8. Забелешка: Задачата да се реши со хeш табела. Функцијата со која се врши мапирање на имињата на лековите во број е следна: h(w)=(29∗(29∗(29∗0+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
  9.  
  10. Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
  11.  
  12. Име на класата: Apteka. */
  13. /* Sample input
  14. 20
  15. ACEROLA 0 100 1000
  16. ACIKLOVIR 1 1650 87
  17. ACIPAN 1 300 25
  18. ADIMICIN 0 500 0
  19. VENTOR 1 0 25
  20. VALSACOR 1 1090 10
  21. TYVERB 0 62696 1
  22. ULCODIN 1 47 100
  23. TRICAL 0 0 0
  24. RUBENS 0 2315 0
  25. IBALGIN 1 0 100
  26. HYDROCYKLIN 0 55 10
  27. GENTAMICIN 1 152 90
  28. FORTEO 1 0 0
  29. FORVITAC 1 0 150
  30. CHIROCAINE 1 0 10
  31. BRONLES 1 0 0
  32. BELOGENT 0 143 30
  33. BEDOXIN 1 0 100
  34. HYDROCYKLIN20 0 113 20
  35. hydroCyklinn
  36. 2
  37. hydroCyklin20
  38. 2
  39. KRAJ
  40.  
  41. Sample output
  42. Nema takov lek
  43. HYDROCYKLIN20
  44. NEG
  45. 113
  46. 20
  47. Napravena naracka */
  48.  
  49. import java.util.HashMap;
  50. import java.util.Hashtable;
  51. import java.util.Map;
  52. import java.util.Scanner;
  53.  
  54. public class Apteka {
  55.  
  56. public static void main(String[] args) {
  57.  
  58. Scanner scan = new Scanner(System.in);
  59. Map<CureName, Cure> table = new HashMap<>();
  60.  
  61. int n = scan.nextInt();
  62. scan.nextLine();
  63.  
  64. for (int i=0; i<n; ++i) {
  65. String line = scan.nextLine();
  66. String parts[] = line.split(" ");
  67. String name = parts[0];
  68. int positive = Integer.parseInt(parts[1]);
  69. int price = Integer.parseInt(parts[2]);
  70. int number = Integer.parseInt(parts[3]);
  71. Cure cure = new Cure(name, positive, price, number);
  72. CureName cureName = new CureName(name);
  73. table.put(cureName, cure);
  74. }
  75.  
  76. while (true) {
  77.  
  78. String name = scan.nextLine();
  79. if (name.equals("KRAJ"))
  80. break;
  81. int number = Integer.parseInt(scan.nextLine());
  82. CureName cureName = new CureName(name);
  83. if (table.containsKey(cureName)) {
  84. Cure cure = table.get(cureName);
  85. System.out.println(cure);
  86. if (cure.makeOrder(number))
  87. System.out.println("Napravena naracka");
  88. else
  89. System.out.println("Nema dovolno lekovi");
  90. }
  91. else
  92. System.out.println("Nema takov lek");
  93.  
  94. }
  95. }
  96. }
  97.  
  98. class Cure {
  99.  
  100. String name;
  101. int positive;
  102. int price;
  103. int number;
  104.  
  105. Cure(String name, int positive, int price, int number) {
  106. this.name = name.toUpperCase();
  107. this.positive = positive;
  108. this.price = price;
  109. this.number = number;
  110. }
  111.  
  112. String getPositive() {
  113. if (positive == 1)
  114. return "POZ";
  115. else
  116. return "NEG";
  117. }
  118.  
  119. boolean makeOrder(int n) {
  120. if (number >= n){
  121. number -=n;
  122. return true;
  123. }
  124. return false;
  125. }
  126.  
  127. @Override
  128. public String toString() {
  129. StringBuilder sb = new StringBuilder();
  130. sb.append(name + "\n");
  131. sb.append(getPositive() + "\n");
  132. sb.append(price + "\n");
  133. sb.append(number);
  134. return sb.toString();
  135. }
  136.  
  137.  
  138. }
  139.  
  140. class CureName {
  141.  
  142. String name;
  143.  
  144. public CureName(String name){
  145. this.name = name.toUpperCase();
  146. }
  147.  
  148. @Override
  149. public int hashCode() {
  150. return (29 * (29 * (29 * 0 + name.charAt(0)) + name.charAt(1))+ name.charAt(2)) % 102780;
  151. }
  152.  
  153. @Override
  154. public boolean equals(Object obj) {
  155. if (this == obj)
  156. return true;
  157. if (obj == null)
  158. return false;
  159. if (getClass() != obj.getClass())
  160. return false;
  161. CureName other = (CureName) obj;
  162. if (name == null) {
  163. if (other.name != null)
  164. return false;
  165. } else if (!name.equals(other.name))
  166. return false;
  167. return true;
  168. }
  169. }
  170.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement