Este código hace parte de un reto de sinfocol, básicamente lo que hace es lo siguiente :
- Lee un fichero linea por linea, donde cada linea representa una ecuacion cuadratica.
- Resuelve la ecuación cuadratica evaluando los resultados de x1 y x2 para tomar el valor entero. (Un valor entero es aquel que no tiene punto flotante)
- Suma todos los valores enteros y arroja en un archivo “salida.txt” el resultado de la suma de todas las ‘x’ enteras y la cantidad de operaciones realizadas.
No siendo más aqui esta el código un poco documentado
/* Codigo mejorado
* Encuentra la suma de todos los valores enteros de la solucion de las
* formulas cuadraticas tomadas de un archivo
* @author DMK
* Agradecimientos especiales al señor HaDeS por su buen reto =)
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.*;
public class Cuadraticas2 {
public static void main(String args[]) throws IOException, ArrayIndexOutOfBoundsException{
//String archivo = "quadratic.txt";
try{
String archivo = args[0];
sumarCuadraticasEnteras(archivo);
}catch(ArrayIndexOutOfBoundsException ex){
System.out.println("Por favor ingrese el nombre del fichero a procesar
");
System.out.println("Ejemploe : java Cuadraticas2 miFichero.txt");
}
}
public static void sumarCuadraticasEnteras(String archivo) throws IOException{
//Variables de control
int necuaciones = 0;
String formulaError = "";
//Variables para la formula
long a,b,c,suma = 0; //Valores de la ecuacion cuadratica
int pos; //Posicion para el substring
String chunk; //Trozo que va guardando la operacion
double x1 = 0, x2 = 0, h = 0, raiz = 0; //Valores de salida
//Verifico si el archivo existe
try{
//Variables para el manejo de archivos
//Fichero de entrada
File fe = new File(archivo);
BufferedReader br = new BufferedReader(new FileReader(fe));
//Fichero de salida
PrintWriter out = new PrintWriter(new FileWriter("salida.txt"));
//Leo el fichero
String linea = "";
while( (linea = br.readLine())!= null){
//Remplazo caracteres en blanco
linea = linea.replace(" ", "");
linea = linea.replace("--", "+");
linea = linea.replace("x+-", "x-");
linea = linea.replace("x--", "x+");
linea = linea.replace("x++-", "x-");
linea = linea.replace("+++", "+");
//Obtengo el valor de a
pos = linea.indexOf("x^2");
chunk = linea.substring(0, pos);
a = Long.parseLong(chunk);
//System.out.println(a);
//Obtengo el valor de b
pos = linea.indexOf("+");
chunk = linea.substring((pos + 1),linea.indexOf("x",pos));
if(chunk.length() == 0)
b = 1;
else
b = Long.parseLong(chunk);
//Obtengo el valor de c
pos = linea.indexOf("x",pos);
if(linea.indexOf("x+",pos) > 1)
chunk = linea.substring((pos + 2),linea.length());
else
chunk = linea.substring((pos + 1),linea.length());
if(chunk.length() == 0)
c = 0;
else
c = Long.parseLong(chunk);
//Realizo operacion de la raiz
h = (b*b - 4*a*c);
//Evaluo si h es negativo
if(h > x1 " + x1 + " == x2: " + x2);
//Realizo la suma de los numeros sin parte decimal
if(x1 % 1 == 0){
necuaciones++;
suma += (long)x1;
out.println("#" + necuaciones + " : " + x1);
}
//Sumo los valores enteros de x1 y x2
//Imprimo resultados
if(x2 % 1 == 0){
necuaciones++;
suma += (long)x2;
out.println("#" + necuaciones + " : " + x2);
}
if( (x1 % 1 != 0 && x2 % 1 != 0)){
necuaciones++;
formulaError = "#" + necuaciones + " : " + linea + "\n";
}
//out.println(linea);
}
br.close(); //Cierro el archivo de lectura
//Muestro varios resultados para comparar la respuesta
out.println("Total de ecuaciones identificadas : " + necuaciones);
out.println("La suma de los numeros es : " + suma);
out.println("Las siguientes formulas tienen error : " + formulaError);
out.flush();
out.close();
}catch(FileNotFoundException ex){
System.out.println(" ERROR : Lo siento tio, pero el archivo " + archivo + " no esta en ");
}
}
}
Hakuna matata!, Greetings to all and happy Bandwidth.