Ejercicios Resueltos de Bucles Anidados en Java.

Bucles anidados en Java

Primera relación de ejercicios para practicar con los bucles anidados en Java. En este caso todos los ejercicios propuestos se resuelven anidando dos bucles for aunque también se podrían resolver mediante dos bucles while o do..while anidados o mediante combinaciones de los tres tipos: for, while, do..while. Te animo a que los resuelvas utilizando bucles distintos al for utilizado aquí.
1.  Leer por teclado un número entero N no negativo y mostrar el factorial de todos los números desde 0 hasta N.
El factorial de un número entero se expresa mediante el símbolo ‘!’ y se define de la siguiente forma:
Si n = 0 entonces 0! = 1
Si n > 0 entonces
n! = n * (n – 1) * (n – 2) * …. * 3 * 2 * 1
Por ejemplo, n = 5 entonces
5! = 5 * 4 * 3 * 2 * 1 = 120
Solución:
import java.util.Scanner;

public class BucleAnidados1 {

    public static void main(String[] args) {
        int N;
        double factorial;
        Scanner sc = new Scanner(System.in);
       
        //Leer un número entero >= 0
        do{
            System.out.print("Introduce un número > 0: ");
            N = sc.nextInt();
        }while(N<0);

        for(int i = 0; i <= N ; i++){ //para cada número desde 1 hasta N                                               
           
            //se calcula su factorial
            factorial = 1;
            for(int j = 1; j <= i; j++){
                factorial = factorial * j;
            }

            //se muestra el factorial
            System.out.printf("%2d! = %.0f %n", i, factorial);

        }
    }
   
}
El primer bucle for representa todos los números desde 0 hasta el valor N que se ha introducido por teclado. La variable i toma todos los valores desde 0 hasta N. Para cada uno de estos valores se calcula su factorial mediante el seguno bucle for que se encuentra dentro del primero. Para calcular el factorial se multiplican todos los números desde 1 hasta el número i por el que vamos en cada iteración del for exterior. El resultado se guarda en la variable factorial. Esta variable se ha declarado de tipo double porque el valor del factorial de un número puede fácilmente sobrepasar el rango de los int.
Cuando acaba este bucle interior tendremos el factorial del número i. Mediante una instrucción System.out.printf se muestra el resultado por pantalla y comenzará una nueva iteración del primer for.
Si no tienes muy claro cómo funciona el printf puedes ver ejemplos en esta entrada: java printf.
Ejemplo de ejecución:
Introduce un número > 0: 10
 0! = 1
 1! = 1
 2! = 2
 3! = 6
 4! = 24
 5! = 120
 6! = 720
 7! = 5040
 8! = 40320
 9! = 362880
10! = 3628800                                                                                                          

2.  Leer por teclado un número entero N no negativo y mostrar la suma de los factoriales de todos los números desde 0 hasta N.
Este ejercicio es una variante del anterior. Para resolverlo basta con añadir otra variable suma que actúe como acumulador donde sumaremos el factorial obtenido de cada número.
La variable suma también se ha declarado de tipo double igual que la variable factorial.
Solución:
import java.util.Scanner;
public class BucleAnidados2 {

    public static void main(String[] args) {
        int N;
        double factorial, suma = 0;
        Scanner sc = new Scanner(System.in);

        //Leer un número entero >= 0
        do {
            System.out.print("Introduce un número > 0: ");
            N = sc.nextInt();
        } while (N < 0);

        for (int i = 0; i <= N; i++) { //para cada número desde 1 hasta N

            //se calcula su factorial
            factorial = 1;
            for (int j = 1; j <= i; j++) {
                factorial = factorial * j;
            }

            //se muestra el factorial
            System.out.printf("%n%2d! = %.0f %n", i, factorial);

            //se suma el factorial o
            suma = suma + factorial;
        }

        //Al final del proceso se muestra la suma de todos los factoriales
        System.out.printf("Suma de los factoriales desde 0 hasta %d: %.0f%n", N, suma);                                
    }
}
Ejemplo de ejecución:
Introduce un número > 0: 12
 0! = 1
 1! = 1
 2! = 2
 3! = 6
 4! = 24
 5! = 120
 6! = 720
 7! = 5040
 8! = 40320
 9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600

Suma de los factoriales desde 0 hasta 12: 522956314                                                                    

3.  Programa que muestre lo siguiente por pantalla:
ZYWXVUTSRQPONMLKJIHGFEDCBA
YWXVUTSRQPONMLKJIHGFEDCBA
WXVUTSRQPONMLKJIHGFEDCBA
XVUTSRQPONMLKJIHGFEDCBA
VUTSRQPONMLKJIHGFEDCBA
UTSRQPONMLKJIHGFEDCBA
TSRQPONMLKJIHGFEDCBA
SRQPONMLKJIHGFEDCBA
RQPONMLKJIHGFEDCBA
QPONMLKJIHGFEDCBA
PONMLKJIHGFEDCBA
ONMLKJIHGFEDCBA
NMLKJIHGFEDCBA
MLKJIHGFEDCBA
LKJIHGFEDCBA
KJIHGFEDCBA
JIHGFEDCBA
IHGFEDCBA
HGFEDCBA
GFEDCBA
FEDCBA
EDCBA
DCBA
CBA
BA
A

Como podemos ver, en este caso se trata de mostrar las letras del abecedario (sin la Ñ) en mayúsculas y en orden inverso. A continuación en cada fila mostrar una letra menos hasta llegar a mostrar solamente la A.
Solución:
public class BucleAnidados3 {

