Está en la página 1de 7

I.E.

S Julio Verne - Departamento de Informática

Entornos de Desarrollo
(curso 2023-2024)

Examen Tema 2 – Evaluación de Entornos Integrados de


Desarrollo – Parte 2

Nombre: Omar Fecha: 25/01/2024


Apellidos: Jaouad Benchouikh

PREGUNTA 1 (2.5 PUNTOS)


Dado el siguiente programa:

package Depuracion;

import javax.swing.JOptionPane;

public class Factorial {

public static void main(String[] args) {


int num = Integer.parseInt(JOptionPane.showInputDialog("Introduce el
número para hacer su factorial:"));
int resul = 1;
int operaciones[] = new int[num];

for (int i = num; i < 0; i--) {


operaciones[i] = i;
resul = resul * i;
}

System.out.print(num + "! = ");

for (int operacion: operaciones) {


System.out.print(operacion);
if (operacion == resul) {
System.out.print(" = ");
} else {
System.out.print(" * ");
}
}

System.out.print(resul);
}

Se trata de un programa que pregunta por un número y calcula su factorial.

Una vez calculado, muestra como se ha realizado la operación. De esta forma, si


pedimos que calcule el factorial de 4 se nos debería mostrar por la consola se siguiente
respuesta:

4! = 1 * 2 * 3 * 4 = 24
Sin embargo, el programa no funciona como se espera, ya que contiene una serie de
fallos.

Utiliza el depurador para detectar dichos fallos, explica porque no funcionaba, arréglalo
y explica porque el cambio ha funcionado.

Para obtener toda la puntuación se deben realizar capturas usando el


depurador que acompañen las distintas explicaciones.

Respuesta:

En el programa lo primero que he visto ha sido que la condición del For


estaba mal ya que en un principio pedida que i<0 y eso nunca se iba a dar ya
que el usuario o simplemente introduciendo 4 con la condición principal
nunca entraría al bucle for, cambie la condición del bucle for poniendo que i
fuese igual a 1 ya que siempre el factorial de un numero empezara por 1 y
que hiciera iteraciones hasta que I sea igual a núm. luego el segundo fallo
que he visto ha sido que no podría colocar el valor de en el array con el
índice de i ya que lo colocaría desordenado mal etc.… entonces lo que he

decidido es declarar una variable j y que sea el índice del array y luego que
aumente así me ahorraría un bucle for igual

Como se puede ver en la captura gracias a la variable j y al cambio de la condición del


bucle se ejecuta bien el ultimo error que he encontrado es en la condición del if ya que
para que imprimises el igual al final del ultimo numero antes de dar el resultado del
numero factorial habría que poner en vez de operación == resul el ultimo numero del
array que coincida con operación así que ponemos que operación==operaciones.lenght
ya que operaciones.lenght coincide con la ultima operación del bucle for y al coincidir
imprime el = y luego pasa a imprimir resul.
Aquí se puede apreciar los cambios que hecho en el for each para que imprima
correctamente los asteriscos y iguales.
PREGUNTA 2 (2.5 PUNTOS)
Dado el siguiente programa:

package Depuracion;

import javax.swing.JOptionPane;

public class Rotamatriz {

public static void main(String[] args) {


int[][] matriz = new int[2][2];

for (int i = 0; i < matriz.length; i++) {


for (int j = 0; j < matriz[0].length; j++) {
matriz[i][j] =
Integer.parseInt(JOptionPane.showInputDialog("Introduce el valor [" + i + "][" + j +
"]:"));
}
}

int rotaciones =
Integer.parseInt(JOptionPane.showInputDialog("Introduce el número de veces que
quieres que gire la matriz:"));

public static void rotar_matriz(int[][] matriz) {


int[] valor = {matriz[0][0], matriz[0][1], matriz[1][0],
matriz[1][1]};
matriz[0][0] = valor[3];
matriz[0][1] = valor[0];
matriz[1][0] = valor[1];
matriz[1][1] = valor[2];
}

public static void rotar_mucho(int[][] matriz, int veces) {


while (veces >= 0) {
rotar_matriz(matriz);
veces ++;
}
}

public static void mostrar_matriz(int[][] matriz) {


for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz[0].length; j++) {
System.out.print(matriz[i][j] + " ");
}
System.out.println("");
}
}
}
Se trata de un programa que crea una matriz 2x2 y rota sus valores un número de veces
dado en el sentido de las agujas del reloj. Por ejemplo, si queremos rotar la siguiente
matriz dos veces:

12 → 43
34 21

El programa debe de solicitar cada elemento de la matriz por pantalla, el número de


rotaciones a realizar, y mostrar por la consola la matriz con las rotaciones hechas.

Sin embargo, el programa no funciona como se espera, ya que contiene una serie de
fallos.

Utiliza el depurador para detectar dichos fallos, explica porque no funcionaba, arréglalo
y explica porque el cambio ha funcionado.

Para obtener toda la puntuación se deben realizar capturas usando el


depurador que acompañen las distintas explicaciones.

Respuesta:
En el ejercicio me di cuenta de los métodos public static estaban impidiendo que
se mostrase el bucle for final con la rotación por lo tanto decidí eliminarlos y poner
la llave del main al final entonces empezó a imprimirse la matriz y a continuación
encontré que la rotación la hacia mal por lo que cambie los índices donde tiene
que almacenarse cada valor para que me lo terminase imprimiendo igual que en el
ejemplo del ejercicio, com se puede ver en la captura elimine los public static puse
la llame del main al final así al quere rotar dos veces rotara quedando igual que en
el ejemplo del ejercicio también modifique el while y no me da tiwmpo a explicar
todo

También modifique el while para que rote según las veces que quiera el usuario
a
s
í

r
o
t
a
n
d
o

t
o
d
a
s

las veces en el sentido del reloj que quiera el usuario inicialize veces a 0
Aquí se puede ver como inicializo las variables y el while

También podría gustarte