Skip navigation.

(The sound of a little key)

"Only a parameter can change the method of my life."

Solucionando cuadraticas - Max Speed :)

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 :smile:
/* Codigo mejorado :smile:
 * 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 P:");
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 < 0)
                    raiz = Math.sqrt((h * -1));
                else
                    raiz = Math.sqrt(h);

                x1 = ((-b) + (raiz)) / (2*a);
                x2 = ((-b) - (raiz)) / (2*a);

                //out.println("#" + necuaciones + " >>  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.

Cifrado por sustitucion - 1Mi diplomacia Vs Tu Hipocresia

Comments

Phicar 4. November 2009, 23:23

jajajjajajajaj, acabo de ver este codigo y tiene una vaina parecida a mi calculadora del Newton y Rhapson :smile:, lo de reemplazar +- y eso jajajajjajajaj

Solido Amigo!!!!!!

[D-m-K] 7. November 2009, 13:02

jajajaja =), ahora que recuerdo tengo que hacer una aplicación que resuelva integrales de solidos/volumenes por revolución... la vaina es que se nota que será un código, algo largo.....

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies