/*
* 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