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'.
Muy bueno
ResponderEliminarHola, hago el ejercicio de las letras, pero me salen en una sola columna:
ResponderEliminara
b
c, etc., creo debo darle alguna secuencia de escape, puede ser?
Debes haber puesto System.out.println en vez de System.out.print , error muy tipico al empezar
EliminarHay 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í:
ResponderEliminarpublic 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 = "";
}
}
muy buena parte esa de cadena muchas gracias
ResponderEliminarY 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...
ResponderEliminarvamos pirámide normal con el pico arriba no abajo
public class Prueba
Eliminar{
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();
}
}
}
ALguien no tendrá , este ejercicio pero en ( PSELNT )
ResponderEliminarPOR FA !!
Leer por teclado un número entero N no negativo y mostrar el factorial de todos los números desde 0 hasta N.
Échale un vistazo a esto. Es muy parecido a lo que buscas:
Eliminarhttps://www.youtube.com/watch?v=s-FB4uxmghY
calcular el factorial de un numero, mostrar el resultado
ResponderEliminarOtra sin usar for para factoriales
Eliminarimport 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");
}
}
}
//otro de la piramide de letras invertido sin usar for
Eliminar//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);
}
}
ayuda en un parcial. mañana. ayuden pes aquí queda mi WhatsApp 980474507
ResponderEliminarAlguien que me ayude porfiss
ResponderEliminarEjercicio 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.