// Programa 5

import java.io.FileWriter;
import java.io.IOException;

public class ejemplo05ErlangBPlot2 {

    // Metodo para calcular la funcion B de Erlang
    public static double calcularErlangB(double a, int k) {
        double B = 1.0;
        for (int j = 1; j <= k; j++) {
            B = (a * B) / (a * B + j);
        }
        return B;
    }

    public static void main(String[] args) {
        // Verificar que se pasan los argumentos correctos
        if (args.length != 5) {
            System.out.println("Uso: java ErlangBPlot <canales> <a_inicial> <a_final> <num_valores> <archivo>");
            return;
        }

        try {
            // Parsear los argumentos
            int canales = Integer.parseInt(args[0]);      // Numero de canales (lineas)
            double a_inicial = Double.parseDouble(args[1]); // Valor inicial de a
            double a_final = Double.parseDouble(args[2]); // Valor final de a
            int num_valores = Integer.parseInt(args[3]);   // Numero de valores intermedios
            String archivo = args[4];                     // Nombre del archivo

            // Asegurarse de que los parametros sean validos
            if (a_inicial < 0 || a_final < 0 || canales <= 0 || num_valores <= 0) {
                System.out.println("Error: a_inicial, a_final deben ser >= 0, canales debe ser > 0, y num_valores debe ser > 0.");
                return;
            }

            // Calcular el paso entre valores de a
            double paso = (a_final - a_inicial) / (num_valores - 1);

            // Abrir el fichero para escritura
            FileWriter escritor = new FileWriter(archivo);

            // Iterar sobre los valores de a
            for (int i = 0; i < num_valores; i++) {
                double a = a_inicial + i * paso;

                // Calcular la funcion B de Erlang usando la funcion separada
                double B = calcularErlangB(a, canales);

                // Sacar el resultado por pantalla y escribirlo en el fichero
                System.out.println(a + " " + canales + " " + B);
                escritor.write(a + " " + canales + " " + B + "\n");
            }

            // Cerrar el fichero
            escritor.close();

        } catch (NumberFormatException e) {
            System.out.println("Error: los parametros deben ser numeros validos.");
        } catch (IOException e) {
            System.out.println("Error al escribir en el archivo: " + e.getMessage());
        }
    }
}
