miércoles, 16 de enero de 2013

Ejercicio63 Sin 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 Ejercicio63SinCadenas {
    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
        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){
        for (int i = 1; i <= cifras(num); i++){
            if (extraerDigito(num,i) != 0 && extraerDigito(num,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 = 0;
        do{
            num = num / 10;
            cifras++;
        }while(num != 0);
        return cifras;
    }
   
    static int extraerDigito(int num, int pos) {
        int divisor = 10;
        for (int i = 1; i <= cifras(num) - pos; i++) {
            divisor = divisor * 10;
        }
        num = num % divisor;
        divisor = divisor / 10;
        return (num / divisor);
    }

    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