Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Аптека Problem 4 (0 / 0)
- Потребно е да се направи компјутерска апликација со која ќе се забрза работењето на една аптека. Притоа апликацијата треба да му овозможи на корисникот (фармацевтот) брзо да пребарува низ огромното множество со лекови кои се внесени во системот. Начинот на кој тој треба да пребарува е следен: доволно е да ги внесе првите 3 букви од името на лекот за да може да му се излиста листа од лекови кои ги има во системот. Работата на фармацевтот е да провери дали внесениот лек го има во системот и да му даде информација на клиентот. Информацијата што треба да му ја даде на клиентот е дали лекот се наоѓа на позитивната листа на лекови, која е цената и колку парчиња од лекот има на залиха. Доколку лекот постои клиентот го нарачува со што кажува колку парчиња ќе купи. Оваа акција фармацевтот треба да ја евидентира на системот (односно да ја намали залихата на лекови за онолку парчиња колку што му издал на клиентот). Доколку нарачката на клиентот е поголема од залихата на лекот што ја има во системот, не се презема никаква акција.
- Влез: Од стандарден влез прво се дава број N кој претставува број на лекови кои ќе бидат внесени во системот. Во наредните N реда се дадени имињата на лековите, дали ги има на позитивната листа (1/0), цената и број на парчиња, сите разделени со по едно празно место. Потоа се даваат редови со имиња на лекови и број на парчиња нарачани од клиентот. За означување на крај се дава зборот KRAJ.
- Излез: На стандарден излез треба да се испечати за секој од влезовите следната информација: IME POZ/NEG CENA BR_LEKOVI. Доколку лекот не е најден се печати Nema takov lek. Доколку нарачката на клиентот е поголема од залихата се печати Nema dovolno lekovi инаку Napravena naracka.
- Забелешка: Задачата да се реши со хeш табела. Функцијата со која се врши мапирање на имињата на лековите во број е следна: h(w)=(29∗(29∗(29∗0+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
- Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
- Име на класата: Apteka.
- Пример влез:
- 20
- ACEROLA 0 100 1000
- ACIKLOVIR 1 1650 87
- ACIPAN 1 300 25
- ADIMICIN 0 500 0
- VENTOR 1 0 25
- VALSACOR 1 1090 10
- TYVERB 0 62696 1
- ULCODIN 1 47 100
- TRICAL 0 0 0
- RUBENS 0 2315 0
- IBALGIN 1 0 100
- HYDROCYKLIN 0 55 10
- GENTAMICIN 1 152 90
- FORTEO 1 0 0
- FORVITAC 1 0 150
- CHIROCAINE 1 0 10
- BRONLES 1 0 0
- BELOGENT 0 143 30
- BEDOXIN 1 0 100
- HYDROCYKLIN20 0 113 20
- hydroCyklinn
- 2
- hydroCyklin20
- 2
- KRAJ
- Пример излез:
- Nema takov lek
- HYDROCYKLIN20
- NEG
- 113
- 20
- Napravena naracka
- import java.util.Scanner;
- class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
- // Each MapEntry object is a pair consisting of a key (a Comparable
- // object) and a value (an arbitrary object).
- K key;
- E value;
- public MapEntry (K key, E val) {
- this.key = key;
- this.value = val;
- }
- public int compareTo (K that) {
- // Compare this map entry to that map entry.
- @SuppressWarnings("unchecked")
- MapEntry<K,E> other = (MapEntry<K,E>) that;
- return this.key.compareTo(other.key);
- }
- public String toString () {
- return "<" + key + "," + value + ">";
- }
- }
- class CBHT<K extends Comparable<K>, E> {
- // An object of class CBHT is a closed-bucket hash table, containing
- // entries of class MapEntry.
- private SLLNode<MapEntry<K,E>>[] buckets;
- @SuppressWarnings("unchecked")
- public CBHT(int m) {
- // Construct an empty CBHT with m buckets.
- buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
- }
- private int hash(K key) {
- // Translate key to an index of the array buckets.
- String k = (String) key;
- return ((29 * (29 * (29 * 0 + k.charAt(0)) + k.charAt(1)) + k.charAt(2)) % 102780) % buckets.length;
- }
- public SLLNode<MapEntry<K,E>> search(K targetKey) {
- // Find which if any node of this CBHT contains an entry whose key is
- // equal
- // to targetKey. Return a link to that node (or null if there is none).
- int b = hash(targetKey);
- for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
- if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
- return curr;
- }
- return null;
- }
- public void insert(K key, E val) { // Insert the entry <key, val> into this CBHT.
- MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
- int b = hash(key);
- for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
- if (key.equals(((MapEntry<K, E>) curr.element).key)) {
- // Make newEntry replace the existing entry ...
- curr.element = newEntry;
- return;
- }
- }
- // Insert newEntry at the front of the 1WLL in bucket b ...
- buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
- }
- public void delete(K key) {
- // Delete the entry (if any) whose key is equal to key from this CBHT.
- int b = hash(key);
- for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
- if (key.equals(((MapEntry<K,E>) curr.element).key)) {
- if (pred == null)
- buckets[b] = curr.succ;
- else
- pred.succ = curr.succ;
- return;
- }
- }
- }
- public String toString() {
- String temp = "";
- for (int i = 0; i < buckets.length; i++) {
- temp += i + ":";
- for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
- temp += curr.element.toString() + " ";
- }
- temp += "\n";
- }
- return temp;
- }
- }
- class SLLNode<E> {
- protected E element;
- protected SLLNode<E> succ;
- public SLLNode(E elem, SLLNode<E> succ) {
- this.element = elem;
- this.succ = succ;
- }
- @Override
- public String toString() {
- return element.toString();
- }
- }
- class Lek{
- protected String imelek;
- protected int lista;
- protected int cena;
- protected int brparcinja;
- public Lek(String imelek, int lista, int cena, int brparcinja) {
- this.imelek = imelek.toUpperCase();
- this.lista = lista;
- this.cena = cena;
- this.brparcinja = brparcinja;
- }
- }
- public class Apteka {
- public static void main(String[] args) {
- Scanner input = new Scanner(System.in);
- int n = input.nextInt();
- input.nextLine();
- CBHT<String,Lek> hashtable = new CBHT<String,Lek>(n*2);
- for(int i=0;i<n;i++) {
- String [] string = input.nextLine().split(" ");
- String ime = string[0];
- int pozneg = Integer.parseInt(string[1]);
- int cena = Integer.parseInt(string[2]);
- int brparcinja = Integer.parseInt(string[3]);
- Lek lek = new Lek(ime,pozneg,cena,brparcinja);
- hashtable.insert(ime.toUpperCase(), lek);
- }
- while(true) {
- String barano = input.nextLine();
- barano = barano.toUpperCase();
- if(barano.equals("KRAJ")) {
- break;
- }
- int broj = input.nextInt();
- input.nextLine();
- SLLNode<MapEntry<String,Lek>> node = hashtable.search(barano);
- if(node!=null) {
- System.out.println(node.element.key);
- if(node.element.value.lista==1) {
- System.out.println("POZ");
- }
- else {
- System.out.println("NEG");
- }
- System.out.println(node.element.value.cena);
- System.out.println(node.element.value.brparcinja);
- if(broj<=node.element.value.brparcinja) {
- System.out.println("Napravena naracka");
- node.element.value.brparcinja = node.element.value.brparcinja - broj;
- }else {
- System.out.println("Nema dovolno lekovi");
- }
- }
- else {
- System.out.println("Nema takov lek");
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment