Está en la página 1de 33

10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Evaluacion final - Escenario 8

Fecha de entrega 12 de mayo en 23:55 Puntos 100 Preguntas 20


Disponible 9 de mayo en 0:00 - 12 de mayo en 23:55 4 días Límite de tiempo 90 minutos
Intentos permitidos 2

Instrucciones

https://poli.instructure.com/courses/14942/quizzes/52060 1/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Historial de intentos

Intento Hora Puntaje


MANTENER Intento 2 26 minutos 70 de 100

MÁS RECIENTE Intento 2 26 minutos 70 de 100

Intento 1 71 minutos 25 de 100

 Las respuestas correctas estarán disponibles del 13 de mayo en 23:55 al 14 de mayo en 23:55.

Puntaje para este intento: 70 de 100


Entregado el 9 de mayo en 21:15
Este intento tuvo una duración de 26 minutos.

Pregunta 1 5 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Como parte del programa que resuelve el problema enunciado, se debe


implementar un método que tome como entradas dos matrices
correspondientes a dos imágenes y retorne un valor booleano indicando
si las imágenes son idénticas (sin rotaciones ni reflejo).

https://poli.instructure.com/courses/14942/quizzes/52060 2/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Para esto, se tiene el siguiente código:

static boolean son_iguales(byte[][] img1, byte[][] img2){


for (int i = 0; i < img1.length; i++)
if (<condicion>) return false;
return true;<condicion>
}

Para que el método funcione correctamente, <condicion> debe


reemplazarse por:

Arrays.not_equals(img1[i], img2[i])

!Arrays.equals(img1[i], img2[i])

Al comparar dos arreglos (o matrices) usando el operador != se está


interrogando sobre si los arreglos (o matrices) son el mismo, mas no sobre
sus contenidos. Así, dos arreglos distintos pero de idéntico contenido
darían como resultado verdadero, lo cual es incorrecto.

El método Arrays.equals permite comparar dos arreglos por contenido.


Para preguntar si sus contenidos son diferentes basta negar el resultado
de este método.

El método Arrays.not_equals no existe.

img1[i] != img2[i]

img1 != img2

Pregunta 2 5 / 5 pts

Se dice que Leonardo de Pisa, más conocido como Fibonacci, descubrió


la sucesión que lleva su nombre estudiando cómo crecía una población
de conejos. El crecimiento de la población seguía las siguientes reglas:

La población inicia con una pareja de conejos jóvenes.


Una pareja de conejos jóvenes madura al cumplir un mes.

https://poli.instructure.com/courses/14942/quizzes/52060 3/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Una pareja de conejos concibe una nueva pareja de conejos jóvenes


cada mes, iniciando un mes después de su maduración.

Así, en los meses 1 y 2 se tendría únicamente una pareja. Para el mes 3,


habría ya una nueva pareja, para un total de 2. En el mes 4, la pareja ya
madura tendría una nueva pareja, completando 3 parejas. En el mes 5, la
primera pareja y su primera pareja cría engendrarían dos nuevas parejas,
siendo la población total 5 parejas.

El número de parejas que conforman la población en el mes n puede


calcularse mediante la ecuación de recurrencia:

El número de parejas que forman la población después de 12 meses es:

89

144

https://poli.instructure.com/courses/14942/quizzes/52060 4/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

parejas(12) = parejas(11) + parejas(10)

parejas(11) = parejas(10) + parejas(9)

parejas(10) = parejas(9) + parejas(8)

parejas(9) = parejas(8) + parejas(7)

parejas(8) = parejas(7) + parejas(6)

parejas(7) = parejas(6) + parejas(5)

parejas(6) = parejas(5) + parejas(4)

parejas(5) = parejas(4) + parejas(3)

parejas(4) = parejas(3) + parejas(2)

parejas(3) = parejas(2) + parejas(1)

parejas(2) = 1

parejas(1) = 1

entonces

parejas(3) = 1 + 1 = 2

parejas(4) = 2 + 1 = 3

parejas(5) = 3 + 2 = 5

