Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Преведувач Problem 3 (2 / 5)
- Треба да изработите автоматски преведувач за зборови од анлиски јазик на македонски. Влезот се состои од парови од зборови разделени со празно место. Така прво е даден зборот на македонски, па има едно празно место, па преводот на зборот на англиски јазик Потоа на влез се добиваат странски зборови (секој во посебен ред). За излез треба да се преведат овие зборови. Доколку не е познат преводот на зборот на излез се печати "/"
- Влез. Прво се дава број N на поими кои ќе ги содржи речникот. Потоа во наредните N реда се дадени поимите, прв на македонски, потоа на англиски. Потоа следуваат зборови на англиски (секој збор во посебен ред), кои треба да се преведат на македонски. За означување на крај во редицата се дава зборот KRAJ
- Излез. За секој од дадените зборови на англиски во посебен ред е даден преводот на зборот на македонски. Доколку не е познат преводот на зборот се печати /
- Забелешка. Работете со хеш табела со отворени кофички. Сами треба да го одредите бројот на кофички и хеш функцијата.
- Име на класа: Preveduvac
- import java.util.Scanner;
- public class Preveduvac {
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- OBHT<String, String> dictionary = new OBHT<>(151);
- int n = scan.nextInt();
- scan.nextLine();
- for (int i=0; i<n; ++i) {
- String parts[] = scan.nextLine().split(" ");
- String macedonian = parts[0];
- String english = parts[1];
- dictionary.insert(english, macedonian);
- }
- while (true) {
- String english = scan.nextLine();
- if (english.equals("KRAJ"))
- break;
- int index = dictionary.search(english);
- if (index == -1)
- System.out.println("/");
- else
- System.out.println(dictionary.getValue(index));
- }
- }
- }
- class OBHT<K extends Comparable<K>,E> {
- private MapEntry<K,E> buckets[];
- private static final MapEntry former = new MapEntry(null, null);
- private int occupancy = 0;
- private static final int NONE = -1;
- @SuppressWarnings("unchecked")
- public OBHT (int m) {
- // Construct an empty OBHT with m buckets.
- buckets = (MapEntry<K,E>[]) new MapEntry[m];
- }
- private int hash (K key) {
- // Translate key to an index of the array buckets.
- String keys = key.toString();
- int sum = 0;
- for (int i=0; i < keys.length(); ++i)
- sum += (i * i * keys.charAt(i));
- return sum % buckets.length;
- }
- public E getValue(int index) {
- return buckets[index].value;
- }
- public int search (K targetKey) {
- // Find which if any bucket of this OBHT is occupied by an entry whose key
- // is equal to targetKey. Return the index of that bucket.
- int b = hash(targetKey); int n_search=0;
- for (;;) {
- MapEntry<K,E> oldEntry = buckets[b];
- if (oldEntry == null)
- return NONE;
- else if (targetKey.equals(oldEntry.key))
- return b;
- else
- {
- b = (b + 1) % buckets.length;
- n_search++;
- if(n_search==buckets.length)
- return NONE;
- }
- }
- }
- public void insert (K key, E val) {
- // Insert the entry <key, val> into this OBHT.
- MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
- int b = hash(key); int n_search=0;
- for (;;) {
- MapEntry<K,E> oldEntry = buckets[b];
- if (oldEntry == null) {
- if (++occupancy == buckets.length) {
- System.out.println("Hash tabelata e polna!!!");
- }
- buckets[b] = newEntry;
- return;
- }
- else if (oldEntry == former
- || key.equals(oldEntry.key)) {
- buckets[b] = newEntry;
- return;
- }
- else
- {
- b = (b + 1) % buckets.length;
- n_search++;
- if(n_search==buckets.length)
- return;
- }
- }
- }
- @SuppressWarnings("unchecked")
- public void delete (K key) {
- // Delete the entry (if any) whose key is equal to key from this OBHT.
- int b = hash(key); int n_search=0;
- for (;;) {
- MapEntry<K,E> oldEntry = buckets[b];
- if (oldEntry == null) {
- return;
- }
- else if (key.equals(oldEntry.key)) {
- buckets[b] = former;//(MapEntry<K,E>)former;
- return;
- }
- else{
- b = (b + 1) % buckets.length;
- n_search++;
- if(n_search==buckets.length)
- return;
- }
- }
- }
- public String toString () {
- String temp = "";
- for (int i = 0; i < buckets.length; i++) {
- temp += i + ":";
- if (buckets[i] == null)
- temp += "\n";
- else if (buckets[i] == former)
- temp += "former\n";
- else
- temp += buckets[i] + "\n";
- }
- return temp;
- }
- public OBHT<K,E> clone () {
- OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
- for (int i = 0; i < buckets.length; i++) {
- MapEntry<K,E> e = buckets[i];
- if (e != null&&e != former)
- copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
- else
- copy.buckets[i] = e;
- }
- return copy;
- }
- }
- class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
- K key;
- E value;
- public MapEntry(K key, E value) {
- this.key = key;
- this.value = value;
- }
- @Override
- public int compareTo(K that) {
- return this.key.compareTo(that);
- }
- @Override
- public String toString () {
- return "<" + key + "," + value + ">";
- }
- }
- Sample input
- 5
- machka cat
- kuche dog
- prase pig
- papagal parrot
- riba fish
- cat
- parrot
- fish
- KRAJ
- Sample output
- machka
- papagal
- riba
Add Comment
Please, Sign In to add comment