Está en la página 1de 4

-

C.F.G.S. Desarrollo de Aplicaciones Multiplataformas

Examen 2122 1ª EVAL de Debugger

El siguiente programa realiza una serie de multiplicaciones de matrices de números.

package extraordinario2021;

public class Principal {


public static void main(String[] args) {
// #1
double[][] matriz1 = new double[][] { { 2 }, { -1 } };
double[][] matriz2 = new double[][] { { 3, 5 } };
System.out.println("#1\n"
+ toString(multiplicacionMatrices(matriz1, matriz2)));
// #2
matriz1 = new double[][] { { 1, 2, 0 }, { -1, 3, 1 }, { 2, -2, 1 } };
matriz2 = new double[][] { { 2 }, { -1 }, { 1 } };
System.out.println("#2\n"
+ toString(multiplicacionMatrices(matriz1, matriz2)));
// #3
matriz1 = new double[][] { { 1, 2, -1 }, { 0, 1, 0 } };
matriz2 = new double[][] { { 1, 1, 0, 0 }, { 0, 2, 1, 1 },
{ 1, 1, 2, 2 } };
System.out.println("#3\n"
+ toString(multiplicacionMatrices(matriz1, matriz2)));
}

public static double[][] multiplicacionMatrices(double[][] m1, double[][] m2) {


int m1ColLength = m1[0].length;
int m2RowLength = m2.length;
if (m1ColLength != m2RowLength)
return null;
int mRRowLength = m1.length;
int mRColLength = m2[0].length;
double[][] mResult = new double[mRRowLength][mRColLength];
for (int i = 0; i < mRRowLength; i++) {
for (int j = 0; j < mRColLength; j++) {
for (int k = 0; k < m1ColLength; k++) {
mResult[i][j] += m1[i][k] * m2[k][j];
}
}
}
return mResult;
}

public static String toString(double[][] m) {


String result = "";
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
result += String.format("%11.2f", m[i][j]);
}
result += "\n";
}
return result;
}

}
-

C.F.G.S. Desarrollo de Aplicaciones Multiplataformas

Haciendo uso del debugger:

- Coloca los puntos de ruptura en las líneas coloreadas en amarillo.

- Ejecuta el debugger y contesta a las siguientes preguntas:

1. ¿Dónde se detiene por primera vez? ¿Qué botón tengo que pulsar para seguir la ejecución
normal del programa hasta el siguiente punto de ruptura? (0.5 puntos)

Se detinene en la línea: mResult[i][j] += m1[i][k] * m2[k][j];


El botón que pulso para seguir con la ejecución normal es Resume

2. ¿En qué punto de ruptura se ha detenido después de realizar la acción anterior? ¿Por qué? (0.5
puntos)

Se ha detenido en el mismo punto de ruptura : mResult[i][j] += m1[i][k] * m2[k][j];

Porque, essta acción está dentro de un búcle y para poder salir de el debemos deshabilitar el punto de
ruptura

3. ¿En qué línea del método main está detenida la ejecución del programa? (0. 5 puntos)

Se detiene en la línea :System.out.println("#1\n" +


toString(multiplicacionMatrices(matriz1, matriz2)));
-

C.F.G.S. Desarrollo de Aplicaciones Multiplataformas

4. Detén la ejecución del Debugger y modifica el segundo punto de ruptura para que se detenga
cuando la variable “k” alcance el valor de m1ColLength. Ejecuta de nuevo el debugger. ¿Qué
botón has pulsado para detener la ejecución del programa? ¿En qué línea se ha detenido? ¿Por
qué? (1 punto)

Para detener el programa hay que pulsar el botón “Terminate”

Haciendo clic derecho en el segundo punto de


ruptura en la opción de “Breakpoint properties” clicamos
en la opción de condicional y ponemos la condición
correspondiente para que se detenga la variable en el valor deseado k==m1ColLength

Se detiene en: System.out.println("#2\n"+


toString(multiplicacionMatrices(matriz1, matriz2)));

Porque al meter la nueva condición, k se igual a m1ColLength y por tanto ya no se cumple la condición
del for for (int k = 0; k < m1ColLength; k++), por tanto se sale del búcle y
consecuentemente del método y sigue la ejecución del main hasta pararse en el
siguiente punto de ruptura que es la línea 13 del main

5. Detén la ejecución y deshabilita el condicional (NO EL PUNTO DE RUPTURA) ¿Cuántas


instrucciones se ejecutan hasta devolver el valor de la multiplicación? ¿Cómo lo sabes? (0.5
puntos)
-

C.F.G.S. Desarrollo de Aplicaciones Multiplataformas

6. Una vez que has salido del método multiplicarMatrices ¿qué botón debes pulsar para entrar en
el método toString? Pulsa el botón StepOver tres veces. ¿Qué botón debes pulsar para salir del
método toString? (0.5 puntos)

7. Modifica el segundo punto de ruptura para que se detenga cuando el valor de i=1, j=0 y k=0.
¿Qué valor tiene la variable mResult? (1 punto)

8. Deshabilita todos los puntos de ruptura y dile al programa que continúe hasta el final del
programa. ¿Qué botones has usado para ello? ¿Cuál es el valor de la variable mResult al
finalizar el programa? (0.5 puntos)

También podría gustarte