martes, 15 de enero de 2013

Ejercicio 63 con Cadenas

/*
 * 63.    Hacer un programa que pida por teclado un número binario forzando al usuario
 *  a que realmente introduzca un número formado por ceros y unos. A continuación
 *  escriba en pantalla el valor decimal del número introducido. Para resolver
 *  este programa es necesario utilizar los métodos siguientes:
 *
 *   lógico función esBinario(entero x). Devuelve verdadero o falso si el número  x es binario o no.
 *   entero función cifras(entero x). Devuelve el número de dígitos del número x.
 *     entero función extraeDigito(entero x,entero c).
 *     Devuelve el dígito en la posición c del número x,
 *     empezando a contar por la izquierda. Por ejemplo, extraeDigito(23456,2) devuelve 3.
 */


import java.util.Scanner;

public class Ejercicio63 {
    public static void main(String[] args) {
        //Variables
        int num;
      
        //Inicializamos Scanner
        @SuppressWarnings("resource")
        Scanner reader = new Scanner(System.in);
        //Empezamos el programa
        //Obligamos a introducir un numero que sea binario.
        do{
            System.out.println("Introduzca un numero binario: ");
            num = reader.nextInt();
        }
        while(esBinario(num)==false);
        //Mostramos el numero de cifras del numero introducido (Por usar el método, sino, no se usa)
        System.out.println("Has introducido un numero de "+ cifras(num) + " cifras");
        //Mostramos por pantalla el resultado
        // Esto no se usa---->>>    System.out.println("El tercer numero empezando por la izquierda es: " + extraerDigito(num,3));
        System.out.println("El numero " + num + " en decimal es: " + pasaBinADec(num));
        //Comprobamos que finaliza por completo
        System.out.print("END_OF_LINE");
    }
  
    //Hay que comprobar que el numero introducido sea binario, "1" y "0".
    static boolean esBinario(int num){
        String str = String.valueOf(num);
        for(int i=0; i<str.length(); i++){
            if (str.charAt(i) != '0' && str.charAt(i) != '1'){
                return false;
            }
        }
        return true;
    }
    //Así es mas facil saber el número de cifras que tiene el número introducido.
    static int cifras(int num){
        int cifras;
        String str = String.valueOf(num);
        cifras = str.length();
        return cifras;
    }
    //La funcion extraerDigito es super sencilla
    static int extraerDigito(int num, int pos){  
        String str = String.valueOf(num);
        /* Si la cadena es "Hola Mundo" y queremos sacar la M,
         * tenemos que colocar el puntero justo antes, para sacar la M.
         * Es decir, posicion inicial 5, final 6. Y de 5->6 Hay una 'M' en medio,
         * que es lo que nos devuelve .substring(5,6).
         */
        int digito = Integer.parseInt(str.substring((pos-1),pos));
        return digito;
    }
    static int pasaBinADec(int num){
            int resto, decimal=0, i=0;
            while (num != 0){
               resto = num % 10;
               decimal = decimal + (resto * (int) Math.pow(2, i)); //(Fórmula -> cambio de base)
               i++;
               num = num / 10;
            }
            return decimal;
        }

}

No hay comentarios:

Publicar un comentario