parejas(6) = 5 + 3 = 8

parejas(7) = 8 + 5 = 13

parejas(8) = 13 + 8 = 21

parejas(9) = 21 + 13 = 34

parejas(10) = 34 + 21 = 55

parejas(11) = 55 + 34 = 89

parejas(12) = 89 + 55 = 144

12

233

https://poli.instructure.com/courses/14942/quizzes/52060 5/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Pregunta 3 5 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

El tipo de dato más apropiado para representar una imagen en el


lenguaje java es:

byte[][]

La matriz que representa una imagen está compuesta únicamente de 1s y


0s, los cuales son valores enteros. Además, cada dato hace uso
solamente de un bit, por lo que debería usarse un tipo de dato lo más
pequeño posible. El tipo de dato entero más pequeño es byte. Dado que
es una matriz, el tipo byte debe ir acompañado de dos parejas de
corchetes (byte[][]).

int[][]

double[]

double[][]

https://poli.instructure.com/courses/14942/quizzes/52060 6/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Pregunta 4 5 / 5 pts

Las calles de la ciudad de Bacatá forman una cuadrícula perfecta, como


se muestra en la ilustración 1.

Ilustración 1. Área de la ciudad de Bacatá entre las calles 1 a 6 y las


carreras 1 a 6.

Las vías horizontales son llamadas calles y están enumeradas iniciando


en 1. Las vías verticales son llamadas carreras y están numeradas de
igual forma.

El alcalde de Bacatá ha decidido modificar la forma en que las tarifas de


los taxis son calculadas, considerando la geometría de la ciudad. Las
nuevas tarifas se calcularán de acuerdo a la calle y carrera de la
intersección donde se toma el taxi, así como a la calle y carrera donde
finaliza el viaje. Específicamente, el costo de un viaje se calcula como

donde |x| representa el valor absoluto de x.

El alcalde le ha pedido personalmente a usted que construya la


aplicación que calculará las nuevas tarifas y reemplazará a los taxímetros
actuales. La aplicación debe solicitar la información de los puntos de

https://poli.instructure.com/courses/14942/quizzes/52060 7/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

inicio y finalización del viaje, e informar al usuario cuánto deberá pagar al


llegar a su destino.

A continuación se propone una expresión para calcular el costo de un


viaje:

100 * ((cll_destino - cll_origen) + (car_destino - car_origen))

La expresión propuesta es:

Correcta. Dado que la calle y carrera de destino son siempre mayores que
la calle y carrera de origen, no es necesario el uso de valor absoluto.

Incorrecta porque se invierte el orden de los puntos origen y destino.

Incorrecta porque el valor de 100 no es precedido por el símbolo $.

Incorrecta porque se omite el cálculo de los valores absolutos.

La expresión es incorrecta debido a que omite la evaluación de los valores


absolutos de las diferencias. Esto puede ocasionar incluso que se obtenga
un costo de viaje negativo, lo cual no tiene interpretación alguna.

Debido a que la ecuación original incluye el valor absoluto de cada


diferencia, el orden de los puntos de origen y destino no tiene efecto
alguno sobre el resultado.

En la ecuación presentada en el enunciado, el signo $ indica que el


resultado está en unidades monetarias; sin embargo, esto no debe ser
tenido en cuenta en el programa.

Pregunta 5 5 / 5 pts

Las calles de la ciudad de Bacatá forman una cuadrícula perfecta, como


se muestra en la ilustración 1.

https://poli.instructure.com/courses/14942/quizzes/52060 8/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Ilustración 1. Área de la ciudad de Bacatá entre las calles 1 a 6 y las


carreras 1 a 6.

Las vías horizontales son llamadas calles y están enumeradas iniciando


en 1. Las vías verticales son llamadas carreras y están numeradas de
igual forma.

El alcalde de Bacatá ha decidido modificar la forma en que las tarifas de


los taxis son calculadas, considerando la geometría de la ciudad. Las
nuevas tarifas se calcularán de acuerdo a la calle y carrera de la
intersección donde se toma el taxi, así como a la calle y carrera donde
finaliza el viaje. Específicamente, el costo de un viaje se calcula como

donde |x| representa el valor absoluto de x.

El alcalde le ha pedido personalmente a usted que construya la


aplicación que calculará las nuevas tarifas y reemplazará a los taxímetros
actuales. La aplicación debe solicitar la información de los puntos de
inicio y finalización del viaje, e informar al usuario cuánto deberá pagar al
llegar a su destino.

El alcalde le ha pedido que su programa, además de resolver el problema


ya planteado, permita mostrar en pantalla el mapa de la ciudad. Dadas

https://poli.instructure.com/courses/14942/quizzes/52060 9/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

las limitaciones de los dispositivos donde se correrá la aplicación, el


mapa debe ser formado por símbolos imprimibles. Cada manzana de la
ciudad será dibujada de la siguiente forma:

Se requiere un método que muestre en pantalla una calle de seis


manzanas:

El arreglo manzana contiene la representación gráfica de una manzana. De


los siguientes, el método que dibuja correctamente una calle de seis
manzanas es:

static void pintar_calle(){


String[] manzana = {"+---+", "| |", "+---+"};
String[] linea = {"", "", ""};
for (int i = 0; i < linea.length; i++) {
for (int j = 0; j < 6; j++) {
linea[i] = linea[i] + " " + manzana[i];
}
System.out.println(linea[i]);
}
}

El método

static void pintar_calle(){


String[] manzana = {"+---+", "| |", "+---+"};
for (int j = 0; j < 6; j++)
for (int i = 0; i < 3; i++)
System.out.println(manzana[i]);
}

dibuja una manzana sobre la otra.

El método

static void pintar_calle(){


String[] manzana = {"+---+\n", "| |\n", "+---+\n"};
String[] linea = {"", "", ""};
for (int i = 0; i < linea.length; i++) {
for (int j = 0; j < 6; j++) {
linea[i] = linea[i] + " " + manzana[i];
https://poli.instructure.com/courses/14942/quizzes/52060 10/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]
}
System.out.println(linea[i]);
}
}

falla debido a los saltos de línea al final de cada cadena de la


manzana.

El método

static void pintar_calle(){


String[] manzana = {"+---+", "| |", "+---+"};
String[] linea = {"", "", ""};
for (int i = 0; i < linea.length; i++)
for (int j = 0; j < 6; j++)
linea[i] = linea[i] + " " + manzana[i];
System.out.println(linea[i]);
}
}

no compila debido a la ausencia de llaves del ciclo for i.

El método

static void pintar_calle(){


String[] manzana = {"+---+", "| |", "+---+"};
String[] linea = {"", "", ""};
for (int i = 0; i < linea.length; i++) {
for (int j = 0; j < 6; j++) {
linea[i] = linea[i] + " " + manzana[i];
}
System.out.println(linea[i]);
}
}

dibuja la cuadra correctamente.

static void pintar_calle(){


String[] manzana = {"+---+", "| |", "+---+"};
String[] linea = {"", "", ""};
for (int i = 0; i < linea.length; i++)
for (int j = 0; j < 6; j++)
linea[i] = linea[i] + " " + manzana[i];
System.out.println(linea[i]);
}
}

https://poli.instructure.com/courses/14942/quizzes/52060 11/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

static void pintar_calle(){


String[] manzana = {"+---+\n", "| |\n", "+---+\n"};
String[] linea = {"", "", ""};
for (int i = 0; i < linea.length; i++) {
for (int j = 0; j < 6; j++) {
linea[i] = linea[i] + " " + manzana[i];
}
System.out.println(linea[i]);
}
}

static void pintar_calle(){


String[] manzana = {"+---+", "| |", "+---+"};
for (int j = 0; j < 6; j++)
for (int i = 0; i < 3; i++)
System.out.println(manzana[i]);
}

Pregunta 6 5 / 5 pts

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
le ha pedido su ayuda para codificar algunas de las tareas básicas del
editor.

