viernes, 9 de septiembre de 2011

Como Programar en Java: Ejercicio 4.37

Aquí esta el ejercicio 4.37 de Como Programar en Java séptima edición.

package com.jlm.ccb.ejercicios.capitulo4;

import java.util.Scanner;

/**
 * Clase encargada de cifrar los datos telefónicos.
 * Ejercicio 4.37
 * @author LorettoTG
 * @version 1.0
 */
public class LineaCifrada {
    /**
     * Método encargado de cifrar la línea telefónica.
     */
    public void cifrar() {
        //Se crea un objeto Scanner para obtener la entrada
        //de datos del usuario.
        Scanner entrada = new Scanner(System.in);

        System.out.println("Deme el numero a cifrar: ");
        int numero = entrada.nextInt();

        //Tomamos el primer dígito y luego quitamos el primer dígito
        int primerDigito = numero / 1000;
        numero = numero % 1000;

        int segundoDigito = numero / 100;
        numero = numero % 100;

        int tercerDigito = numero / 10;
        numero = numero % 10;

        int cuartoDigito = numero;

        primerDigito = encriptar(primerDigito)*10;
        segundoDigito = encriptar(segundoDigito);
        tercerDigito = encriptar(tercerDigito)*1000;
        cuartoDigito = encriptar(cuartoDigito)*100;

        int numeroEncriptado = primerDigito + segundoDigito
                + tercerDigito + cuartoDigito;

        System.out.println("Nuevo numero: " + numeroEncriptado);
    }

    /**
     * Método encargado de encriptar con el siguiente algoritmo.
     * Sumar 7 al dígito y obtener el residuo después de dividir
     * el nuevo valor entre 10;
     * @param digito int Con el valor de un dígito.
     * @return resultado int Con el valor del dígito encriptado.
     */
    public int encriptar(int digito) {
        return (digito + 7)%10;
    }

    /**
     * Método encargado de desencriptar con el siguiente algoritmo.
     * Si el numero es 7,8,9 sumar 10. Si no es mayor a 9 dejarlo
     * igual, luego restar 7.
     * el nuevo valor entre 10;
     * @param digito int Con el valor de un dígito.
     * @return resultado int Con el valor del dígito encriptado.
     */
    public int desencriptar(int digito) {
        if (digito == 7 || digito == 8 || digito == 9) {
            return digito - 7;
        } else {
            return digito + 3;
        }
    }

    /**
     * Método encargado de descrifar un número.
     */
    public void descifrar() {
        //Se crea un objeto Scanner para obtener la entrada
        //de datos del usuario.
        Scanner entrada = new Scanner(System.in);

        System.out.println("Deme el numero a cifrar: ");
        int numero = entrada.nextInt();

        //Tomamos el primer dígito y luego quitamos el primer dígito
        int primerDigito = numero / 1000;
        numero = numero % 1000;

        int segundoDigito = numero / 100;
        numero = numero % 100;

        int tercerDigito = numero / 10;
        numero = numero % 10;

        int cuartoDigito = numero;

        primerDigito = desencriptar(primerDigito)*10;
        segundoDigito = desencriptar(segundoDigito);
        tercerDigito = desencriptar(tercerDigito)*1000;
        cuartoDigito = desencriptar(cuartoDigito)*100;

        int numeroEncriptado = primerDigito + segundoDigito
                + tercerDigito + cuartoDigito;

        System.out.println("Nuevo numero: " + numeroEncriptado);
    }

    /**
     * Punto de entrada a la clase y a la aplicación.
     * @param args matriz de argumentos de cadena.
     */
    public static void main(String[] args) {
        //El operador new es el encargado de crear instancias de
        //una clase, es decir los objetos que tienen las características
        //de la clase. El operador new de Java es capaz de reservar la
        //memoria para un objeto de este tipo sabiendo los atributos que
        //tiene según la definición de la clase.
        LineaCifrada lineaCifrada = new LineaCifrada();
        lineaCifrada.cifrar();
        lineaCifrada.descifrar();
    }
}

2 comentarios: