Examen 01

El examen es de carácter práctico y puede realizarse en una computadora donde se tenga instalado el Java Development Kit (JDK). El estudiante puede consultar de cualquier recurso o referencia que guste, sean hechos durante el curso, estén publicados en libros o en la web. En caso de reutilizar código que haya trabajado con otros compañeros, debe informarlo al profesor al iniciar el examen. Se dispone de dos horas para entregar la prueba y debe realizarse en forma estrictamente individual.

Escriba un programa en Java que imprima las tablas de los operadores aritméticos. El usuario puede ajustar cada tabla de acuerdo al operador aritmético (+, -, *, /, %); y al rango de valores reales al cual quiere aplicarse, expresado como un valor mínimo, un valor máximo y un incremento. El programa crea una tabla resultado de evaluar los números entre el mínimo y el máximo en los incrementos dados utilizando el operador. Por ejemplo:

Tablas de operadores

Operador [1=+ 2=- 3=* 4=/ 5=% 0=Salir]: 3
Valor minimo: 1
Valor maximo: 10
Incremento: 1

    * |  1.0   2.0   3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0
------------------------------------------------------------------
  1.0 |  1.0   2.0   3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0
  2.0 |  2.0   4.0   6.0   8.0  10.0  12.0  14.0  16.0  18.0  20.0
  3.0 |  3.0   6.0   9.0  12.0  15.0  18.0  21.0  24.0  27.0  30.0
  4.0 |  4.0   8.0  12.0  16.0  20.0  24.0  28.0  32.0  36.0  40.0
  5.0 |  5.0  10.0  15.0  20.0  25.0  30.0  35.0  40.0  45.0  50.0
  6.0 |  6.0  12.0  18.0  24.0  30.0  36.0  42.0  48.0  54.0  60.0
  7.0 |  7.0  14.0  21.0  28.0  35.0  42.0  49.0  56.0  63.0  70.0
  8.0 |  8.0  16.0  24.0  32.0  40.0  48.0  56.0  64.0  72.0  80.0
  9.0 |  9.0  18.0  27.0  36.0  45.0  54.0  63.0  72.0  81.0  90.0
 10.0 | 10.0  20.0  30.0  40.0  50.0  60.0  70.0  80.0  90.0 100.0

Operador [1=+ 2=- 3=* 4=/ 5=% 0=Salir]: 1
Valor minimo: -3
Valor maximo: 4
Incremento: 1

    + | -3.0  -2.0  -1.0   0.0   1.0   2.0   3.0   4.0
------------------------------------------------------
 -3.0 | -6.0  -5.0  -4.0  -3.0  -2.0  -1.0   0.0   1.0
 -2.0 | -5.0  -4.0  -3.0  -2.0  -1.0   0.0   1.0   2.0
 -1.0 | -4.0  -3.0  -2.0  -1.0   0.0   1.0   2.0   3.0
  0.0 | -3.0  -2.0  -1.0   0.0   1.0   2.0   3.0   4.0
  1.0 | -2.0  -1.0   0.0   1.0   2.0   3.0   4.0   5.0
  2.0 | -1.0   0.0   1.0   2.0   3.0   4.0   5.0   6.0
  3.0 |  0.0   1.0   2.0   3.0   4.0   5.0   6.0   7.0
  4.0 |  1.0   2.0   3.0   4.0   5.0   6.0   7.0   8.0

Operador [1=+ 2=- 3=* 4=/ 5=% 0=Salir]: 4
Valor minimo: .5
Valor maximo: 2
Incremento: -.5
Incremento: -1
Incremento: 0
Incremento: 0.5

    / |  0.5   1.0   1.5   2.0
------------------------------
  0.5 |  1.0   0.5   0.3   0.3
  1.0 |  2.0   1.0   0.7   0.5
  1.5 |  3.0   1.5   1.0   0.8
  2.0 |  4.0   2.0   1.3   1.0

Operador [1=+ 2=- 3=* 4=/ 5=% 0=Salir]: 0
Ejemplo de ejecución del programa

Su programa debe permitir al usuario solicitar tablas repetitivamente, hasta que indique en forma explícita que desea salir del sistema. Se debe además evitar caer en ciclos infinitos: se le debe solicitar repetitivamente al usuario el incremento hasta que provea uno mayor a 0.

El formateo de las tablas es muy importante para que sean legibles para el usuario. Su programa debe imprimir una fila y una columna de encabezado, separadas por guiones (-) y barras verticales (|). Además debe imprimir cada número en un campo de una cantidad razonable de espacio. Sugerencia: utilice el método System.out.printf().

Usted puede opcionalmente mejorar la usabilidad de su programa, permitiéndole al usuario ingresar los operadores textualmente en lugar de códigos numéricos. Note entonces que al ingresar la palabra "salir" (en cualquier combinación de mayúsculas y minúsculas) se convierte en el mecanismo para terminar el programa. Además imprima los enteros sin decimales, como se puede ver en la siguiente ejecución:

Tablas de operadores

Operador [+|-|*|/|%|salir]: %
Valor minimo: 1
Valor maximo: 7
Incremento: 1

    % |    1     2     3     4     5     6     7
------------------------------------------------
    1 |    0     1     1     1     1     1     1
    2 |    0     0     2     2     2     2     2
    3 |    0     1     0     3     3     3     3
    4 |    0     0     1     0     4     4     4
    5 |    0     1     2     1     0     5     5
    6 |    0     0     0     2     1     0     6
    7 |    0     1     1     3     2     1     0

Operador [+|-|*|/|%|salir]: *
Valor minimo: 1
Valor maximo: 3
Incremento: .5

    * |    1   1.5     2   2.5     3
------------------------------------
    1 |    1   1.5     2   2.5     3
  1.5 |  1.5   2.3     3   3.8   4.5
    2 |    2     3     4     5     6
  2.5 |  2.5   3.8     5   6.3   7.5
    3 |    3   4.5     6   7.5     9

Operador [+|-|*|/|%|salir]: sALIR
Ejemplo de ejecución del programa que lee los operadores como texto e imprime los enteros sin decimales

Evaluación

  1. [10%]. Clase completa y válida. Médodo main(). Los identificadores son significativos. La indentación ayuda a entender la estructura del código. Los paréntesis (redondos, cuadrados y llaves) están balanceados.
  2. [10%]. El programa se mantiene imprimiendo tablas de operadores hasta que el usuario lo decida. Entabla un adecuado diálogo con el usuario. Hace correcta lectura de los operadores; y los valores mínimo, máximo e incremento.
  3. [10%]. El programa evita generar un ciclo infinito ante incrementos no válidos. Permite al usuario corregir el incremento si se equivoca.
  4. [35%]. El programa imprime correctamente el encabezado de la tabla en la primera fila y en la primera columna. Imprime el operador en la intersección de las dos anteriores. Hace una división visual entre los encabezados y los datos.
  5. [35%]. Imprime correctamente el resultado de aplicar el operador a cada par de valores en la tabla. Separa los números para que sean fácilmente legibles.
  6. [5% Opcional]. Permite al usuario ingresar los operadores con los símbolos respectivos en lugar de códigos numéricos. Ignora mayúsculas y minúsculas en la palabra "salir".
  7. [5% Opcional]. Imprime los enteros sin decimales y los reales con una posición decimal; tanto en los encabezados como en las celdas.

Para presentar su solución, suba su archivo .java a Mediación Virtual en la asignación con nombre Examen01.