Advertisement
196040

APS labs 6 Preveduvac

Dec 14th, 2020
1,045
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.09 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. class SLLNode<E> {
  5.     protected E element;
  6.     protected SLLNode<E> succ;
  7.     public SLLNode(E elem, SLLNode<E> succ) {
  8.         this.element = elem;
  9.         this.succ = succ;
  10.     }
  11.     @Override
  12.     public String toString() {
  13.         return element.toString();
  14.     }
  15. }
  16. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  17.     // Each MapEntry object is a pair consisting of a key (a Comparable
  18.     // object) and a value (an arbitrary object).
  19.     K key;
  20.     E value;
  21.     public MapEntry (K key, E val) {
  22.         this.key = key;
  23.         this.value = val;
  24.     }
  25.     public int compareTo (K that) {
  26.         // Compare this map entry to that map entry.
  27.         @SuppressWarnings("unchecked")
  28.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  29.         return this.key.compareTo(other.key);
  30.     }
  31.     public String toString () {
  32.         return "<" + key + "," + value + ">";
  33.     }
  34. }
  35. class OBHT<K extends Comparable<K>,E> {
  36.     // An object of class OBHT is an open-bucket hash table, containing entries
  37.     // of class MapEntry.
  38.     private MapEntry<K,E>[] buckets;
  39.     // buckets[b] is null if bucket b has never been occupied.
  40.     // buckets[b] is former if bucket b is formerly-occupied
  41.     // by an entry that has since been deleted (and not yet replaced).
  42.     static final int NONE = -1; // ... distinct from any bucket index.
  43.     private static final MapEntry former = new MapEntry(null, null);
  44.     // This guarantees that, for any genuine entry e,
  45.     // e.key.equals(former.key) returns false.
  46.     private int occupancy = 0;
  47.     // ... number of occupied or formerly-occupied buckets in this OBHT.
  48.     @SuppressWarnings("unchecked")
  49.     public OBHT (int m) {
  50.         // Construct an empty OBHT with m buckets.
  51.         buckets = (MapEntry<K,E>[]) new MapEntry[m];
  52.     }
  53.     public MapEntry<K, E> getMapEntry(int index) {
  54.         return buckets[index];
  55.     }
  56.     private int hash (K key) {
  57.         // Translate key to an index of the array buckets.
  58.         return Math.abs(key.hashCode()) % buckets.length;
  59.     }
  60.     public int search (K targetKey) {
  61.         // Find which if any bucket of this OBHT is occupied by an entry whose key
  62.         // is equal to targetKey. Return the index of that bucket.
  63.         int b = hash(targetKey); int n_search=0;
  64.         for (;;) {
  65.             MapEntry<K,E> oldEntry = buckets[b];
  66.             if (oldEntry == null)
  67.                 return NONE;
  68.             else if (targetKey.equals(oldEntry.key))
  69.                 return b;
  70.             else {
  71.                 b = (b + 1) % buckets.length;
  72.                 n_search++;
  73.                 if(n_search==buckets.length)
  74.                     return NONE;
  75.  
  76.             }
  77.         }
  78.     }
  79.     public void insert (K key, E val) {// Insert the entry <key, val> into this OBHT.
  80.         MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  81.         int b = hash(key); int n_search=0;
  82.         for (;;) {
  83.             MapEntry<K,E> oldEntry = buckets[b];
  84.             if (oldEntry == null) {
  85.                 if (++occupancy == buckets.length) {
  86.                     System.out.println("Hash tabelata e polna!!!");
  87.                 }
  88.                 buckets[b] = newEntry;
  89.                 return;
  90.             }
  91.             else if (oldEntry == former
  92.                     || key.equals(oldEntry.key)) {
  93.                 buckets[b] = newEntry;
  94.                 return;
  95.             }
  96.             else
  97.             {
  98.                 b = (b + 1) % buckets.length;
  99.                 n_search++;
  100.                 if(n_search==buckets.length)
  101.                     return;
  102.  
  103.             }
  104.         }
  105.     }
  106.     @SuppressWarnings("unchecked")
  107.     public void delete (K key) {
  108.         // Delete the entry (if any) whose key is equal to key from this OBHT.
  109.         int b = hash(key); int n_search=0;
  110.         for (;;) {
  111.             MapEntry<K,E> oldEntry = buckets[b];
  112.             if (oldEntry == null)
  113.                 return;
  114.             else if (key.equals(oldEntry.key)) {
  115.                 buckets[b] = former;//(MapEntry<K,E>)former;
  116.                 return;
  117.             }
  118.             else{
  119.                 b = (b + 1) % buckets.length;
  120.                 n_search++;
  121.                 if(n_search==buckets.length)
  122.                     return;
  123.  
  124.             }
  125.         }
  126.     }
  127.     public String toString () {
  128.         String temp = "";
  129.         for (int i = 0; i < buckets.length; i++) {
  130.             temp += i + ":";
  131.             if (buckets[i] == null)
  132.                 temp += "\n";
  133.             else if (buckets[i] == former)
  134.                 temp += "former\n";
  135.             else
  136.                 temp += buckets[i] + "\n";
  137.         }
  138.         return temp;
  139.     }
  140.     public OBHT<K,E> clone () {
  141.         OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
  142.         for (int i = 0; i < buckets.length; i++) {
  143.             MapEntry<K,E> e = buckets[i];
  144.             if (e != null && e != former)
  145.                 copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
  146.             else
  147.                 copy.buckets[i] = e;
  148.         }
  149.         return copy;
  150.     }
  151. }
  152. public class Preveduvac {
  153.     public static void main(String[] args) throws IOException {
  154.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  155.         int N = Integer.parseInt(br.readLine());
  156.         OBHT<String, String> koficka = new OBHT<String, String>(100);
  157.         for (int i = 1; i <= N; i++) {
  158.             String text = br.readLine();//Така прво е даден зборот на македонски,
  159.             String[] pom = text.split(" ");//па има едно празно место,
  160.             String mk = pom[0]; //па преводот на зборот на англиски јазик.
  161.             String ang = pom[1];
  162.             koficka.insert(pom[1], pom[0]);
  163.         }
  164.         for (; ; ) {
  165.             String txt = br.readLine();//angliskiot zbor
  166.             if (txt.equals("KRAJ"))
  167.                 break;
  168.             int help = koficka.search(txt);
  169.             if(help==-1)
  170.                 System.out.println("/");
  171.             else if (help!=-1 && txt.equals(koficka.getMapEntry(help).key)) {
  172.                     System.out.println(koficka.getMapEntry(help).value);
  173.             }
  174.            }
  175.     }
  176. }
  177. /*
  178. Треба да изработите автоматски преведувач за зборови од анлиски јазик на македонски.
  179. Влезот се состои од парови од зборови разделени со празно место. Така прво е даден зборот на македонски,
  180. па има едно празно место, па преводот на зборот на англиски јазик. Потоа на влез се добиваат
  181. странски зборови (секој во посебен ред). За излез треба да се преведат овие зборови.
  182. Доколку не е познат преводот на зборот на излез се печати "/"
  183. Влез. Прво се дава број N на поими кои ќе ги содржи речникот.
  184. Потоа во наредните N реда се дадени поимите, прв на македонски, потоа на англиски.
  185. Потоа следуваат зборови на англиски (секој збор во посебен ред), кои треба да се преведат на македонски.
  186. За означување на крај во редицата се дава зборот KRAJ
  187. Излез. За секој од дадените зборови на англиски во посебен ред е даден преводот на зборот на македонски.
  188. Доколку не е познат преводот на зборот се печати /
  189. Забелешка. Работете со хеш табела со отворени кофички. Сами треба да го одредите бројот на кофички
  190. и хеш функцијата.
  191. Име на класа: Preveduvac
  192. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement