Advertisement
fensa08

#APS Lab 4/6

Dec 1st, 2019
1,270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.57 KB | None | 0 0
  1.  
  2. Аптека Problem 4 (0 / 2)
  3.  
  4. Потребно е да се направи компјутерска апликација со која ќе се забрза работењето на една аптека. Притоа апликацијата треба да му овозможи на корисникот (фармацевтот) брзо да пребарува низ огромното множество со лекови кои се внесени во системот. Начинот на кој тој треба да пребарува е следен: доволно е да ги внесе првите 3 букви од името на лекот за да може да му се излиста листа од лекови кои ги има во системот. Работата на фармацевтот е да провери дали внесениот лек го има во системот и да му даде информација на клиентот. Информацијата што треба да му ја даде на клиентот е дали лекот се наоѓа на позитивната листа на лекови, која е цената и колку парчиња од лекот има на залиха. Доколку лекот постои клиентот го нарачува со што кажува колку парчиња ќе купи. Оваа акција фармацевтот треба да ја евидентира на системот (односно да ја намали залихата на лекови за онолку парчиња колку што му издал на клиентот). Доколку нарачката на клиентот е поголема од залихата на лекот што ја има во системот, не се презема никаква акција.
  5.  
  6. Влез: Од стандарден влез прво се дава број N кој претставува број на лекови кои ќе бидат внесени во системот. Во наредните N реда се дадени имињата на лековите, дали ги има на позитивната листа (1/0), цената и број на парчиња, сите разделени со по едно празно место. Потоа се даваат редови со имиња на лекови и број на парчиња нарачани од клиентот. За означување на крај се дава зборот KRAJ.
  7.  
  8. Излез: На стандарден излез треба да се испечати за секој од влезовите следната информација: IME POZ/NEG CENA BR_LEKOVI. Доколку лекот не е најден се печати Nema takov lek. Доколку нарачката на клиентот е поголема од залихата се печати Nema dovolno lekovi инаку Napravena naracka.
  9.  
  10. Забелешка: Задачата да се реши со хeш табела. Функцијата со која се врши мапирање на имињата на лековите во број е следна: h(w)=(29(29(290+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
  11.  
  12. Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
  13.  
  14. Име на класата: Apteka.
  15.  
  16.  
  17.  
  18. =======================================================================================================================================
  19.  
  20. import java.io.BufferedReader;
  21. import java.io.IOException;
  22. import java.io.InputStreamReader;
  23. import java.nio.Buffer;
  24.  
  25. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  26.  
  27.     // Each MapEntry object is a pair consisting of a key (a Comparable
  28.     // object) and a value (an arbitrary object).
  29.     K key;
  30.     E value;
  31.  
  32.     public MapEntry (K key, E val) {
  33.         this.key = key;
  34.         this.value = val;
  35.     }
  36.  
  37.     public int compareTo (K that) {
  38.         // Compare this map entry to that map entry.
  39.         @SuppressWarnings("unchecked")
  40.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  41.         return this.key.compareTo(other.key);
  42.     }
  43.  
  44.     public String toString () {
  45.         return "<" + key + "," + value + ">";
  46.     }
  47. }
  48.  
  49. class OBHT<K extends Comparable<K>,E> {
  50.  
  51.     // An object of class OBHT is an open-bucket hash table, containing entries
  52.     // of class MapEntry.
  53.     private MapEntry<K,E>[] buckets;
  54.  
  55.     // buckets[b] is null if bucket b has never been occupied.
  56.     // buckets[b] is former if bucket b is formerly-occupied
  57.     // by an entry that has since been deleted (and not yet replaced).
  58.  
  59.     static final int NONE = -1; // ... distinct from any bucket index.
  60.  
  61.     private static final MapEntry former = new MapEntry(null, null);
  62.     // This guarantees that, for any genuine entry e,
  63.     // e.key.equals(former.key) returns false.
  64.  
  65.     private int occupancy = 0;
  66.     // ... number of occupied or formerly-occupied buckets in this OBHT.
  67.  
  68.     @SuppressWarnings("unchecked")
  69.     public OBHT (int m) {
  70.         // Construct an empty OBHT with m buckets.
  71.         buckets = (MapEntry<K,E>[]) new MapEntry[m];
  72.     }
  73.  
  74.  
  75.     private int hash (K key) {
  76.         // Translate key to an index of the array buckets.
  77.         return Math.abs(key.hashCode()) % buckets.length;
  78.     }
  79.  
  80.     public MapEntry getBucket(int key){
  81.         return buckets[key];
  82.     }
  83.  
  84.  
  85.     public int search (K targetKey) {
  86.         // Find which if any bucket of this OBHT is occupied by an entry whose key
  87.         // is equal to targetKey. Return the index of that bucket.
  88.         int b = hash(targetKey); int n_search=0;
  89.         for (;;) {
  90.             MapEntry<K,E> oldEntry = buckets[b];
  91.             if (oldEntry == null)
  92.                 return NONE;
  93.             else if (targetKey.equals(oldEntry.key))
  94.                 return b;
  95.             else
  96.             {
  97.                 b = (b + 1) % buckets.length;
  98.                 n_search++;
  99.                 if(n_search==buckets.length)
  100.                     return NONE;
  101.  
  102.             }
  103.         }
  104.     }
  105.  
  106.  
  107.     public void insert (K key, E val) {
  108.         // Insert the entry <key, val> into this OBHT.
  109.         MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  110.         int b = hash(key); int n_search=0;
  111.         for (;;) {
  112.             MapEntry<K,E> oldEntry = buckets[b];
  113.             if (oldEntry == null) {
  114.                 if (++occupancy == buckets.length) {
  115.                     System.out.println("Hash tabelata e polna!!!");
  116.                 }
  117.                 buckets[b] = newEntry;
  118.                 return;
  119.             }
  120.             else if (oldEntry == former
  121.                     || key.equals(oldEntry.key)) {
  122.                 buckets[b] = newEntry;
  123.                 return;
  124.             }
  125.             else
  126.             {
  127.                 b = (b + 1) % buckets.length;
  128.                 n_search++;
  129.                 if(n_search==buckets.length)
  130.                     return;
  131.  
  132.             }
  133.         }
  134.     }
  135.  
  136.  
  137.     @SuppressWarnings("unchecked")
  138.     public void delete (K key) {
  139.         // Delete the entry (if any) whose key is equal to key from this OBHT.
  140.         int b = hash(key); int n_search=0;
  141.         for (;;) {
  142.             MapEntry<K,E> oldEntry = buckets[b];
  143.  
  144.             if (oldEntry == null)
  145.                 return;
  146.             else if (key.equals(oldEntry.key)) {
  147.                 buckets[b] = former;//(MapEntry<K,E>)former;
  148.                 return;
  149.             }
  150.             else{
  151.                 b = (b + 1) % buckets.length;
  152.                 n_search++;
  153.                 if(n_search==buckets.length)
  154.                     return;
  155.  
  156.             }
  157.         }
  158.     }
  159.  
  160.  
  161.     public String toString () {
  162.         String temp = "";
  163.         for (int i = 0; i < buckets.length; i++) {
  164.             temp += i + ":";
  165.             if (buckets[i] == null)
  166.                 temp += "\n";
  167.             else if (buckets[i] == former)
  168.                 temp += "former\n";
  169.             else
  170.                 temp += buckets[i] + "\n";
  171.         }
  172.         return temp;
  173.     }
  174.  
  175.  
  176.     public OBHT<K,E> clone () {
  177.         OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
  178.         for (int i = 0; i < buckets.length; i++) {
  179.             MapEntry<K,E> e = buckets[i];
  180.             if (e != null && e != former)
  181.                 copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
  182.             else
  183.                 copy.buckets[i] = e;
  184.         }
  185.         return copy;
  186.     }
  187. }
  188.  
  189. class Lek{
  190.  
  191.     String ime;
  192.     int negativna;
  193.     int cena;
  194.     int brojLekovi;
  195.  
  196.     public Lek(String ime, int negativna, int cena, int brojLekovi) {
  197.         this.ime = ime;
  198.         this.negativna = negativna;
  199.         this.cena = cena;
  200.         this.brojLekovi = brojLekovi;
  201.     }
  202.  
  203.     public String getIme() {
  204.         return ime;
  205.     }
  206.  
  207.     public void setIme(String ime) {
  208.         this.ime = ime;
  209.     }
  210.  
  211.     public int getNegativna() {
  212.         return negativna;
  213.     }
  214.  
  215.     public void setNegativna(int negativna) {
  216.         this.negativna = negativna;
  217.     }
  218.  
  219.     public int getCena() {
  220.         return cena;
  221.     }
  222.  
  223.     public void setCena(int cena) {
  224.         this.cena = cena;
  225.     }
  226.  
  227.     public int getBrojLekovi() {
  228.         return brojLekovi;
  229.     }
  230.  
  231.     public void setBrojLekovi(int brojLekovi) {
  232.         this.brojLekovi = brojLekovi;
  233.     }
  234. }
  235.  
  236.  
  237. public class Apteka {
  238.  
  239.     public static String makeUpperCase(String in){
  240.  
  241.         String str = "";
  242.         for(int i = 0; i < in.length(); i++){
  243.             str += Character.toUpperCase(in.charAt(i));
  244.         }
  245.  
  246.         return str;
  247.     }
  248.  
  249.     public static void main(String []args) throws IOException {
  250.  
  251.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  252.         int n  = Integer.parseInt(in.readLine());
  253.         // key = ime, value = LEK
  254.         OBHT<String, Lek> ht = new OBHT<>(n*n);
  255.  
  256.         for(int i = 0; i < n; i++){
  257.             String line = in.readLine();
  258.             String []pom = line.split(" ");
  259.             String ime  = makeUpperCase(pom[0]);
  260.             Lek lek = new Lek( ime ,Integer.parseInt(pom[1]),Integer.parseInt(pom[2]), Integer.parseInt(pom[3]));
  261.             ht.insert(ime,lek);
  262.         }
  263.  
  264.         String in1 = in.readLine();
  265.  
  266.         while(!in1.equals("KRAJ")){
  267.             int in2 = Integer.parseInt(in.readLine());
  268.             in1 = makeUpperCase(in1);
  269.  
  270.             int key = ht.search(in1);
  271.             if(key == -1){
  272.                 System.out.println("Nema takov lek");
  273.                 in1 = in.readLine();
  274.                 continue;
  275.             }else{
  276.                 Lek lek = (Lek) ht.getBucket(key).value;
  277.                 System.out.println(lek.ime);
  278.                 if(lek.negativna == 0){
  279.                     System.out.println("NEG");
  280.                 }else{
  281.                     System.out.println("POZ");
  282.                 }
  283.                 System.out.println(lek.cena);
  284.                 System.out.println(lek.brojLekovi);
  285.                 if(in2 <= lek.brojLekovi){
  286.                     System.out.println("Napravena naracka");
  287.                     lek.brojLekovi = lek.brojLekovi - in2;
  288.                     ht.insert(lek.ime, lek);
  289.                 }
  290.                 else{
  291.                     System.out.println("Nema dovolno lekovi");
  292.                 }
  293.                 in1 = in.readLine();
  294.  
  295.             }
  296.  
  297.         }
  298.  
  299.     }
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement