Autor Tema: Redondeo round, floor, ceil con Java redondear al entero inferior CU00906C#  (Leído 7774 veces)

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Propuesta de solución para el ejercicio CU00906C del curso online de java avanzado:

Clase principal main
Código: [Seleccionar]
package ejercicioscu00906c;

public class EjerciciosCu00906c {
   
    public static void main(String[] args) {
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        String continuar;
        do {
            System.out.println("Introduzca valor de segundos: ");
            entrada.Agregar();
            double segundos = Double.valueOf(entrada.getEntrada());
            double z = (segundos + 1) / 60;
            double minutos = Math.ceil(z);
            int x = (int) (minutos);
            System.out.println("El minuto es el " + x);
            System.out.println("¿Otro valor (s/n)? ");
            entrada.Agregar();
            continuar = entrada.getEntrada();
        } while (continuar.equalsIgnoreCase("s"));
    }
   
}
« Última modificación: 15 de Agosto 2019, 20:50 por Ogramar »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicios de java avanzado I CU00906C
« Respuesta #1 en: 28 de Junio 2016, 22:46 »
Hola, no he podido compilar, falta la clase EntradaDeTeclado

Saludos

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Ejercicios de java avanzado I CU00906C
« Respuesta #2 en: 28 de Junio 2016, 23:03 »
El mismo error que el otro es que me olvide de esa clase.
Clase entrada del teclado
Código: [Seleccionar]
package ejercicioscu00906c;

import java.util.Scanner;

public class EntradaDeTeclado {

    private String entradaTeclado;
    Scanner sc = new Scanner(System.in);

    public EntradaDeTeclado() {
        entradaTeclado = "";
    }

    public String Agregar() {
        entradaTeclado = sc.nextLine();
        return entradaTeclado;
    }

    public String getEntrada() {
        return entradaTeclado;
    }

}

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola DRANXZ88 todo bien, lo único que veo mejorable sería detectar que el segundo 5400 seguiría siendo el minuto 90 y valores no permitidos de segundos para dar un mensaje de aviso de que ese valor de segundos no es válido, por ejemplo:

Introduzca valor de segundos:
5400
El minuto es el 91
¿Otro valor (s/n)?


Introduzca valor de segundos:
70000
El minuto es el 1167
¿Otro valor (s/n)?

Saludos

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Corrección del ejercicios según tu recomendaciones gracia y esperando sus opiniones.
Código: [Seleccionar]
package ejercicioscu00906c;

public class EjerciciosCu00906c {

    public static void main(String[] args) {
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        String continuar;
        do {
            System.out.println("Introduzca valor de segundos: ");
            entrada.Agregar();
            double segundos = Double.valueOf(entrada.getEntrada());
            double z = (segundos + 1) / 60;
            double minutos = Math.ceil(z);
            int x = (int) (minutos);
            if (segundos < 5400) {
                System.out.println("El minuto es el " + x);

            } else if (segundos == 5400) {
                x = x - 1;
                System.out.println("El minuto es el " + x);

            } else {
                System.out.println("Segundo no es valido ya supera el rango. ");
            }
            System.out.println("¿Otro valor (s/n)? ");
            entrada.Agregar();
            continuar = entrada.getEntrada();
        } while (continuar.equalsIgnoreCase("s"));
    }

}

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Lo veo perfecto DRANXZ88

Saludos

nia

  • Sin experiencia
  • *
  • Mensajes: 6
    • Ver Perfil
Re:Redondeo round, floor, ceil con Java redondear al entero inferior CU00906C
« Respuesta #6 en: 27 de Septiembre 2016, 09:23 »
Buenas,

Me gustaría añadir mi opinión, respecto a la corrección del ejercicio introducido por DRANXZ88.

Si ejecutas el código al introducir como valor de los segundos: 2595
El resultado en minutos da 44, cuándo debería ser 43, tal y como pone en el enunciado del ejercicio.

En la línea donde pone:
Código: [Seleccionar]
double minutos = Math.ceil(z);
Debería ser con la función round, y saldrá correctamente el ejemplo anterior. Así también solo necesitarías un if (para mostrar los valores menores o iguales que 5400) y su else (para controlar los números no válidos), porque ya te saldría correctamente al introducir como valor de segundos 5400 a 90 minutos.

