Java Ejercicios Básicos Resueltos 4

Ejercicios básicos resueltos con estructura secuencial
Relación Nº 4: Ejercicios 11, 12 y 13
Ejercicio 11:
Programa que lea un número entero N de 5 cifras y muestre sus cifras igual que en el ejemplo.
Por ejemplo para un número N = 12345   La salida debe ser:
1
12
123
1234
12345

/*
 *
 * N = 12345    La salida debe ser:
 * 1
 * 12
 * 123
 * 1234
 * 12345
 */
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N;
        System.out.print("Introduzca valor de N: ");
        N = sc.nextInt(); //supondremos que el número introducido tiene 5 cifras                                  
        System.out.println(N/10000);
        System.out.println(N/1000);
        System.out.println(N/100);
        System.out.println(N/10);
        System.out.println(N);
    }
}
Ejercicio 12:
Programa Java que lea un número entero N de 5 cifras y muestre sus cifras igual que en el ejemplo.
Por ejemplo para un número N = 12345    La salida debe ser:

5
45
345
2345
12345

/*
 *
 * N = 12345    La salida debe ser:
 * 5
 * 45
 * 345
 * 2345
 * 12345
 */
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N;
        System.out.print("Introduzca valor de N: ");
        N = sc.nextInt();  //supondremos que el número introducido tiene 5 cifras                                 
        System.out.println(N%10);
        System.out.printf("%02d %n",N%100);
        System.out.printf("%03d %n",N%1000);
        System.out.printf("%04d %n",N%10000);
        System.out.printf("%05d %n",N);
    }
}
Ejercicio 13:
Programa que pida por teclado la fecha de nacimiento de una persona (dia, mes, año) y calcule su número de la suerte.
El número de la suerte se calcula sumando el día, mes y año de la fecha de nacimiento y a continuación sumando las cifras obtenidas en la suma.
Por ejemplo:
Si la fecha de nacimiento es 12/07/1980 
Calculamos el número de la suerte así: 12+7+1980 = 1999  1+9+9+9 = 28
Número de la suerte: 28

/*
 * Programa que calcula el número de la suerte
 */
import java.util.Scanner;

public class Secuenciales2_13 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int dia, mes, año, suerte, suma, cifra1, cifra2, cifra3, cifra4;                                          
        System.out.println("Introduzca fecha de nacimiento");
        System.out.print("día: ");
        dia = sc.nextInt();
        System.out.print("mes: ");
        mes = sc.nextInt();
        System.out.print("año: ");
        año = sc.nextInt();
        suma = dia + mes + año;
        cifra1 = suma/1000;      //obtiene la primera cifra
        cifra2 = suma/100%10;    //obtiene la segunda cifra
        cifra3 = suma/10%10;     //obtiene la tercera cifra
        cifra4 = suma%10;        //obtiene la última cifra
        suerte = cifra1 + cifra2 + cifra3 + cifra4;
        System.out.println("Su número de la suerte es: " + suerte);                                               
    }
}

Java Ejercicios Básicos Resueltos 3

Ejercicios básicos Java con estructura secuencial

Relación Nº 3: Ejercicios 8, 9 y 10

Ejercicio 8:
Programa que tome como dato de entrada un número que corresponde a la longitud del radio una esfera y nos calcula y escribe el volumen de la esfera que se corresponden con dicho radio.

La fórmula para calcular el volumen de la esfera es
v = (4/3)*PI*r^3

/* 
 * Programa que calcula el volumen de una esfera
 */
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        double radio, volumen;
        System.out.print("Introduzca radio de la esfera: ");
        radio = sc.nextDouble();
        System.out.println("Volumen de la esfera de radio " + radio + " = " + (4.0/3)* Math.PI * Math.pow(radio, 3));  
    }
}
La operación para calcular el volumen es: (4.0/3)* Math.PI * Math.pow(radio, 3))

Debemos tener cuidado con la división entre números enteros. Si hacemos 4/3 nos da como resultado 1, por eso se debe escribir al menos uno de los dos números como double. En este caso se ha puesto el numerador como double simplemente escribiendo 4.0 y de esta forma el resultado de la división 4.0/3 será de tipo double.

Ejercicio 9:
Programa Java que calcule el área de un triángulo en función de las longitudes de sus lados (a, b, c), según la siguiente fórmula:  
Area = RaizCuadrada(p*(p-a)*(p-b)*(p-c))
donde p =  (a+b+c)/2
Para calcular la raíz cuadrada se utiliza el método Math.sqrt() 

/* 
 * Programa que calcule el área de un triángulo en función de las longitudes de sus lados (a, b, c)                    
 * según la siguiente fórmula: area=raiz2(p(p-a)(p-b)(p-c)) donde p = (a+b+c)/2
 */
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        double a,b,c,p;

        System.out.print("Introduzca longitud del primer lado del triángulo: ");
        a = sc.nextDouble();

        System.out.print("Introduzca longitud del segundo lado del triángulo: ");
        b = sc.nextDouble();

        System.out.print("Introduzca longitud del tercer lado del triángulo: ");
        c = sc.nextDouble();

        p = (a+b+c)/2;
        
        System.out.println("Area -> " +  Math.sqrt(p*(p-a)*(p-b)*(p-c)));
    }
}

Ejercicio 10:
Programa Java que lea un número entero de 3 cifras y muestre por separado las cifras del número.

/*
 * Programa que lea un número de 3 cifras y muestre por pantalla las cifras del número                                 
 */
import java.util.Scanner;

public class Main{

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int N;

        System.out.print("Introduzca valor de N: ");
        N = sc.nextInt(); //supondremos que el número introducido tiene 3 cifras
        
        System.out.println("Primera cifra de " + N + " -> " + (N/100));
        System.out.println("Cifra central de " + N + " -> " + (N/10)%10);
        System.out.println("Última cifra  de " + N + " -> " + (N%10));
        
    }  
}

Recuerda que la división entre enteros da como resultado la parte entera de la división (sin decimales). Si por ejemplo N = 123 la operación N/10 da como resultado 12 y no 12.3 
Recuerda que el operador % obtiene el resto de la división.

Decimal a binario en java

En esta entrada vamos a escribir el programa java para convertir un número de decimal a binario.

Para escribir el programa nos vamos a basar en la forma clásica de pasar de decimal a binario, o sea, dividir el número entre 2 y quedarnos con el resto de la división. Esta cifra, que será un cero o un uno, es el dígito de menos peso (más a la derecha) del número binario. A continuación volvemos a dividir el cociente que hemos obtenido entre 2 y nos quedamos con el resto de la división. Esta cifra será la segunda por la derecha del número binario. Esta operación se repite hasta que obtengamos un cero como cociente.


De forma gráfica lo vamos a ver mucho más claro:

Si queremo convertir el número 12 en binario haremos las siguientes operaciones:


El número 12 en decimal es el 1100 en binario. El número binario se obtiene tomando los restos en orden inverso a como se han obtenido.

Los que ya sabéis algo de Java podeis pensar que para qué quiero hacer ese programa si simplemente escribiendo la instrucción:

System.out.println(Integer.toBinaryString(numero));

se mostrará el número en binario. 
El método toBinaryString de la clase Integer ya me hace el trabajo, pero se trata de que seamos capaces de desarrollar por nosotros mismos el algoritmo que realiza la conversión de decimal a binario.


Este ejercicio se suele plantear cuando se está comenzando a aprender las estructuras repetitivas (while, for, do while) y aún no se conocen los arrays por lo que la solución que se plantea no utiliza arrays y por tanto esta solución aunque es correcta solo es válida para números enteros relativamente pequeños.
/**
 * Programa que pasa un número
 * de decimal a binario
 * @author Enrique García
 */
public class Main{

    public static void main(String[] args) {

        int numero, exp, digito;
        double binario;
        Scanner sc = new Scanner(System.in);

        do{ 
            System.out.print("Introduce un numero entero >= 0: ");                                                
            numero = sc.nextInt();
        }while(numero < 0);

        exp=0;
        binario=0;
        while(numero!=0){
                digito = numero % 2;           
                binario = binario + digito * Math.pow(10, exp);                                                   
                exp++;
                numero = numero/2;
        }
        System.out.printf("Binario: %.0f %n", binario);
    }
}

Fibonacci en java

La serie de fibonacci la forman una serie de números tales que:

El primer término de la serie es el número 1
El segundo término de la serie es el número 1
Los siguientes términos de la serie de fibonacci se obtienen de la suma de los dos anteriores:

1, 1, 2, 3, 5, 8, 13, .....  

Vamos a escribir el programa java que muestra los N primeros números de la serie. El valor de N se lee por teclado.

import java.util.*;
/**
 * Serie de Fibonacci en Java
 * Programa que imprima los N primeros números de la serie de Fibonacci.
 * El primer número de la serie es 1, el segundo número es 1 y cada uno de los                                    
 * siguientes es la suma de los dos anteriores.
 * 1, 1, 2, 3, 5, 8, 13,  ....... , N
 * @author Enrique
 */
public class Main{

    public static void main(String[] args){
 
        Scanner sc = new Scanner(System.in);
        int numero,fibo1,fibo2,i;
  
        do{
            System.out.print("Introduce numero mayor que 1: ");
            numero = sc.nextInt();
        }while(numero<=1);
  
        System.out.println("Los " + numero + " primeros términos de la serie de Fibonacci son:");                 

        fibo1=1;
        fibo2=1;

        System.out.print(fibo1 + " ");
        for(i=2;i<=numero;i++){
            System.out.print(fibo2 + " ");
            fibo2 = fibo1 + fibo2;
            fibo1 = fibo2 - fibo1;
        }
        System.out.println();
    }
}

Números amigos en Java

Comprobar si dos números son amigos

Dos números enteros positivos A y B son números amigos si la suma de los divisores propios de A es igual a B y la suma de los divisores propios de B es igual a A.

Los divisores propios de un número incluyen la unidad pero no el propio número.

Un ejemplo de números amigos son los números 220 y 284.
Los divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110.
La suma de los divisores propios de 220 da como resultado 284
Los divisores propios de 284 son 1, 2, 4, 71 y 142.
La suma de los divisores propios de 284 da como resultado 220.
Por lo tanto 220 y 284 son amigos.

Otras parejas de números amigos son:

 1184,   1210
 2620,   2924
 5020,   5564
 6232,   6368
10744, 10856
12285, 14595
17296, 18416

Vamos a escribir el programa que calcula si dos números son amigos:
import java.util.*;
/**
 * Programa Java que determina si dos números son amigos.
 * Dos números son amigos si la suma de los divisores propios del primero
 * es igual al segundo y viceversa.
 */
public class NumerosAmigos {

    public static void main(String[] args) {
 
        int i,suma=0, n1, n2;
        Scanner sc = new Scanner(System.in);
        System.out.print("Introduce primer número: ");
        n1 = sc.nextInt();
        System.out.print("Introduce segundo número: ");
        n2 = sc.nextInt();
  
        for(i = 1;i < n1;i++){  // for para sumar todos los divisores propios de n1                                   
             if(n1%i==0){
                suma=suma+i;
             }
        }
  
        // si la suma de los divisores de n1 es igual a n2
        if(suma==n2){
           suma=0;
           for(i = 1;i < n2;i++){  // sumo los divisores propios de n2                                                
                if(n2%i==0){
                   suma=suma+i;
                }
            }
           //si la suma de los divisores de n2 es igual a n1
           if(suma==n1){
              System.out.println("Son Amigos");
           }else{
              System.out.println("No son amigos");
           }
        }        
        else{
             System.out.println("No son amigos");
        }
    }
}

Número perfecto en java

Qué es un número perfecto?

Un número es perfecto si es igual a la suma de todos sus divisores positivos sin incluir el propio número.

Por ejemplo, el número 6 es perfecto. 

El 6 tiene como divisores: 1, 2, 3 y 6 pero el 6 no se cuenta como divisor para comprobar si es perfecto.

Si sumamos 1 + 2 + 3 = 6 

Los siguientes números perfectos después del 6 son 28, 496, 8128, 33550336, 8589869056.

En esta entrada vamos a desarrollar el algoritmo para comprobar si un número es perfecto.
El programa pide por teclado un número y muestra si es perfecto o no. mediante un bucle for sumaremos los divisores del número. Al final si esta suma es igual al número mostraremos el mensaje correspondiente.

Programa java para calcular si un número es perfecto:

import java.util.Scanner;
public class NumeroPerfecto {
    public static void main(String[] args) {
        int i, suma = 0, n;
        Scanner sc = new Scanner(System.in);
        System.out.println("Introduce un número: ");
        n = sc.nextInt();
        for (i = 1; i < n; i++) {  // i son los divisores. Se divide desde 1 hasta n-1                            
            if (n % i == 0) {
                suma = suma + i;   // si es divisor se suma
            }
        }
        if (suma == n) {           // si el numero es igual a la suma de sus divisores es perfecto                
            System.out.println("Perfecto");
        } else {
            System.out.println("No es perfecto");

        }
    }
}
Utilizando el algoritmo anterior vamos a escribir ahora el programa Java que muestre los números perfectos entre 1 y 1000

public class NumerosPerfectos1a1000 {
    public static void main(String[] args) {
        int i, j, suma;
        System.out.println("Números perfectos entre 1 y 1000: ");
        for(i=1;i <= 1000;i++){      // i es el número que vamos a comprobar
            suma = 0;
            for(j = 1;j < i;j++){    // j son los divisores. Se divide desde 1 hasta i-1                          
                 if(i % j==0){
                    suma = suma + j; // si es divisor se suma
                 }
            }
          if(i == suma){             // si el numero es igual a la suma de sus divisores es perfecto              
             System.out.println(i);
          }
        }
    }
}