    public static void main(String[] args) {
        for (char x = 'Z'; x >= 'A'; x--) {
            for (char y = x; y >= 'A'; y--) {                                                                          
                System.out.print(y);
            }
            System.out.println();
        }
    }
}
Para resolverlo hemos anidado dos bucles for. En este caso las variables de control del bucle son de tipo char. La variable del primer for la vamos a llamar x y tomará los valores desde la 'Z' hasta la 'A'. La variable del for interior la vamos a llamar y. Los valores que tomará esta variable irán desde el valor de la variable x hasta 'A'.

De esta forma, cuando comienza la ejecución del for exterior el valor que toma la variable x es 'Z' y comienza la ejecución del for interior. El valor inicial de y será 'Z' y este bucle interior mostrará todas las letras desde 'Z' hasta 'A'. Cuando este bucle termina se hace un salto de línea y comienza una nueva iteración del bucle exterior. Ahora el valor de x será 'Y' y comienza la ejecución del for interior. El valor inicial de la variable y será 'Y' y este bucle mostrará todas las letras desde la 'Y' hasta la 'A'. Este proceso se repite hasta que finalmente se muestre solamente la letra 'A'.

14 comentarios:

  1. Hola, hago el ejercicio de las letras, pero me salen en una sola columna:
    a
    b
    c, etc., creo debo darle alguna secuencia de escape, puede ser?

    ResponderEliminar
    Respuestas
    1. Debes haber puesto System.out.println en vez de System.out.print , error muy tipico al empezar

      Eliminar
  2. Hay que concatenar la variable y dentro del segundo for, dentro del primero for hacer que se imprima el teto, despues de eso blanquear la cadena, para que arroje el resultado, por que haces el codigo tal cual aparece no te arrojará ese resultado, seria algo así:

    public static void main(String[] args) {

    String cadena = "";

    for (char x = 'Z'; x >= 'A'; x--){
    for (char y = x; y >= 'A'; y--){
    // System.out.println(x + "" + y);
    cadena = cadena + y;
    }
    System.out.println(cadena);
    cadena = "";
    }

    }

    ResponderEliminar
  3. muy buena parte esa de cadena muchas gracias

    ResponderEliminar
  4. Y como sería para hacer la pirámide normal? o sea que vaya de menos a más: a, luego ab, luego abc, abcd etc o z,zy,zyx...

    vamos pirámide normal con el pico arriba no abajo

    ResponderEliminar
    Respuestas
    1. public class Prueba
      {
      public static void main(String[] args)
      {
      for(char x='A';x<='Z';x++)
      {
      for(char y=x;y>='A';y--)
      {
      System.out.print(y);
      }
      System.out.println();
      }
      }
      }

      Eliminar
  5. ALguien no tendrá , este ejercicio pero en ( PSELNT )
    POR FA !!

    Leer por teclado un número entero N no negativo y mostrar el factorial de todos los números desde 0 hasta N.

    ResponderEliminar
    Respuestas
    1. Échale un vistazo a esto. Es muy parecido a lo que buscas:
      https://www.youtube.com/watch?v=s-FB4uxmghY

      Eliminar
  6. calcular el factorial de un numero, mostrar el resultado

    ResponderEliminar
    Respuestas
    1. Otra sin usar for para factoriales
      import java.util.*;

      public class MyClass {
      public static void main(String args[]) {

      Scanner lector = new Scanner(System.in); //Utilidad de interacció

      System.out.println("Ingresar un numero:"); //Utilidad para escribir en pantalla
      int m = lector.nextInt(); //nextInt recupera un valor entero desde teclado
      lector.nextLine();
      System.out.println("-------------------");
      int c=0,d,f=1,n1=m;
      if ( m >= 0){
      if (m == 0){
      System.out.println("La suma de los factoriales del: 0 es igual a 1");
      }else{
      System.out.println("0! = 1" );
      do{
      c = c + 1;
      n1 = n1 - 1;
      f = f * c;
      System.out.println(c+"! = " + f);
      }while(m != c);
      System.out.println("La suma de los factoriales del: " + m + " es igual a " + f);
      }
      }else{
      System.out.println("No se puede sacar factoriales");
      }

      }
      }

      Eliminar
    2. //otro de la piramide de letras invertido sin usar for
      //Abraham Villarreal
      import java.util.*;
      import java.io.IOException;
      public class MyClass {
      public static void main(String args[]) throws IOException {

      Scanner lector = new Scanner(System.in); //Utilidad de interacción

      System.out.println("Presione el enter para empezar: ");
      lector.nextLine();
      char c;
      int d,a;
      c = 91;
      a = c;
      do{
      System.out.println();
      a = a - 1;
      if (a != 64){
      d = a;
      do{
      System.out.print((char)(d));
      d = d - 1;
      }while(d != 64);
      }else{
      System.out.println("Fin del programa");
      }
      }while (a != 64);
      }
      }

      Eliminar
  7. ayuda en un parcial. mañana. ayuden pes aquí queda mi WhatsApp 980474507

    ResponderEliminar
  8. Alguien que me ayude porfiss
    Ejercicio 1. Usuario y Contraseña
    Solicitar usuario y contraseña para ingresar al sistema, teniendo como posibles usuario a: Invitado y
    Administrador, si es usuario Invitado no es necesario la contraseña para ingresar y si es Administrador
    la contraseña es: Quimicos2021.
    Se tienen solo 5 oportunidades para ingresar sino el sistema se cierra y debe enviar un mensaje de
    error de ingreso, si logra ingresar debe dar un mensaje de bienvenido al sistema se puede ingresar con
    cualquiera de los dos usuarios.

    ResponderEliminar