Mitrezzz

АПС Лаб 6 Преведувач

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