lunes, 2 de mayo de 2011

En un supermercado hace una promoción,...

En un supermercado hace una promoción, mediante la cual el cliente obtiene un descuento dependiendo de un numero que se escoge al azar. si el numero escogido es menor que 74 el descuento es del 15% sobre el total de la compra, si es mayor o igual a 74 el descuento es del 20%. Obtener cuanto dinero se le descuenta. Se debe mostrar

- El numero escogido aleatoriamente.
- Total de la compra.
- Total del descuento.
- Total que pago.

#
import javax.swing.JOptionPane;

public class PoC{
  public static void main(String[] args){
    int sNum = 0;
    double sTotal = 0, sDescuento = 0, sTotalGeneral = 0;

    sNum = Integer.parseInt( JOptionPane.showInputDialog( "Ingrese número: " ) );
    sTotal = Double.parseDouble( JOptionPane.showInputDialog( "Ingrese total a pagar: " ) );

    if( sNum < 74 ){
      sDescuento = (sTotal * 15)/ 100;
    }else if( sNum >= 74 ){
      sDescuento = (sTotal * 20)/ 100;
    }
    sTotalGeneral = sTotal - sDescuento;

    System.out.println( "El número seleccionado es: " + sNum );
    System.out.println( "El total de la compra es: " + sTotal );
    System.out.println( "El descuento es de: " + sDescuento );
    System.out.println( "El total a pagar es: " + sTotalGeneral );

  }
}

/* SALIDA
shTareas@Ubuntu:~/Escritorio$ java PoC
El número seleccionado es: 55
El total de la compra es: 3000.0
El descuento es de: 450.0
El total a pagar es: 2550.0
*/
#

5 comentarios:

  1. buenas SHTareas,
    una pregunta: porque declaras,
    int sNum = 0;
    double sTotal = 0, sDescuento = 0, sTotalGeneral = 0;
    y despues le haces un parse?

    ResponderEliminar
  2. Primero declaro las variables que voy a usar,

    int sNum = 0;
    double sTotal = 0, sDescuento = 0, sTotalGeneral = 0;

    --

    Ahora aquí lo que hace es llenar las variables con los datos que el usuario ingrese, -con su respectivo tipo de dato-,

    sNum = Integer.parseInt( JOptionPane.showInputDialog( "Ingrese número: " ) );
    sTotal = Double.parseDouble( JOptionPane.showInputDialog( "Ingrese total a pagar: " ) );

    ResponderEliminar
  3. @Sh Tareas.
    No le diste la explicación que él pedía, se ve que haces todo por inercia o a ojo cerrado.

    @Oscar Alejandro
    como has notado, sNum es una variable de tipo entera, por lo que almacenará datos de tipo entero, y Stotal al igual que SDescuento y sTotalGenerado, son reales, por lo que tendrán que almacenar valores de tipo "coma flotante"
    así que aquí va la respuesta a tu pregunta..

    parseInt() y parseDouble()
    son métodos estáticos de la clase Integer y Double respectivamente, que por defecto vienen incluidas en el JDK
    estas métodos, lo que hacen es intentar convertir un valor de tipo "caracter" a tipo entero, o real..
    si no se puede convertir, generará un error en tiempo de ejecución, por lo cual esa sentencia debería encerrarse entre try{}.

    el método showInputDialog de la clase JOptionPane.. sirve para leer un tipo de dato caracter por teclado..
    una vez se ha leído, ese dato se le pasa al método parseInt() o parseDouble(), los cuales como anteriormente dije, intentarán convertir ese dato
    a entero o real, según sea el caso.. una vez hecha la conversión, almacena dichos valores en las variables respectivas.

    Espero haberte sacado de dudas, de igual forma entenderán eso más adelante cuando vean métodos.

    Esteban Sánchez, estudiante del ITM.

    ResponderEliminar
  4. y ahora respecto al ejercicio que shtareas planteó y que él "resolvió", desde mi punto de vista, está malo.

    Por qué?, simplemente el ejercicio decía que era un valor aleatorio, mientras que él en su solución, está solicitando leerlo..si yo fuera a ese supermercado, y me dieran esa promoción..creo que siempre daría un valor por encima de 74, pues, como para que me den más descuento..

    como es una crítica constructiva.. la clase Math, trae un método llamado random(), el cual devuelve un valor aleatorio entre 0 y 1(sí, incluyendo decimales: 0.2, 0.74, 0.58, etc.. puedes multiplicar este valor por 100... y como es un valor de tipo real, y lo necesitas entero, puedes hacerle un "cast"..

    int variable = ((int)(Math.random()*100));

    teoricamente debe funcionar, lo que hace es al valor decimal, quitarle los números después del punto decimal, y conservar la parte entera

    ResponderEliminar
  5. @esteban, tienes razón..., pero los algoritmos se intentan hacer de acuerdo a los temas que quizás posiblemente han visto.

    Lo hice con número ingresado, ya qué hasta ahora ni yo he visto la función "random" -Hablando de las clases de laboratorio-.

    No soy adivino, obviamente si se quisiera hacerlo de alguna u otra forma, lo más lógico es que lo agreguen en el mensaje.

    Esperemos a ver que dice @oscar.

    ResponderEliminar