luishenriique

Atividade 02 - TAP II

Aug 29th, 2013
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.41 KB | None | 0 0
  1. package br.pucpr;
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5.  
  6. /**
  7.  * Implementação de uma tabela hash de palavras reservadas da linguagem
  8.  *
  9.  * @author Luis Henrique
  10.  */
  11. public class MainCls {
  12.     // Criando uma tabela hash com uma chave String e um valor Inteiro
  13.     static HashMap<String, Integer> hsmap = new HashMap<String, Integer>();
  14.     static String palavras[];
  15.  
  16.     /**
  17.      * Função que passa as palavras reservadas do C para a tabela hash
  18.      */
  19.     public static void hashPalavras() throws IOException {
  20.         // Lendo o arquivo de texto
  21.         BufferedReader buf = new BufferedReader(new FileReader(
  22.                 "C:/Temp/palavras_reservadas.txt"));
  23.         String l;
  24.         // Armazenando uma linha por vez na String l
  25.         while ((l = buf.readLine()) != null) {
  26.             // Adcionando a palavra armazenada na tabela hash com o valor 0
  27.             hsmap.put(l, 0);
  28.         }
  29.         buf.close();
  30.     }
  31.  
  32.     /**
  33.      * Função para ler o programa em C que irá conter algumas das palavras
  34.      * reservadas
  35.      */
  36.     public static void lerPrograma() throws IOException {
  37.         // Lendo o arquivo de texto
  38.         BufferedReader buf = new BufferedReader(new FileReader(
  39.                 "C:/Temp/programa.txt"));
  40.         String line = "", l;
  41.         // Armazenando uma linha por vez na String l
  42.         while ((l = buf.readLine()) != null) {
  43.             // Passando cada linha para uma unica String
  44.             line += l;
  45.         }
  46.         // Expressão regular para separar cada palavra da String em uma posição
  47.         // de um vetor de String
  48.         String delimiters = "\\s+|;\\s*|\\(\\s*|\\)\\s*|\\}\\s*|\\{\\s*|\\[\\s*|\\]\\s*";
  49.         // Armazenando as palavras no vetor de String
  50.         palavras = line.split(delimiters);
  51.     }
  52.  
  53.     public static void main(String[] args) throws IOException {
  54.         int contador = 0;
  55.  
  56.         // Chamada da função para criar a tabela hash
  57.         hashPalavras();
  58.         // Chamada da função para ler o programa em C
  59.         lerPrograma();
  60.         // Verificando se as palavras contidas no programa são as palavras
  61.         // reservadas
  62.         for (int i = 0; i < palavras.length; i++) {
  63.             // Verifica se é uma palavra reservada
  64.             if (hsmap.containsKey(palavras[i])) {
  65.                 // Se for, re-insere a palavra, mas agora com o valor anterior +
  66.                 // 1
  67.                 hsmap.put(palavras[i], hsmap.get(palavras[i]) + 1);
  68.             }
  69.         }
  70.  
  71.         // Imprimindo as palavras reservadas encontradas
  72.         System.out.println("Palavras reservadas encontradas: ");
  73.         // Obter uma lista de todas as chaves no HashMap
  74.         Set chaves = hsmap.keySet();
  75.         // Obtemos um iterador
  76.         Iterator i = chaves.iterator();
  77.         // Enquanto existirem chaves
  78.         while (i.hasNext()) {
  79.             // Armazenamos a chave em um objeto
  80.             Object x = i.next();
  81.             // Se a chave possuir valor maior-igual a 1, sabemos que ela foi uma
  82.             // palavra encontrada
  83.             if (hsmap.get(x) >= 1) {
  84.                 // Exibimos as palavras
  85.                 System.out.print(x + " = " + hsmap.get(x) + ", ");
  86.                 // Somamos ao contador para obter a taxa de ocupação
  87.                 contador++;
  88.             }
  89.         }
  90.         // Exibimos a taxa de ocupação (valor do contador pelo tamanho da tabela
  91.         System.out.println("\nTaxa de ocupação: " + contador + "/"
  92.                 + hsmap.size());
  93.         // Exibimos a porcentagem de ocupação (valor do contador vezes 100
  94.         // divididos pelo tamanho da tabela)
  95.         System.out.println("Porcentagem de ocupação: "
  96.                 + ((contador * 100) / hsmap.size()) + "%");
  97.         // Exibimos o número de colisões
  98.         System.out.println("Número de colisões: 0");
  99.         // As colisões foram 0 pelo motivo de ter usado uma tabela hash do java,
  100.         // criando o tamanho certo para as palavras listadas
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment