Universidad de Costa Rica
|
|
Duración: Ciento veinte minutos. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva solo tres de las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] Existen mucho algoritmos que funcionan mejor si se aplican a matrices cuadradas que se tienen sus valores por bandas. Estas son algunas de esas matrices:
1 2 3 0 0 0 1 2 3 0 0 1 2 0 0 0 2 3 0 0 0 1 0 0 2 1 2 3 0 -2 1 2 0 0 4 1 0 0 0 0 1 0 0 2 1 2 3 0 -2 1 2 0 0 5 1 0 0 0 0 1 0 0 2 1 2 0 0 -2 1 0 0 0 0 1 0 0 0 0 2 1 0 0 0 0 3 9
La primera es una matriz 4x4 que tiene una banda de 2
sub-diagonales de ancho. La primera sub-diagonal es la diagonal de
la matriz (que tiene valores "1
"), y la segunda es la
que está inmediatamente arriba de la diagonal (formada de
los valores "2
"). Como segunda sub-diagonal
también se cuenta a la que está debajo de la
diagonal principal (formada de los valores "-2
").
La cuarta matriz es una matriz de dimensión
5x5
, y su caso es un poco diferente, pues es una
matriz que tiene bandas de ancho 3. Aunque su última sub-
diagonal hacia abajo es la formada por los doces
("2
"), tiene una tercera sub-diagonal hacia arriba
formada por los valores "3
". Por eso su ancho de
banda es "3
" (y NO es "2
").
El ancho de banda de la matriz identidad es "1
",
porque sólo tiene valores diferentes de cero en la
diagonal. Una matriz llena de ceros tendrá ancho de banda
"0
".
1.a) [4 pts]
Escriba la declaración de la clase
Matriz_Cuadrada
, e incluya al método
anchoBanda()
. Haga las cosas de forma que la
dimensión de su matriz puede variar en el rango
[1..MaxDim]
.
1.b) [5 pts]
Especifique el método
Matriz_Cuadrada.anchoBanda()
que retorna el
tamaño de la banda más ancha de la matriz. Note que
en el caso peor anchoBanda()
retornará
"n
", la dimensión de la matriz, que ocurre
cuando la matriz no contiene un triángulo inferior y otro
superior lleno de ceros ("0
"). [Sugerencia: Calcule
el tamaño del triángulo de ceros inferior y superior
de la matriz].
1.c) [24 pts]
Implemente Matriz_Cuadrada.anchoBanda()
.
2) [33 pts] Una dirección internet [URL] contiene letras, dígitos y los caracteres
{
'.' '-' '_' '/' ':' '(' ')' '&' '+' }
que están
después de la hilera "http://
".
Escriba un programa completo que lea un archivo de texto y grabe
con
System.out.print()
, en renglones aparte,
únicamente aquellas parejas de direcciones internet que aparecen
juntas en el mismo renglón pero separadas por algún
caracter. Suponga que cuenta con el método estático
saqueHttp(str,n)
que retorna un número que indica
adonde comienza la n-ésima dirección internet que parece
en una hilera (o
str.length()
si no hay otra). Después de
ejecutar su programa se obtendría un resultado similar al
siguiente:
http://www.ucr.ac.cr <--> http://ecci.ucr.ac.cr http://mail.google.com <--> http://mail.yahoo.com
3) [33 pts]
ProductoMorboso()
no sirve para determinar si algún
renglón de la matriz es factor de otro.
3.a) [4 pts]
Declare la clase Matriz
con los
métodos que necesite para implementar
ProductoMorboso()
. No olvide declarar los
campos de la clase.
3.b) [11 pts]
Especifique
el
método
ProductoMorboso()
debe retornar un
ArrayList<>
de valores numéricos que contiene todos los productos que no son nulos. Para calcularlos se multiplican los valores que están en el renglón impar por los correspondientes valores del siguiente renglón par de la matriz, pero se van sumando y restando hasta el final.
[3] → 0 11 23 5 8 13 21 34 55 89 1 44 [4] → 0 92 23 37 2 0 36 85 47 75 80 7 --- ----- ---- ---- ---- --------- ------ ----- ----- ---- ---- [*] → 0 1012 529 185 16 0 756 2890 2585 6675 80 308 Productos +/- → 0 -1012 529 -185 16 0 756 -2890 2585 -6675 80 -308 -7104 → Total
3.c) [18 pts]
Implemente el método Matriz.ProductoMorboso()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|