Saludos.




Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola nia, parece que tienes razón. Gracias por el aporte!

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Sí, tiene razón nia. Gracias por la corrección, así de apoco iremos mejorando todos juntos.
« Última modificación: 01 de Octubre 2016, 19:00 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Redondeo round, floor, ceil con Java redondear al entero inferior CU00906C
« Respuesta #9 en: 14 de Diciembre 2016, 11:06 »
Hola, cuando estaba resolviendo este ejercicio y quise compararlo con los códigos de otros compañeros, me encontré con el de DRANXZ88,  y pienso que el código de él está correcto, y que usar ceil para el redondeo es la forma que mejor se adapta al resultado que pide el enunciado,  puesto que siempre vamos un minuto adelantado, es decir, estamos comprobando durante que minuto nos enconramos, no cuando se ha cumplido. Pongo  un ejemplo del código que he usado para tal y el resultado.

Código: [Seleccionar]
import java.util.Random;

public class Test{

public static void main(String[] args) {
Random rnd = new Random();
double a, c;
a = 1+ 1;
int b = 0;
for(int i = 0; i < 5400; i++){
/*sumamos 1 a i porque si no lo hacemos, cuando el segundo sea el 60 nos
* dirá que pertenece al minuto 1 y según el enunciado ya debe de pertenecer al minuto
* siguiente, esto nos pasa con todos los segundos que son multiplos de 60.
* */
a = i+1;
if(a%60 == 0) {
System.out.print("Valores entre " + b + " y " + i + " enstán en el minuto: " +
Math.ceil(a/60));
c = i - rnd.nextInt(59)+1; // escogemos un segundo al azar entre los valores en los que nos encontremos
// Si estamos entre 0 y 59, será un valor entre estos.
System.out.print("; Ej: " + c + "seg + 1 / 60 con ceil=");
c++;
System.out.println(Math.ceil(c/60) + "; con round=" + Math.round(c/60));
b += 60;
}
}
}

Captura de la ejecución:
Código: [Seleccionar]
Valores entre 0 y 59 enstán en el minuto: 1.0; Ej: 25.0seg + 1 / 60 con ceil=1.0; con round=0
Valores entre 60 y 119 enstán en el minuto: 2.0; Ej: 70.0seg + 1 / 60 con ceil=2.0; con round=1
Valores entre 120 y 179 enstán en el minuto: 3.0; Ej: 124.0seg + 1 / 60 con ceil=3.0; con round=2
Valores entre 180 y 239 enstán en el minuto: 4.0; Ej: 185.0seg + 1 / 60 con ceil=4.0; con round=3
Valores entre 240 y 299 enstán en el minuto: 5.0; Ej: 256.0seg + 1 / 60 con ceil=5.0; con round=4
Valores entre 300 y 359 enstán en el minuto: 6.0; Ej: 313.0seg + 1 / 60 con ceil=6.0; con round=5
Valores entre 360 y 419 enstán en el minuto: 7.0; Ej: 408.0seg + 1 / 60 con ceil=7.0; con round=7
Valores entre 420 y 479 enstán en el minuto: 8.0; Ej: 437.0seg + 1 / 60 con ceil=8.0; con round=7
Valores entre 480 y 539 enstán en el minuto: 9.0; Ej: 505.0seg + 1 / 60 con ceil=9.0; con round=8
Valores entre 540 y 599 enstán en el minuto: 10.0; Ej: 546.0seg + 1 / 60 con ceil=10.0; con round=9
Valores entre 600 y 659 enstán en el minuto: 11.0; Ej: 626.0seg + 1 / 60 con ceil=11.0; con round=10
Valores entre 660 y 719 enstán en el minuto: 12.0; Ej: 708.0seg + 1 / 60 con ceil=12.0; con round=12
Valores entre 720 y 779 enstán en el minuto: 13.0; Ej: 757.0seg + 1 / 60 con ceil=13.0; con round=13
Valores entre 780 y 839 enstán en el minuto: 14.0; Ej: 832.0seg + 1 / 60 con ceil=14.0; con round=14
Valores entre 840 y 899 enstán en el minuto: 15.0; Ej: 874.0seg + 1 / 60 con ceil=15.0; con round=15
Valores entre 900 y 959 enstán en el minuto: 16.0; Ej: 947.0seg + 1 / 60 con ceil=16.0; con round=16
Valores entre 960 y 1019 enstán en el minuto: 17.0; Ej: 963.0seg + 1 / 60 con ceil=17.0; con round=16
Valores entre 1020 y 1079 enstán en el minuto: 18.0; Ej: 1026.0seg + 1 / 60 con ceil=18.0; con round=17
Valores entre 1080 y 1139 enstán en el minuto: 19.0; Ej: 1138.0seg + 1 / 60 con ceil=19.0; con round=19
Valores entre 1140 y 1199 enstán en el minuto: 20.0; Ej: 1162.0seg + 1 / 60 con ceil=20.0; con round=19
Valores entre 1200 y 1259 enstán en el minuto: 21.0; Ej: 1243.0seg + 1 / 60 con ceil=21.0; con round=21
Valores entre 1260 y 1319 enstán en el minuto: 22.0; Ej: 1295.0seg + 1 / 60 con ceil=22.0; con round=22
Valores entre 1320 y 1379 enstán en el minuto: 23.0; Ej: 1374.0seg + 1 / 60 con ceil=23.0; con round=23
Valores entre 1380 y 1439 enstán en el minuto: 24.0; Ej: 1387.0seg + 1 / 60 con ceil=24.0; con round=23
Valores entre 1440 y 1499 enstán en el minuto: 25.0; Ej: 1445.0seg + 1 / 60 con ceil=25.0; con round=24
Valores entre 1500 y 1559 enstán en el minuto: 26.0; Ej: 1517.0seg + 1 / 60 con ceil=26.0; con round=25
Valores entre 1560 y 1619 enstán en el minuto: 27.0; Ej: 1593.0seg + 1 / 60 con ceil=27.0; con round=27
Valores entre 1620 y 1679 enstán en el minuto: 28.0; Ej: 1631.0seg + 1 / 60 con ceil=28.0; con round=27
Valores entre 1680 y 1739 enstán en el minuto: 29.0; Ej: 1711.0seg + 1 / 60 con ceil=29.0; con round=29
Valores entre 1740 y 1799 enstán en el minuto: 30.0; Ej: 1795.0seg + 1 / 60 con ceil=30.0; con round=30
Valores entre 1800 y 1859 enstán en el minuto: 31.0; Ej: 1828.0seg + 1 / 60 con ceil=31.0; con round=30
Valores entre 1860 y 1919 enstán en el minuto: 32.0; Ej: 1874.0seg + 1 / 60 con ceil=32.0; con round=31
Valores entre 1920 y 1979 enstán en el minuto: 33.0; Ej: 1948.0seg + 1 / 60 con ceil=33.0; con round=32
Valores entre 1980 y 2039 enstán en el minuto: 34.0; Ej: 2006.0seg + 1 / 60 con ceil=34.0; con round=33
Valores entre 2040 y 2099 enstán en el minuto: 35.0; Ej: 2083.0seg + 1 / 60 con ceil=35.0; con round=35
Valores entre 2100 y 2159 enstán en el minuto: 36.0; Ej: 2141.0seg + 1 / 60 con ceil=36.0; con round=36
Valores entre 2160 y 2219 enstán en el minuto: 37.0; Ej: 2162.0seg + 1 / 60 con ceil=37.0; con round=36
Valores entre 2220 y 2279 enstán en el minuto: 38.0; Ej: 2261.0seg + 1 / 60 con ceil=38.0; con round=38
Valores entre 2280 y 2339 enstán en el minuto: 39.0; Ej: 2335.0seg + 1 / 60 con ceil=39.0; con round=39
Valores entre 2340 y 2399 enstán en el minuto: 40.0; Ej: 2378.0seg + 1 / 60 con ceil=40.0; con round=40
Valores entre 2400 y 2459 enstán en el minuto: 41.0; Ej: 2450.0seg + 1 / 60 con ceil=41.0; con round=41
Valores entre 2460 y 2519 enstán en el minuto: 42.0; Ej: 2487.0seg + 1 / 60 con ceil=42.0; con round=41
Valores entre 2520 y 2579 enstán en el minuto: 43.0; Ej: 2546.0seg + 1 / 60 con ceil=43.0; con round=42
Valores entre 2580 y 2639 enstán en el minuto: 44.0; Ej: 2612.0seg + 1 / 60 con ceil=44.0; con round=44
Valores entre 2640 y 2699 enstán en el minuto: 45.0; Ej: 2694.0seg + 1 / 60 con ceil=45.0; con round=45
Valores entre 2700 y 2759 enstán en el minuto: 46.0; Ej: 2736.0seg + 1 / 60 con ceil=46.0; con round=46
Valores entre 2760 y 2819 enstán en el minuto: 47.0; Ej: 2795.0seg + 1 / 60 con ceil=47.0; con round=47
Valores entre 2820 y 2879 enstán en el minuto: 48.0; Ej: 2851.0seg + 1 / 60 con ceil=48.0; con round=48
Valores entre 2880 y 2939 enstán en el minuto: 49.0; Ej: 2896.0seg + 1 / 60 con ceil=49.0; con round=48
Valores entre 2940 y 2999 enstán en el minuto: 50.0; Ej: 2944.0seg + 1 / 60 con ceil=50.0; con round=49
Valores entre 3000 y 3059 enstán en el minuto: 51.0; Ej: 3015.0seg + 1 / 60 con ceil=51.0; con round=50
Valores entre 3060 y 3119 enstán en el minuto: 52.0; Ej: 3109.0seg + 1 / 60 con ceil=52.0; con round=52
Valores entre 3120 y 3179 enstán en el minuto: 53.0; Ej: 3126.0seg + 1 / 60 con ceil=53.0; con round=52
Valores entre 3180 y 3239 enstán en el minuto: 54.0; Ej: 3208.0seg + 1 / 60 con ceil=54.0; con round=53
Valores entre 3240 y 3299 enstán en el minuto: 55.0; Ej: 3267.0seg + 1 / 60 con ceil=55.0; con round=54
Valores entre 3300 y 3359 enstán en el minuto: 56.0; Ej: 3355.0seg + 1 / 60 con ceil=56.0; con round=56
Valores entre 3360 y 3419 enstán en el minuto: 57.0; Ej: 3419.0seg + 1 / 60 con ceil=57.0; con round=57
Valores entre 3420 y 3479 enstán en el minuto: 58.0; Ej: 3454.0seg + 1 / 60 con ceil=58.0; con round=58
Valores entre 3480 y 3539 enstán en el minuto: 59.0; Ej: 3518.0seg + 1 / 60 con ceil=59.0; con round=59
Valores entre 3540 y 3599 enstán en el minuto: 60.0; Ej: 3553.0seg + 1 / 60 con ceil=60.0; con round=59
Valores entre 3600 y 3659 enstán en el minuto: 61.0; Ej: 3654.0seg + 1 / 60 con ceil=61.0; con round=61
Valores entre 3660 y 3719 enstán en el minuto: 62.0; Ej: 3671.0seg + 1 / 60 con ceil=62.0; con round=61
Valores entre 3720 y 3779 enstán en el minuto: 63.0; Ej: 3778.0seg + 1 / 60 con ceil=63.0; con round=63
Valores entre 3780 y 3839 enstán en el minuto: 64.0; Ej: 3796.0seg + 1 / 60 con ceil=64.0; con round=63
Valores entre 3840 y 3899 enstán en el minuto: 65.0; Ej: 3845.0seg + 1 / 60 con ceil=65.0; con round=64
Valores entre 3900 y 3959 enstán en el minuto: 66.0; Ej: 3941.0seg + 1 / 60 con ceil=66.0; con round=66
Valores entre 3960 y 4019 enstán en el minuto: 67.0; Ej: 4002.0seg + 1 / 60 con ceil=67.0; con round=67
Valores entre 4020 y 4079 enstán en el minuto: 68.0; Ej: 4030.0seg + 1 / 60 con ceil=68.0; con round=67
Valores entre 4080 y 4139 enstán en el minuto: 69.0; Ej: 4084.0seg + 1 / 60 con ceil=69.0; con round=68
Valores entre 4140 y 4199 enstán en el minuto: 70.0; Ej: 4176.0seg + 1 / 60 con ceil=70.0; con round=70
Valores entre 4200 y 4259 enstán en el minuto: 71.0; Ej: 4245.0seg + 1 / 60 con ceil=71.0; con round=71
Valores entre 4260 y 4319 enstán en el minuto: 72.0; Ej: 4275.0seg + 1 / 60 con ceil=72.0; con round=71
Valores entre 4320 y 4379 enstán en el minuto: 73.0; Ej: 4374.0seg + 1 / 60 con ceil=73.0; con round=73
Valores entre 4380 y 4439 enstán en el minuto: 74.0; Ej: 4437.0seg + 1 / 60 con ceil=74.0; con round=74
Valores entre 4440 y 4499 enstán en el minuto: 75.0; Ej: 4467.0seg + 1 / 60 con ceil=75.0; con round=74
Valores entre 4500 y 4559 enstán en el minuto: 76.0; Ej: 4550.0seg + 1 / 60 con ceil=76.0; con round=76
Valores entre 4560 y 4619 enstán en el minuto: 77.0; Ej: 4581.0seg + 1 / 60 con ceil=77.0; con round=76
Valores entre 4620 y 4679 enstán en el minuto: 78.0; Ej: 4638.0seg + 1 / 60 con ceil=78.0; con round=77
Valores entre 4680 y 4739 enstán en el minuto: 79.0; Ej: 4684.0seg + 1 / 60 con ceil=79.0; con round=78
Valores entre 4740 y 4799 enstán en el minuto: 80.0; Ej: 4781.0seg + 1 / 60 con ceil=80.0; con round=80
Valores entre 4800 y 4859 enstán en el minuto: 81.0; Ej: 4813.0seg + 1 / 60 con ceil=81.0; con round=80
Valores entre 4860 y 4919 enstán en el minuto: 82.0; Ej: 4902.0seg + 1 / 60 con ceil=82.0; con round=82
Valores entre 4920 y 4979 enstán en el minuto: 83.0; Ej: 4955.0seg + 1 / 60 con ceil=83.0; con round=83
Valores entre 4980 y 5039 enstán en el minuto: 84.0; Ej: 5023.0seg + 1 / 60 con ceil=84.0; con round=84
Valores entre 5040 y 5099 enstán en el minuto: 85.0; Ej: 5100.0seg + 1 / 60 con ceil=86.0; con round=85
Valores entre 5100 y 5159 enstán en el minuto: 86.0; Ej: 5110.0seg + 1 / 60 con ceil=86.0; con round=85
Valores entre 5160 y 5219 enstán en el minuto: 87.0; Ej: 5213.0seg + 1 / 60 con ceil=87.0; con round=87
Valores entre 5220 y 5279 enstán en el minuto: 88.0; Ej: 5237.0seg + 1 / 60 con ceil=88.0; con round=87
Valores entre 5280 y 5339 enstán en el minuto: 89.0; Ej: 5300.0seg + 1 / 60 con ceil=89.0; con round=88
Valores entre 5340 y 5399 enstán en el minuto: 90.0; Ej: 5350.0seg + 1 / 60 con ceil=90.0; con round=89

Saludos. ;D
« Última modificación: 14 de Diciembre 2016, 11:08 por pedro,, »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Redondeo round, floor, ceil con Java redondear al entero inferior CU00906C
« Respuesta #10 en: 18 de Diciembre 2016, 20:04 »
Hola, releyendo esto otra vez y a la vista de lo comentado por Pedro, creo que el problema estaba en el propio enunciado del ejercicio (que contenía una pequeña errata, al decir que si se introducía como valor 2595 el resultado debía ser que el minuto era el 43. No es así, 2580 divido entre 60 da 43. Si de cero a 59 segundos lo llamamos minuto 1, tenemos que sería en el segundo 2580 donde comienza el minuto 44. Siendo así, el enunciado habría que cambiarlo (cosa que voy a hacer):

Donde decía:

Introduzca valor de segundos: 2595
El minuto es el 43
¿Otro valor (s/n)? n


Debe decir:
Introduzca valor de segundos: 2595
El minuto es el 44
¿Otro valor (s/n)? n


Y el último código aportado por DRANXZ88 daba precisamente el resultado correcto (44), al igual que el código de Pedro

Saludos

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Redondeo round, floor, ceil con Java redondear al entero inferior CU00906C
« Respuesta #11 en: 19 de Diciembre 2016, 06:25 »
Buenos días,
El enunciado del ejercicio si que está bien (ahora, ya se ha corregido):
Citar
Ejemplo de ejecución.

Introduzca valor de segundos: 32

El minuto es el 1

¿Otro valor (s/n)? s

Introduzca valor de segundos: 2595

El minuto es el 44

¿Otro valor (s/n)? n

Un saludo
« Última modificación: 29 de Diciembre 2016, 17:02 por Alex Rodríguez »

 

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".