Advertisement
Kame3

Преведувач lab6.3

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