flowchart TD F4["factorial(4)"] -->|"4 ×"| F3["factorial(3)"] F3 -->|"3 ×"| F2["factorial(2)"] F2 -->|"2 ×"| F1["factorial(1)"] F1 --> R["1"] classDef llamada fill:#e6f5f3,stroke:#0f766e,color:#16324f,stroke-width:1px; classDef base fill:#fde8e2,stroke:#e76f51,color:#7c2d1d,stroke-width:1px; class F4,F3,F2 llamada; class F1,R base;
Práctica 5 - Métodos y depurador de BlueJ
Esta práctica tiene como objetivo familiarizarse con el uso métodos (procedimientos y funciones) y aprender el manejo del depurador de BlueJ. Los algoritmos se desarrollarán en los métodos que resulten necesarios y se lanzará la ejecución mediante el método main. Se deberá cuidar especialmente la comunicación del programa con el usuario, de forma que éste no tenga ninguna duda en el manejo del mismo. Por último, al disponer de todos los esquemas de composición de acciones, se elegirá el que sea más adecuado para resolver el problema siguiendo los criterios proporcionados en las clases de teoría.
Aunque los ejercicios 5 y 6 relativos al depurador de BlueJ se encuentran en último lugar por respetar un orden, es muy conveniente su realización como primeros ejercicios de la práctica para poder utilizarlo durante el desarrollo de los ejercicios 1-4. El depurador es una herramienta muy valiosa que os puede ayudar a comprender mucho mejor los conceptos de la asignatura y detectar y resolver errores semánticos.
Ejercicio 1
Se quiere programar un juego de dados oponiendo un jugador y un ordenador. El jugador y el ordenador tiran alternativamente el dado. La tirada del ordenador se simula con una tirada al azar mientras que la tirada del jugador se pide al usuario y éste introduce la tirada de un dado real. Los puntos obtenidos se acumulan para cada participante hasta que alguno sobrepasa 30. El jugador que consigue esta puntuación es el vencedor. Construye un algoritmo para este juego.
Ejemplo de ejecución:
Introduce un número del 1 al 6:
> 5
El ordenador ha conseguido un 4.
Puntos del usuario: 5.
Puntos del ordenador: 4.
Introduce un número del 1 al 6:
> 3
El ordenador ha conseguido un 1.
Puntos del usuario: 8.
Puntos del ordenador: 5.
...
El ganador ha sido el ordenador, con 34 puntos.
Ejercicio 2
Implementa un programa para el cálculo de números combinatorios
\[ \binom{m}{n} = \frac{m!}{n!(m-n)!} \]
donde los valores m y n se piden al usuario. Implementa y utiliza un método que calcule el factorial de un número entero no negativo.
Ejercicio 3
El número de combinaciones de n elementos tomados de k en k se puede definir de forma recursiva, es decir, expresando la función número combinatorio como combinaciones de dicha función en iteraciones anteriores. En particular,
\[ \binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k} \]
Con los valores iniciales
\[ \binom{n}{0} = 1 \qquad \binom{n}{n} = 1 \]
Diseña una función que calcule mediante recursividad el número de combinaciones de n elementos tomados de k en k.
Ejercicio 4
Escribe un algoritmo para imprimir el triángulo de Tartaglia hasta una línea que introducimos por teclado. El triángulo toma una forma como la que sigue:
Ejemplo de ejecución:
Introduce el número de filas del triángulo:
> 5
1
11
121
1331
14641
Ejercicio 5
Crea la clase Multiplicacion con el método denominado escribirTabla para escribir la tabla de multiplicar de un número entero.
public static void escribirTabla(int n) {
for ( int i = 0; i <= 10; i++ ) {
System.out.print(n);
System.out.print(" x ");
System.out.print(i);
System.out.print(" = ");
System.out.print(n*i);
System.out.println();
}
}Ejecuta el método escribirTabla desde BlueJ. Para ello, en la ventana de proyecto, utilizando el botón derecho del ratón sobre el icono que representa la clase, se accede al menú contextual sobre el que aparece el nombre del método y nos permite su ejecución. Observa que el método tiene un parámetro entero denominado n. Por ello, cuando lo ejecutemos, aparecerá un cuadro de diálogo en el que se nos solicita un valor para dicho parámetro. Introduciremos cualquier valor del tipo de dato de dicho parámetro y observaremos lo que sucede. Implementa ahora un método main que invoque a escribirTabla y ejecútalo de la forma habitual. ¿Qué diferencias observas entre ambas formas de ejecutar el método?

Ejercicio 6
En la ventana del código de la clase Multiplicacion, pincha en la barra blanca de la izquierda, a la altura de la línea que dice System.out.print(n); del método escribirTabla. Debe aparecer una señal de stop junto a esa línea (es lo que se denomina un breakpoint o punto de parada). Vuelve a ejecutar el método escribirTabla como antes. En esta ocasión, la ejecución se detendrá al llegar al punto de interrupción (el marcado con la señal de stop). Ejecuta paso a paso el código de escribirTabla presionando el botón con la flecha verde y el texto Step. Observa los valores que van tomando el parámetro n y la variable i. Ten a la vista también la ventana del terminal y observa, asimismo, cómo se van construyendo las líneas de la tabla de multiplicar.

¿Qué diferencias de comportamiento observas entre los botones Step, Continue y Terminate?
Elimina el punto de ruptura anterior pulsando otra vez en la barra de la izquierda sobre el stop. Coloca ahora el punto de ruptura en la llamada del método escribirTabla dentro del método main.
¿Qué diferencias de comportamiento observas entre los botones Step y Step Into?
Para la evaluación de los ejercicios 5 y 6 puedes entregar la clase Multiplicacion y utilizando comentarios de documentación contestar a las preguntas para que sean convenientemente evaluadas.