Autor Tema: Ejercicios resueltos Java dibujar cuadrado asteriscos suma pares e impares leer  (Leído 16219 veces)

nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Hola, soy nuevo en JDk y queria ver cómo realizar estos dos ejercicios

Ejercicio 1:

1. Crear un programa que permita el ingreso de un valor y muestre dibujado con * un
cuadrado. (no usar estructura de control como arreglo, lista, etc.)

Ejemplo:

Ingrese valor: 4

Salida:
* * * *
* * * *
* * * *
* * * *

Ingrese valor: 7

Salida:
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *



Ejercicio 2:

Crear un menú con las siguientes opciones:

Opción 1: leer 20 números y entregue la suma de los números pares y por otro lado entregue la suma de los números impares que se ingresaron. (10 pts.)

Ejemplo: si se ingresa 6- 1- 3- 0- 5- 7- 6- 4- 8- 6 -10- 3- 5- 10- 6- 12- 2- 30- 17- 31
debe mostrar la suma de pares= 100, la suma de impares = 72

Opción 2: Leer varias palabras y que se detenga al leer FIN, y muestre todas las palabras que se leyeron. (10 pts.)

Opción 3: Leer 30 palabras y mostrar cuantas veces esta una determinada palabra. La palabra a buscar debe leerse antes de ingresar las 30 palabras. (10 pts.)

Opción 4: Leer 2 números. El primero debe estar entre 5 y 50 y el segundo no debe ser par.

Entregar como resultado la suma de los dos números, en caso de que sean correctos los
valores, en caso contrario mostrar un mensaje de error. (10 pts.)

numero1=5 y número 2=6 salida= ERROR (el segundo número es par)
numero 1= 60 y número 2=7 salida= ERROR (número 1 no está entre 5 y 50)
número 1=15 y número 2= 77 salida= 92

De antemano muchas gracias
« Última modificación: 27 de Octubre 2020, 21:01 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda con unos ejercicios
« Respuesta #1 en: 09 de Septiembre 2020, 13:23 »
Hola
Ejercicio 1 lo resuelves usando dos bucles for anidados, cada uno se va a repetir las veces que indique el valor ingresado por teclado.

El bucle interno escribiría en la misma línea un asterisco cada vez que se repita.
El bucle externo, lo que hace es repetir este bucle interno y cuando termina cada repetición, hace un salto de línea para que el bucle interno siga escribiendo asteriscos en la línea siguiente.

ES más fácil de lo que parece, intenta hacerlo.
Si no te sale, pregunta por aquí o si quieres fíjate en el código que pongo a continuación.
Pero importante que primero lo intentes tú, aunque te salga un horror de código que no sirva para nada.
Se aprende más intentando y fallando, que copiando directamente una solución.

Código: [Seleccionar]
public class Ej1 {

public static void main(String[] args) {

Scanner teclado = new Scanner(System.in);
System.out.print("Ingrese valor: ");
int valor = teclado.nextInt();
teclado.close();

/*
* Usamos dos bucles anidados para crear el cuadrado.
* Si pensamos en el cuadrado como una tabla de asteriscos,
* el primer bucle crearía las FILAS
* y el segundo las COLUMNAS
*/
for (int fila = 1; fila <= valor; fila++) {
for (int columna = 1; columna <= valor; columna++)
System.out.print("*");

System.out.println();//Salto de línea para pasar a la siguiente FILA
}

}

}


El segundo ejercicio.
Hay cuatro opciones y recomiendo "modular" el código. Es decir, que cada opción sea un procedimiento escrito por separado del código principal.

El main, el código principal, solo debería presentar menú y pedir opción. Que se repita hasta que el usuario elija terminar el programa.
Con un switch, analiza la opción ingresada y llamaría al procedimiento correspondiente según dicha opción.
Este podría ser el código del main. Como digo, lo que hace es invocar los procedimientos que resuelven cada opción del menú

Citar
   public static void main(String[] args) {
      
      int opcion = 0;
      
      do {
         System.out.println("\n\t\tMENU\n");
         System.out.println("(1) - Leer 20 numeros");
         System.out.println("(2) - Leer palabras");
         System.out.println("(3) - Veces se repite una palabra");
         System.out.println("(4) - Leer 2 numeros");
         System.out.println("(5) - CERRAR PROGRAMA");
         opcion = Integer.parseInt(teclado.nextLine());
         
         switch(opcion) {
         case 1:
            leer20numeros();
            System.out.println("\nPulse INTRO para volver al menu");
            teclado.nextLine();
            break;
         case 2:
            leerPalabras();
            System.out.println("\nPulse INTRO para volver al menu");
            teclado.nextLine();
            break;
         case 3:
            vecesRepitePalabra();
            System.out.println("\nPulse INTRO para volver al menu");
            teclado.nextLine();
            break;
         case 4:
            leer2numeros();
            System.out.println("\nPulse INTRO para volver al menu");
            teclado.nextLine();
            break;
         case 5:
            System.out.println("\n\t\tFIN DE PROGRAMA");
            break;
         default:
            System.out.println("Opcion equivocada");
            System.out.println("\nPulse INTRO para volver al menu");
            teclado.nextLine();
         }
         
      }while(opcion != 5);

   }

El código de cada opción, no es difícil.

Opcion 1, leer 20 números  y sumar por separado los pares y los impares.
Declaramos dos variables acumuladora, una para suma pares y la otra para los impares
Usas un bucle for que lea acepte 20 números por teclado.
Cada vez que se ingresa un número, se comprueba si es par o impar y se acumula en la variable correspondiente.
Podemos saber si un número es par dividiéndolo por 2 y comprobar si el resto es 0, es decir, usamos el operador "módulo", que en Java está representado con el operador %

Cuando termina el bucle, se muestran ambas sumas en pantalla.

Te dejo una solución, pero de nuevo insisto en la importancia de que primero lo intentes tú por tu cuenta.

Código: [Seleccionar]
private static void leer20numeros() {
int sumaPares = 0, sumaImpares = 0;
for (int i = 1; i <= 20; i++) {
System.out.println("\nEntrada " + i + "/20");
System.out.print("Ingrese numero: ");
int numero = Integer.parseInt(teclado.nextLine());
if (numero % 2 == 0)
sumaPares += numero;
else
sumaImpares += numero;
}
System.out.println("\nSuma de pares: " + sumaPares);
System.out.println("Suma de impares: " + sumaImpares);
}

Opción 2: Leer varias palabras y que se detenga al leer FIN, y muestre todas las palabras que se leyeron.
Hay que usar un bucle while y que pida palabras para ir coleccionándolas.
El bucle while se repite mientras la palabra ingresada sea distinto de "FIN".
Al terminar el bucle, se muestran las palabras ingresadas.

Para coleccionar las palabras, hay varias fórmulas.
Una podría ser usar una estructura de datos dinámica como List,ArrayList, etc..

Otra podría ser usar un String e ir concatenando las palabras una tras otra, intercalando una coma o un espacio en blanco entre cada palabra.
Sin embarco, los objetos String son "inmutables", no se pueden modificar. Entonces, cuando concatenamos Strings, nos parece que los estamos modificando, pero en realidad se está creando un objeto nuevo, y los otros objetos String que hemos usado para concatenar, no desaparecen. Se quedan en memoria ocupando recursos hasta que termine el programa.

A efectos prácticos, esto no es problema para un ejercicio tan sencillo, pero no esta de más que intentemos que nuestro código sea lo más eficiente posible.
Así que para evitar esto, podemos usar la clase StringBuilder.
Esta clase nos da un objeto similar a un String que sí es "mutable" y podremos concatenarle todos los String que queramos sin que eso suponga desperdiciar recursos.

Pero bueno, en cualquier caso, estas tres formas de solucionarlo son válidas.
Yo he optado por usar StringBuilder:

Código: [Seleccionar]
private static void leerPalabras() {
/*
* Las palabras a leer se podrían concatenar en un
* String normal. Pero internamente un String es estático,
* no se puede modificar, así que cuando concatenamos dos
* String, no estamos modificando ninguno, estamos creando un
* tercer String nuevo. Esto supone consumir más recursos del sistema.
*
* StringBuilder es un objeto dinámico, si es modificable y las concatenaciones
* que hagamos no implican crear nuevos objetos, solo modificar el ya existente.
*/
StringBuilder palabras = new StringBuilder();
String palabra = "";
while (!palabra.equals("FIN")) {
System.out.print("Ingrese palabra (FIN para terminar): ");
palabra = teclado.nextLine();
if (!palabra.equals("FIN")) {
palabras.append(palabra);
palabras.append(" ");
}
}
System.out.println("\nPalabras ingresadas:");
System.out.println(palabras.toString());
}

Opción 3: Leer 30 palabras y mostrar cuantas veces esta una determinada palabra. La palabra a buscar debe leerse antes de ingresar las 30 palabras.
Primero pedimos la palabra a buscar.
Luego las 30 palabras donde debemos buscar.

Como ya sabemos de antemano que han de ser 30 palabra, esta vez para coleccionar estas palabras podemos usar un simple array de String.

Cuando tengamos las 30 palabras, recorremos el array con un bucle y cada palabra la comparamos con la que estamos buscando.
Si son iguales, aumentamos una variable contador.
Luego mostramos resultado

