import java.io.*; /** * Clase para calcular el peso molecular de una formula quimica espeficicad * separando los elementos por puntos. Por ejemplo: H2.O, N.H4.N.O3 * Se requiere del archivo elementos.txt, que contiene los elementos quimicos * y su informacion * * @author Amparo López Gaona * @version 1a. ed. * */ public class PesoMolecular { TablaDeDispersion elementos; /** * Constructor por omisión */ public PesoMolecular() { elementos = new TablaDeDispersion(103); //Necesito espacio para 103 } /** * Metodo para llenar la tabla de elementos */ public void llenarTablaElementos() { String[] campos; String nombre, simbolo; int posicion, posHash; double peso; try{ BufferedReader in = new BufferedReader (new FileReader("elementos.txt")); String linea = in.readLine(); while(linea != null) { campos = linea.split(","); nombre = campos[0]; posicion = Integer.parseInt(campos[1]); simbolo = campos[2]; peso = Double.parseDouble(campos[3]); elementos.agregar(new ElementoQ(nombre, simbolo, posicion, peso)); linea = in.readLine(); } } catch (Exception e) { System.out.println("ERRROR"+e); } } /** * Método para calcular el peso molecular de una formula química * @param formula -- cadena con la formula química * @return double -- peso molecular de la formula recibida */ public double calculaPeso(String formula) { double total = 0.0; String[] campos = formula.split("\\."); // El punto separa los elementos int pos; boolean hayDigito; for (int i = 0; i < campos.length; i++) { pos = 0; hayDigito = false; while (pos < campos[i].length() && !hayDigito) if (Character.isDigit(campos[i].charAt(pos++))){ pos--; hayDigito = true; } String simbolo = campos[i].substring(0, pos); double peso = obtenerPeso(simbolo); String atomos = campos[i].substring(pos, campos[i].length()); total += (atomos.length() == 0)? peso :Integer.parseInt(atomos) * peso; } return total; } /* * Calcula el peso de un elemento químico * @param simbolo -- cadena con un símbolo químico * @return double -- calcula el peso de un símbolo */ public double obtenerPeso(String simbolo) { ElementoQ el = new ElementoQ(simbolo); Lista elems = elementos.obtener(el); java.util.Iterator it = elems.iterador(); while(it.hasNext()) { el = (ElementoQ)it.next(); if (el.obtenerSimbolo().equals(simbolo)) return el.obtenerPeso(); } System.out.println("El simbolo "+simbolo+" no está en la table"); return 0; } public static void main(String[] pps) { PesoMolecular pm = new PesoMolecular(); pm.llenarTablaElementos(); System.out.println("El peso de Be2.O.N4 es "+ pm.calculaPeso("Be2.O.N4")); /**/ System.out.println("El peso de H2.O es "+ pm.calculaPeso("H2.O")); System.out.println("El peso de Tb2.Zn es "+ pm.calculaPeso("Tb2.Zn")); System.out.println("El peso de N.H4.N.O3 es "+pm.calculaPeso("N.H4.N.O3")); System.out.println("El peso de N.Na4.Ag45.O3 es "+ pm.calculaPeso("N.Na4.Ag45.O3")); System.out.println("El peso de Fe es "+ pm.calculaPeso("Fe")); System.out.println("El peso de Fe2.O3 es "+ pm.calculaPeso("Fe2.O3")); System.out.println("El peso de Ca3.P.O4.P.O4 es "+pm.calculaPeso("Ca3.P.O4.P.O4")); /**/ } }