sábado, 30 de octubre de 2010

Deitel_Java_4.17 (Rendimiento de Kilómetros por Galón de Gasolina)

4.17 Los conductores se preocupan acerca del kilometraje de sus automóviles. Un conductor ha llevado el registro de varios reabastecimientos de gasolina, registrando los kilómetros conducidos y los litros usados en cada reabastecimiento. Desarrolle una aplicación en Java que reciba como entrada los kilómetros conducidos y los litros usados (ambos como enteros) por cada reabastecimiento. El programa debe calcular y mostrar los kilómetros por litro obtenidos en cada reabastecimiento, y debe imprimir el total de kilómetros por litro obtenidos en todos los reabastecimientos hasta este punto. Todos los cálculos del primedio deben producir resultados en número de punto flotante. Use la clase Scanner y la repetición controlada por centinela para obtener los datos del usuario.
_____________________________________________________________________________________
SOLUCIÓN:
Éste programa es innecesariamente más largo de lo que puede hacerse. La clase Deitel_4_17 simplemente calcula y retorna el cociente de kilómetros/galones. Ésto se puede incluir en la instrucción

System.out.printf("\nLos kilometros por galon fueron: %.2f: ", miObjeto.Procesa_Datos(galon, kilometros));

para quedar como:

System.out.printf("Los kilometros por galon fueron: %.2f", kilometros/galon);

Sin embargo, en estos primeros programas es más importante a realizar programas modulares que hacerlos eficientes. Un programa monolítico es, en general, más rápido que uno modular, sin embargo, los programas modulares son más fáciles de entender y mantener.

Éste código debe guardarse con el nombre UsaDeitel_4_17.java

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// Este programa recibe, mediante un ciclo controlado por centinela,    //
// el numero de galones y el numero de kilometros recorridos por cada   //
// galon. Imprime cada vez el rendimiento kilometros/galon              //
////////////////////////////////////////////////////////////////////////// 

import java.util.Scanner;

 public class UsaDeitel_4_17

{ // Abre clase UsaDeitel_4_17

public static void main(String args[])
{ // Abre metodo main
Scanner entrada = new Scanner(System.in);
double galon = 0;
double kilometros;

Deitel_4_17 miObjeto = new Deitel_4_17();


System.out.println("\nIntroduzca el numero de galones: (-1 para terminar)\n");
galon = entrada.nextDouble();

while ( -1 != galon)
{ // Abre while

System.out.println("\nIntroduzca el numero de kilometros: \n");
kilometros = entrada.nextDouble();

System.out.printf("\nLos kilometros por galon fueron: %.2f: ", miObjeto.Procesa_Datos(galon, kilometros));
System.out.println("\nIntroduzca el numero de galones: (-1 para terminar) \n");
galon = entrada.nextDouble();
} // Cierra while
} // Cierra metodo main
} // Cierra clase UsaDeitel_4_17

Éste código debe de guardarse con el nombre Deitel_4_17.java

public class Deitel_4_17

{ // Abre clase Deitel_4_17

public double Procesa_Datos( double gl, double km)
{ // Abre metodo Procesa_Datos
double promedio = km/gl;
return promedio;
} // Cierra metodo Procesa_Datos

} // Cierra Deitel_4_17

______________________________________________________________
Esta entrada es parte de los problemas resueltos del libro Java. Cómo Prgramar de P. Deitel y H. Deitel
Entrada Anterior
Entrada Siguiente

6 comentarios:

  1. No entiendo como crear las primras innstrucciones las del retorno kilómetros/galones

    ResponderEliminar
    Respuestas
    1. ¡Hola! Lo que comento acerca de esas primeras líneas es que, en realidad es innecesaria la clase Deitel_4_17, ya que podrías no llamarla, y hacer todo en
      UsaDeitel_4_17, cambiando la línea

      System.out.printf("\nLos kilometros por galon fueron: %.2f: ", miObjeto.Procesa_Datos(galon, kilometros));

      System.out.printf("Los kilometros por galon fueron: %.2f", kilometros/galon);

      Pero, tal como aparece el programa, lo puedes copiar y ejecutar, está bien.

      Eliminar
  2. Entonces copiando el programa todo se ejecutara bien o puede fallar

    ResponderEliminar
  3. Estimados amig@s aqui les presento otra posible solucion:

    // Ejercicio 4.17: KilometrosLitro.java
    // Calcula la cantidad de kilometros recorridos por litro
    import java.util.Scanner;

    public class KilometrosLitro
    {
    public void calcularKilometroLitro()
    {
    // crea objeto Scanner para obtener los kilometros y
    // la cantidad de gasolina de la ventana de comandos
    Scanner entrada = new Scanner( System.in );

    // inicializamos las variables
    int totalKilometros = 0;
    int totalGasolina = 0;
    int contadorRegistros = 0;

    int cantKilometros;
    int cantGasolina;

    double promedio;

    // pedir entrada para leer kilometros
    System.out.print( "Introduzca la cantidad de kilometros conducidos (-1 para cancelar): ");
    cantKilometros = entrada.nextInt();


    // itera hasta obtener el valor centinela
    while ( cantKilometros != -1)
    {
    System.out.print( "Introduzca la cantidad de gasolina utilizada: ");
    cantGasolina = entrada.nextInt();

    System.out.printf("\nLa cantidad de kilometros por litro para este reabastecimiento es: %.2f Km/Lt.\n\n",
    (double) cantKilometros/cantGasolina );

    totalKilometros += cantKilometros;
    totalGasolina += cantGasolina;
    contadorRegistros++;

    System.out.print( "Introduzca la cantidad de kilometros conducidos (-1 para cancelar): ");
    cantKilometros = entrada.nextInt();
    } // fin while

    if ( contadorRegistros != 0 )
    {
    promedio = (double) totalKilometros / totalGasolina;

    System.out.printf( "\nSe realizo un total de %d reabastecimiento, obteniendo un promedio de %.2f Kilometros/Litro.\n",
    contadorRegistros, promedio );
    } else {
    System.out.println( "No se introdujeron registros." );
    } // fin if..else

    } // fin metodo calcularKilometrosLitro
    } // fin clase KilometrosLitro

    // Ejercicio 4.17: PruebaKilometrosLitro.java
    // Calcula la cantidad de kilometros recorridos por litro

    public class PruebaKilometrosLitro
    {
    // metodo main inicia la ejecucion de la aplicacion
    public static void main(String[] args) {
    // Creamos un objet KilometrosLitro
    KilometrosLitro reabastecimiento = new KilometrosLitro();
    reabastecimiento.calcularKilometroLitro();
    } // fin metodo main
    } // fin clase PruebaKilometrosLitro

    ResponderEliminar
  4. // Esta es mi solución


    import java.util.Scanner;

    public class Prueba {

    public static void main(String[] args) {

    int kilometros = 0;
    int litros = 0;
    int kilometrosTotales=0;
    int litrosTotales=0;
    double promedio=0;
    Scanner in = new Scanner(System.in);

    while (kilometros != -1 ) {
    System.out.println("Introduzca numero de kilometros en su viaje si desea\n"+ "cancelar escriba -1");
    kilometros = in.nextInt();
    kilometrosTotales +=kilometros;
    System.out.println("Introduzca numero de litros en su viaje");
    litros = in.nextInt();
    litrosTotales += litros;

    promedio = kilometros/litros;
    System.out.println("Los kilometros por litro de este viaje son:"+ promedio);

    }
    promedio = litrosTotales /kilometrosTotales;
    System.out.println("El promedio kilometros por litro es:"+promedio);


    }

    }

    ResponderEliminar
    Respuestas
    1. yo lo había hecho así igual manera pero hasta que los dos valores
      sean -1 tanto km y lt , pregunta es: ¿eso está bien?

      Eliminar

Related Posts Plugin for WordPress, Blogger...