Código: [Seleccionar]
private static void vecesRepitePalabra() {
System.out.print("\nIngrese palabra a buscar: ");
String palabra = teclado.nextLine();
System.out.println("A continuación ingrese 30 palabras...");
String[] palabras = new String[30];

for (int i = 0; i < 30; i++) {
System.out.println("\nEntrada " + (i+1) + "/30");
System.out.print("Palabra: ");
palabras[i] = teclado.nextLine();
}
//Contamos repeticiones
int repite = 0;
for (String p: palabras)
if (p.contentEquals(palabra))
repite++;
//Resultado
System.out.println("\nLa palabra " + palabra + " se repite " + repite + " veces.");
}

Opción 4: Leer 2 números. El primero debe estar entre 5 y 50 y el segundo no debe ser par.
Entregar como resultado la suma de los dos números, en caso de que sean correctos los
valores, en caso contrario mostrar un mensaje de error.


Muy sencillo, pedimos dos números.
Comprobamos si el primero está entre 5 y 50.
Si no lo está, mensaje de error y se acabó.

Si es correcto, comprobamos el segundo número.
Si no lo es, mensaje error y fin.

Si es correcto, pues mostramos la suma de ambos números.

Código: [Seleccionar]
private static void leer2numeros() {
int num1 = 0, num2 = 0;

System.out.print("\nPrimer numero (entre 5 y 50): ");
num1 = Integer.parseInt(teclado.nextLine());
System.out.print("Segundo numero (ha de ser impar): ");
num2 = Integer.parseInt(teclado.nextLine());

if (num1 < 5 || num1 > 50)
System.out.println("ERROR (numero 1 no está entre 5 y 50)");
else if (num2 % 2 == 0)
System.out.println("ERROR (el segundo número es par)");
else
System.out.println("Suma de numeros: " + (num1 + num2));
}


Y eso es todo, a continuación de dejo el código de esta clase al completo, main y procedimientos.
E insisto una vez más, intenta comenzar tú un código, no importa si sale mal o si apenas llegas a escribir 5 líneas antes de atascarte.
Es así como se aprende, cometiendo errores.

Cualquier duda que tengas, pregúntala por aquí.
Un saludo.

Código: [Seleccionar]
public class Ej2 {

/*
* Objeto Scanner lo declaramos en ámbito global para que
* sea accesible a todos los métodos/procedimientos y
* puedan utilizarlo
*/
private static Scanner teclado = new Scanner(System.in);

public static void main(String[] args) {

int opcion = 0;

do {
System.out.println("\n\t\tMENU\n");
System.out.println("(1) - Leer 20 numeros");
System.out.println("(2) - Leer palabras");
System.out.println("(3) - Veces se repite una palabra");
System.out.println("(4) - Leer 2 numeros");
System.out.println("(5) - CERRAR PROGRAMA");
opcion = Integer.parseInt(teclado.nextLine());

switch(opcion) {
case 1:
leer20numeros();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 2:
leerPalabras();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 3:
vecesRepitePalabra();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 4:
leer2numeros();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 5:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("Opcion equivocada");
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
}

}while(opcion != 5);

}

private static void leer20numeros() {
int sumaPares = 0, sumaImpares = 0;
for (int i = 1; i <= 20; i++) {
System.out.println("\nEntrada " + i + "/20");
System.out.print("Ingrese numero: ");
int numero = Integer.parseInt(teclado.nextLine());
if (numero % 2 == 0)
sumaPares += numero;
else
sumaImpares += numero;
}
System.out.println("\nSuma de pares: " + sumaPares);
System.out.println("Suma de impares: " + sumaImpares);
}


private static void leerPalabras() {
/*
* Las palabras a leer se podrían concatenar en un
* String normal. Pero internamente un String es estático,
* no se puede modificar, así que cuando concatenamos dos
* String, no estamos modificando ninguno, estamos creando un
* tercer String nuevo. Esto supone consumir más recursos del sistema.
*
* StringBuilder es un objeto dinámico, si es modificable y las concatenaciones
* que hagamos no implican crear nuevos objetos, solo modificar el ya existente.
*/
StringBuilder palabras = new StringBuilder();
String palabra = "";
while (!palabra.equals("FIN")) {
System.out.print("Ingrese palabra (FIN para terminar): ");
palabra = teclado.nextLine();
if (!palabra.equals("FIN")) {
palabras.append(palabra);
palabras.append(" ");
}
}
System.out.println("\nPalabras ingresadas:");
System.out.println(palabras.toString());
}

private static void vecesRepitePalabra() {
System.out.print("\nIngrese palabra a buscar: ");
String palabra = teclado.nextLine();
System.out.println("A continuación ingrese 30 palabras...");
String[] palabras = new String[30];

for (int i = 0; i < 30; i++) {
System.out.println("\nEntrada " + (i+1) + "/30");
System.out.print("Palabra: ");
palabras[i] = teclado.nextLine();
}
//Contamos repeticiones
int repite = 0;
for (String p: palabras)
if (p.contentEquals(palabra))
repite++;
//Resultado
System.out.println("\nLa palabra " + palabra + " se repite " + repite + " veces.");
}

private static void leer2numeros() {
int num1 = 0, num2 = 0;

System.out.print("\nPrimer numero (entre 5 y 50): ");
num1 = Integer.parseInt(teclado.nextLine());
System.out.print("Segundo numero (ha de ser impar): ");
num2 = Integer.parseInt(teclado.nextLine());

if (num1 < 5 || num1 > 50)
System.out.println("ERROR (numero 1 no está entre 5 y 50)");
else if (num2 % 2 == 0)
System.out.println("ERROR (el segundo número es par)");
else
System.out.println("Suma de numeros: " + (num1 + num2));
}
}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Re:Ayuda con unos ejercicios
« Respuesta #2 en: 09 de Septiembre 2020, 23:16 »
Muchas gracias, te he hecho caso e intar hacerlo yo el primer ejercicio gracias a tu ayuda me a resultado facil, no se como subir una captura de mi codigo pero a quedado parecido. Y el segundo ejercicio me a sido dificil y no me a resultado, e me guiado pero con tu codigo pero no me a resultado a si que solo copie el codigo y sigo comparando el porque no resulta el mio.