David ha notado que cuando se requiere imprimir el código sería de gran


utilidad (por la cantidad de papel gastado) eliminar las líneas que
contienen únicamente comentarios. La expresión que le permite
determinar si una línea de código consiste únicamente de un comentario
es:

hasPrefix(“//”);

https://poli.instructure.com/courses/14942/quizzes/52060 12/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

linea.prefix(“//”);

startsWith(“//”);

A pesar de ser todos los propuestos nombres razonables para el


método deseado, dicho método en la clase String es llamado
startsWith.

beginsWith(“//”);

Pregunta 7 5 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Como parte del programa que resuelve el problema enunciado, se debe


implementar un método que tome como entrada una matriz con una

https://poli.instructure.com/courses/14942/quizzes/52060 13/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

imagen y retorne una segunda matriz con la imagen rotada 90 grados en


el sentido de las manecillas del reloj.

El método que cumple este propósito es:

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[i][4-j];

return rotada;

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[j][i];

return rotada;

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[4-j][i] = img[i][j];

return rotada;

https://poli.instructure.com/courses/14942/quizzes/52060 14/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[4-j][i];

return rotada;

Al usar la instrucción rotada[i][j] = img[j][i], se calcula la transpuesta de la


matriz de entrada. La transpuesta corresponde a la matriz rotada en
sentido contrario a las manecillas del reloj, pero también reflejada
invirtiendo el orden de las filas.

rotada[i][j] = img[4-j][i] rota la matriz en el sentido de las manecillas del


reloj.

rotada[i][j] = img[i][4-j] refleja la matriz invirtiendo el orden de las columnas.

rotada[4-j][i] = img[i][j] rota la matriz en el sentido contrario a las manecillas


del reloj. Por tanto, ésta es la opción correcta.

Incorrecto Pregunta 8 0 / 5 pts

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
le ha pedido su ayuda para codificar algunas de las tareas básicas del
editor.

Una de las funcionalidades con que David desea que cuente su editor es
la de eliminar líneas vacías del código. El siguiente método recibe un
código y retorna el código sin líneas vacías.

static String eliminar_lineas_vacias(String codigo){


String nuevo_codigo = "";
codigo = "\n" + codigo;
for (int i = 1; i < codigo.length(); i++)
if (<condicion>)

https://poli.instructure.com/courses/14942/quizzes/52060 15/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

nuevo_codigo = nuevo_codigo + codigo.charAt(i);


return nuevo_codigo;
}

Para que el método sea correcto, <condicion> debe ser reemplazado por:

charAt(i-1)=='\n'

charAt(i)!='\n'

charAt(i)=='\n' && codigo.charAt(i-1)=='\n'

charAt(i)!='\n' || codigo.charAt(i-1)!='\n'

Incorrecto Pregunta 9 0 / 5 pts

Se dice que Leonardo de Pisa, más conocido como Fibonacci, descubrió


la sucesión que lleva su nombre estudiando cómo crecía una población
de conejos. El crecimiento de la población seguía las siguientes reglas:

La población inicia con una pareja de conejos jóvenes.


Una pareja de conejos jóvenes madura al cumplir un mes.
Una pareja de conejos concibe una nueva pareja de conejos jóvenes
cada mes, iniciando un mes después de su maduración.

Así, en los meses 1 y 2 se tendría únicamente una pareja. Para el mes 3,


habría ya una nueva pareja, para un total de 2. En el mes 4, la pareja ya
madura tendría una nueva pareja, completando 3 parejas. En el mes 5, la
primera pareja y su primera pareja cría engendrarían dos nuevas parejas,
siendo la población total 5 parejas.

El número de parejas que conforman la población en el mes n puede


calcularse mediante la ecuación de recurrencia:

https://poli.instructure.com/courses/14942/quizzes/52060 16/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

De los siguientes, un método que no evalúa correctamente la ecuación


de recurrencia presentada es:

static long parejas(int n){


if (n==1 || n==2) return 1;
return parejas(n-1) + parejas(n-2);
}

static long parejas(int n){


if (n==1 || n==2) return 1;
if (n>2) return parejas(n-1) + parejas(n-2);
}

static long parejas(int n){


if (n>2) return parejas(n-1) + parejas(n-2);
return 1;
}

static long parejas(int n){


return (n==1 || n==2)?1:parejas(n-1) + parejas(n-2);
}

Incorrecto Pregunta 10 0 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

https://poli.instructure.com/courses/14942/quizzes/52060 17/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Antes de procesar una imagen, debe verificarse que ésta contenga


únicamente los valores 0 y 1. Se desea un método que retorne verdadero
si la imagen es correcta o falso si contiene colores no aceptados (valores
diferentes a 0 ó 1).

El método que hace correctamente esta verificación es:

static boolean verificar_colores(byte[][] img){


for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (img[i][j]!=1 &&
img[i][j]!=0) return false;
return true;
}

static boolean verificar_colores(byte[][] img){


for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (img[i][j]!=1 ||
img[i][j]!=0) return false;
return true;
}

https://poli.instructure.com/courses/14942/quizzes/52060 18/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

static boolean verificar_colores(byte[][] img){


for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (img[i][j]==1 ||
img[i][j]==0) return true;
return false;

static boolean verificar_colores(byte[][] img){


for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (img[i][j]==1 &&
img[i][j]==0) return true;
return false;
}

Incorrecto Pregunta 11 0 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

https://poli.instructure.com/courses/14942/quizzes/52060 19/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Como parte del programa que resuelve el problema enunciado, se debe


implementar un método que tome como entrada una matriz con una
imagen y retorne la imagen reflejada de manera que se invierte el orden
las columnas.

El método que cumple este propósito es:

static byte[][] reflejar(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[4-j][i] = img[i][j];

return rotada;

static byte[][] reflejar(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[i][4-j];

return rotada;

static byte[][] reflejar(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[j][i];

return rotada;

https://poli.instructure.com/courses/14942/quizzes/52060 20/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

static byte[][] reflejar(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[4-j][i];

return rotada;

Incorrecto Pregunta 12 0 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Antes de procesar una imagen, debe verificarse que ésta tenga el tamaño
adecuado (5 filas y 5 columnas). La expresión que permita hacer dicha
verificación es:

img.rows == 5 && img.cols == 5

https://poli.instructure.com/courses/14942/quizzes/52060 21/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

length == 5 && img[0].length == 5

img.length == 25

img.length == 5

Pregunta 13 5 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Como solución definitiva al problema enunciado, se propuso el siguiente


método:

static boolean comparar_imagenes(byte[][] img1, byte[][] img2){


for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
if (son_iguales(img1, img2)) return true;
img2 = rotar_imagen(img2);
}
img2 = reflejar(img2);
}

https://poli.instructure.com/courses/14942/quizzes/52060 22/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

return false;
}

La función rotar_imagen retorna una copia de la imagen de entrada


rotada 90 grados en sentido contrario a las manecillas del reloj.
La función reflejar retorna una copia de la imagen de entrada
invirtiendo el orden de sus columnas.
La función son_iguales retorna un valor booleano indicando si las dos
matrices son idénticas o no.

Sobre el método comparar_imágenes es posible afirmar que:

Resuelve el problema de manera correcta.

El método toma como referencia la imagen img1 y modifica la imagen


img2 intentando hacerlas idénticas. La rotación de img2 ocurre 4 veces,
probando todas las rotaciones posibles. Esto hace que sea indiferente si
se rota en el sentido de las manecillas del reloj o en sentido contrario.
Adicionalmente, la imagen es reflejada y rotada 4 veces nuevamente, por
lo que todas las distintas versiones de una misma pieza son verificadas.

En conclusión, el método es correcto.

No resuelve el problema ya que solamente se rota una de las imágenes,


no las dos.

No resuelve el problema ya que solamente se refleja una de las imágenes,


no las dos.

No resuelve el problema ya que rotar_imagen debería rotar la imagen en el


sentido de las manecillas del reloj, y no en sentido contrario.

Pregunta 14 5 / 5 pts

https://poli.instructure.com/courses/14942/quizzes/52060 23/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
le ha pedido su ayuda para codificar algunas de las tareas básicas del
editor.

Una de las funcionalidades con que David desea que cuente su editor es
la de calcular el número de líneas de código en un archivo. El editor debe
contar únicamente las líneas no vacías.

El siguiente método calcula el número de líneas de código en el texto


representado por la cadena de entrada.

static int contar_lineas(String codigo){


codigo = codigo + "\n";
int contador=0;
for (int i = 0; i < codigo.length(); i++)
if (<condicion>)
contador = contador + 1;
return contador;
}

Para que el método sea correcto, <condicion> debe ser reemplazado por:

codigo.charAt(i)!='\n' && codigo.charAt(i-1)=='\n'

codigo.charAt(i)=='\n'

codigo.charAt(i)=='\n' && codigo.charAt(i-1)!='\n'

codigo.charAt(i)=='\n' && i>0 && codigo.charAt(i-1)!='\n'

https://poli.instructure.com/courses/14942/quizzes/52060 24/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

El programa cuenta las ocurrencias del símbolo ‘\n’, lo cual es igual al


número de líneas en el código. Se omite en la cuenta los símbolos de
nueva línea precedidos de símbolos idénticos, ya que estos corresponden
a líneas vacías.

codigo.charAt(i)=='\n' no verifica que el símbolo de nueva línea no


corresponda a una línea vacía.

codigo.charAt(i)=='\n' && codigo.charAt(i-1)!='\n' y codigo.charAt(i)!='\n' &&


codigo.charAt(i-1)=='\n' generan errores en tiempo de ejecución cuando i =
0.

codigo.charAt(i)=='\n' && i>0 && codigo.charAt(i-1)!='\n' verifica que el


símbolo ‘\n’ no represente una línea vacía y que i > 0 , evitando errores en
tiempo de ejecución. Por tanto, ésta es la respuesta correcta.

Pregunta 15 5 / 5 pts

Se dice que Leonardo de Pisa, más conocido como Fibonacci, descubrió


la sucesión que lleva su nombre estudiando cómo crecía una población
de conejos. El crecimiento de la población seguía las siguientes reglas:

La población inicia con una pareja de conejos jóvenes.


Una pareja de conejos jóvenes madura al cumplir un mes.
Una pareja de conejos concibe una nueva pareja de conejos jóvenes
cada mes, iniciando un mes después de su maduración.

Así, en los meses 1 y 2 se tendría únicamente una pareja. Para el mes 3,


habría ya una nueva pareja, para un total de 2. En el mes 4, la pareja ya
madura tendría una nueva pareja, completando 3 parejas. En el mes 5, la
primera pareja y su primera pareja cría engendrarían dos nuevas parejas,
siendo la población total 5 parejas.

El número de parejas que conforman la población en el mes n puede


calcularse mediante la ecuación de recurrencia:

El número de parejas que forman la población después de 20 meses es:

https://poli.instructure.com/courses/14942/quizzes/52060 25/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

6765

parejas(20) = parejas(19) + parejas(18)


parejas(19) = parejas(18) + parejas(17)
parejas(18) = parejas(17) + parejas(16)
parejas(17) = parejas(16) + parejas(15)
parejas(16) = parejas(15) + parejas(14)
parejas(15) = parejas(14) + parejas(13)
parejas(14) = parejas(13) + parejas(12)
parejas(13) = parejas(12) + parejas(11)
parejas(12) = parejas(11) + parejas(10)
parejas(11) = parejas(10) + parejas(9)
parejas(10) = parejas(9) + parejas(8)
parejas(9) = parejas(8) + parejas(7)
parejas(8) = parejas(7) + parejas(6)
parejas(7) = parejas(6) + parejas(5)
parejas(6) = parejas(5) + parejas(4)
parejas(5) = parejas(4) + parejas(3)
parejas(4) = parejas(3) + parejas(2)
parejas(3) = parejas(2) + parejas(1)
parejas(2) = 1
parejas(1) = 1

entonces

parejas(3) = 1 + 1 = 2
parejas(4) = 2 + 1 = 3
parejas(5) = 3 + 2 = 5
parejas(6) = 5 + 3 = 8
parejas(7) = 8 + 5 = 13
parejas(8) = 13 + 8 = 21
parejas(9) = 21 + 13 = 34
parejas(10) = 34 + 21 = 55
parejas(11) = 55 + 34 = 89
parejas(12) = 89 + 55 = 144
parejas(13) = 144 + 89 = 233
parejas(14) = 233 + 144 = 377
parejas(15) = 377 + 233 = 610
parejas(16) = 610 + 377 = 987
parejas(17) = 987 + 610 = 1597
parejas(18) = 1597 + 987 = 2584
parejas(19) = 2584 + 1597 = 4181
parejas(20) = 4181 + 2584 = 6765

2584

10946

https://poli.instructure.com/courses/14942/quizzes/52060 26/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

4181

Pregunta 16 5 / 5 pts

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
le ha pedido su ayuda para codificar algunas de las tareas básicas del
editor.

Una de las funcionalidades con que David desea que cuente su editor es
la de decidir si un nombre de variable es válido o no. Recuerde que un
nombre de variable válido puede contener únicamente letras, dígitos,
guiones bajos (_) y signos de dólar ($). Además, el primer símbolo del
nombre no puede ser un dígito.

La expresión que permite verificar si el primer símbolo del nombre es un


dígito es:

length() > 0 && nombre.charAt(0)>=’9’ && nombre.charAt(0)<=’0’

nombre.length() > 0 && nombre.charAt(0)>=9 && nombre.charAt(0)<=0

length() > 0 && nombre.charAt(0)>=’0’ && nombre.charAt(0)<=’9’

Para verificar que un carácter corresponda a un dígito basta con


preguntar si su código se encuentra entre el código del carácter ‘0’
(48) y el código del carácter ‘9’ (57), inclusive.

length() > 0 && nombre.charAt(0)>=0 && nombre.charAt(0)<=9

https://poli.instructure.com/courses/14942/quizzes/52060 27/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Incorrecto Pregunta 17 0 / 5 pts

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
le ha pedido su ayuda para codificar algunas de las tareas básicas del
editor.

David ha notado que cuando se requiere imprimir el código sería de gran


utilidad (por la cantidad de papel gastado) eliminar la indentación: el
margen izquierdo de las líneas. La instrucción que le permite tomar una
línea de código y eliminar su margen izquierdo es:

linea = linea.trim();

linea = linea.removeLeftMargin();

trim();

removeLeftMargin();

Pregunta 18 5 / 5 pts

Se desea implementar el sistema de visión de un robot clasificador de


piezas. El robot ve a través de una cámara que transforma la imagen de
cada pieza en una matriz de 5 filas y 5 columnas. Cada celda de la matriz
contiene un 1 o un 0, de acuerdo a si el color en dicho píxel es negro o
blanco, respectivamente.

Una pieza puede ser rotada 90, 180 o 270 grados. Además, puede
volcarse. Como ejemplo de lo anterior, las siguientes imágenes
corresponden a un mismo tipo de pieza:
https://poli.instructure.com/courses/14942/quizzes/52060 28/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

Su tarea es implementar un programa que reciba las matrices de dos


imágenes e indique si las imágenes corresponden a piezas del mismo
tipo.

Como parte del programa que resuelve el problema enunciado, se debe


implementar un método que tome como entrada una matriz con una
imagen y retorne una segunda matriz con la imagen rotada 90 grados en
sentido contrario a las manecillas del reloj.

El método que cumple este propósito es:

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[i][4-j];

return rotada;

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[4-j][i];

return rotada;

https://poli.instructure.com/courses/14942/quizzes/52060 29/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[i][j] = img[j][i];

return rotada;

static byte[][] rotar_imagen(byte[][] img) {

byte[][] rotada = new byte[5][5];

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

rotada[4-j][i] = img[i][j];

return rotada;

Al usar la instrucción rotada[i][j] = img[j][i], se calcula la transpuesta de la


matriz de entrada. La transpuesta corresponde a la matriz rotada en
sentido contrario a las manecillas del reloj, pero también reflejada
invirtiendo el orden de las filas.

rotada[i][j] = img[4-j][i] rota la matriz en el sentido de las manecillas del


reloj.

rotada[i][j] = img[i][4-j] refleja la matriz invirtiendo el orden de las columnas.

rotada[4-j][i] = img[i][j] rota la matriz en el sentido contrario a las manecillas


del reloj. Por tanto, ésta es la opción correcta.

Pregunta 19 5 / 5 pts

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
https://poli.instructure.com/courses/14942/quizzes/52060 30/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

le ha pedido su ayuda para codificar algunas de las tareas básicas del


editor.

Una de las funcionalidades con que David desea que cuente su editor es
la de decidir si un nombre de variable es válido o no. Recuerde que un
nombre de variable válido puede contener únicamente letras, dígitos,
guiones bajos (_) y signos de dólar ($). Además, el primer símbolo del
nombre no puede ser un dígito.

La expresión que permite verificar si un símbolo c es una letra, un dígito,


un guión bajo o un signo de dólar es:

(c >= ’A’ && c <= ’Z’) || (c >= ’a’ && c <= ’z’) || (c >= ’0’ && c
<= ’9’) || c == ’_’ || c == ’$’

Un carácter corresponde a una letra si su código se encuentra entre el


código de ‘A’ y el código de ‘Z’, o entre el código de ‘a’ y el código de ‘z’.

De igual forma, un carácter corresponde a un dígito si su código se


encuentra entre el código de ‘0’ y el código de ‘9’.

Por tanto, la opción correcta es

(c >= ’A’ && c <= ’Z’) || (c >= ’a’ && c <= ’z’) || (c >=
’0’ && c <= ’9’) || c == ’_’ || c == ’$’

((c >= ’A’ || c <= ’a’) && (c >= ’Z’ || c <= ’z’)) || (c >= ’0’ ||
c <= ’9’) || c == ’_’ || c == ’$’

((c >= ’A’ || c <= ’Z’) && (c >= ’a’ || c <= ’z’)) || (c >= ’0’ ||
c <= ’9’) || c == ’_’ || c == ’$’

https://poli.instructure.com/courses/14942/quizzes/52060 31/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

(c >= ’A’ && c <= ’a’) || (c >= ’Z’ && c <= ’z’) || (c >= ’0’ && c
<= ’9’) || c == ’_’ || c == ’$’

Pregunta 20 5 / 5 pts

David quiere desarrollar un programa de edición de código java que le


permita hacer su código más legible y calcule algunos datos interesantes.
Dado que el procesamiento de información textual no es su fuerte, David
le ha pedido su ayuda para codificar algunas de las tareas básicas del
editor.

David cree que si representa el texto como un arreglo de valores char en


lugar de como un String, su programa será más eficiente. La instrucción
que le permite convertir el código representado como String en un arreglo
de chars es:

char[] cod_arr = cod.toCharArray();

No es posible hacer una conversión directa de String a char[], por lo


que las instrucciones

char[] cod_arr = cod; y char[] cod_arr = (char[]) cod; generarán errores


de compilación.

El método de la clase String que permite convertir una cadena a


arreglo de chars es toCharArray.

char[] cod_arr = (char[]) cod;

char[] cod_arr = cod;

https://poli.instructure.com/courses/14942/quizzes/52060 32/33
10/5/2020 Evaluacion final - Escenario 8: PRIMER BLOQUE-TEORICO - PRACTICO/PROGRAMACION DE COMPUTADORES-[GRUPO8]

char[] cod_arr = cod.toArray();

Puntaje del examen: 70 de 100

https://poli.instructure.com/courses/14942/quizzes/52060 33/33

También podría gustarte