Saludos.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda con unos ejercicios
« Respuesta #3 en: 10 de Septiembre 2020, 00:05 »
Muchas gracias, te he hecho caso e intar hacerlo yo el primer ejercicio gracias a tu ayuda me a resultado facil, no se como subir una captura de mi codigo pero a quedado parecido. Y el segundo ejercicio me a sido dificil y no me a resultado, e me guiado pero con tu codigo pero no me a resultado a si que solo copie el codigo y sigo comparando el porque no resulta el mio.

Saludos.

Puedes compartir tu código pegando el texto aquí en el foro directamente.

Al escribir un mensaje, arriba verás varios botones.
Si pulsas el que tiene este símbolo -->

Aparecerán en el mensaje las etiquetas CODE.
Puedes pegar el código dentro de esas etiquetas.

Y si no, lo pegas tal cuál y ya está pero con esas etiquetas quedará mejor.


Así podemos ver tu código y averiguar porque está fallando.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Re:Ayuda con unos ejercicios
« Respuesta #4 en: 12 de Septiembre 2020, 01:14 »
Hola, hice una variación del primer ejercicio para el que solicité ayuda. Me quedó algo simple y sin mucho detalle, pero me gustaría su opinión.

public class Ejemplo1.9 {
       
        public static void main (String[] args) {
 
        Scanner leer=new Scanner(system.in);
        num=leer.nextInt();
       
        for(int j=1;j < num+1; j++) {
             for(int i=0; i < j;i++) {
                  System.out.print("* ");
             }
             System.out.print("\n");
       }
}


Pd:puede que algo este mal ya que me toco reescribirlo a mano porque no me deja pegar codigo o subir una foto :c
« Última modificación: 27 de Octubre 2020, 21:03 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda con unos ejercicios
« Respuesta #5 en: 12 de Septiembre 2020, 16:45 »
Hola hize una variable del primer ejercicio que solicite ayuda, me quedo algo simple y sin mucho detalle pero me gustaria su opinion

public class Ejemplo1.9 {
       
        public static void main (String[] args) {
 
        Scanner leer=new Scanner(system.in);
        num=leer.nextInt();
       
        for(int j=1;j < num+1; j++) {
             for(int i=0; i < j;i++) {
                  System.out.print("* ");
             }
             System.out.print("\n");
       }
}


Supongo que funcionar, funciona.
Así que podemos decir que está "bien".

Sin embargo, digamos que se vale de una "complicación" innecesaria y además al leerlo no es tan evidente el propósito del código.
Me refiero a que por ejemplo el código que yo puse, es evidente que leemos un valor por teclado y lo usamos como límite para ambos bucles.

En la variante que tú has escrito, en esencia hace esto mismo, pero no es tan evidente al leerlo.
El valor se usa como condición límite del primer bucle, pero sumándole + 1.., y luego para el segundo bucle como límite se usa el índice del primer bucle... que no tiene un valor fijo y va aumentando con cada iteración....

Si alguien, que desconoce el enunciado y el propósito del ejercicio, lee ese código... pues le va a costar entender la lógica que se está siguiendo.

Debemos procurar que nuestro código, no solo lo entienda la máquina que lo va a compilar, también que sea legible y de fácil comprensión para otros humanos.

Pero bueno, tu código es correcto. Y aunque no sea la solución ideal, como experimento propio está bien.
Es buena idea explorar soluciones alternativas y experimentar con el código.
Ayuda mucho a familiarizarse con la programación general y con el lenguaje en particular.
Un saludo.
« Última modificación: 12 de Septiembre 2020, 16:47 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".