Universidad de Costa Rica
|
|
Este examen tiene 2 partes. La primera consiste en hacer un programa en el lenguaje C++ para lo que tiene 24 horas para entregar su programa completo. Use Visual Studio .net para programar su solución.
Para resolver la parte teórica del examen tiene un total de 2 y media horas consecutivas.
http://www.di-mare.com/adolfo/cursos/2002-1/p2-ta-7.htm
http://www.di-mare.com/adolfo/cursos/1999-1/p2-ea-f.htm#LNGST.c++
Siga el estándar de documentación e implementación definido para la primera tarea programada de este semestre. Envíe por correo electrónico su solución al profesor.
http://www.di-mare.com/adolfo/cursos/2006-1/p2-ta-1.htm
http://www.di-mare.com/adolfo/cursos/2006-1/p2-ta-1.htm#entrega
Tiempo de entrega: | 24 horas |
Modalidad: | Individual |
Duración: dos y media horas. 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 todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] En esta pregunta usted trabajará con matrices ralas, o sea, con matrices que tienen una gran cantidad de valores iguales.
1.a) [8 pts] Escriba la declaración de la clase
Matriz_Rala
que tiene las operaciones básicas
para manejar matrices ralas. En el
Rep Use 3
vectores paralelos para representar cada uno de los elemento
(i,j,val)
almacenados en la matriz rala.
Emplantille su
matriz.
1.b) [5 pts] Especifique en formato
"Doxygen" el
método Matriz_Rala::Traspuesta()
que traspone
la matriz.
1.c) [10 pts] Implemente el método
Matriz_Rala::Traspuesta()
. No se le meta al
Rep de la clase Matriz_Rala
.
1.d) [10 pts] Implemente el método
Matriz_Rala::Traspuesta()
. Debe usar los campos del
Rep directamente, pero evite copiar el valor
"val
" almacenado en cada una de los elementos
(i,j,val)
de la matriz. Exlique por qué esta
implementación es eficiente.
1.e) [0 pts] Implemente el operador de acceso a los valores de la matriz.
1.f) [0 pts]
Dibuje el
modelo para la clase "Matriz_Rala
".
2) [33 pts] El programa "
Nmbag.cpp
" sirve para leer
números y contar cuántas veces aparece cada uno.
Implemente la parte de la clase "Nmbag
" que se
necesita para que este programa funcione.
int main() { Nmbag B; // la mega-bolsota long n; // lee todos los valores while (cin >> n) { B.Inc(n); } for (n=0; n<LONG_MAX; ++n) { if (0 != B[n]) { cout << n << " está " << B[n]; cout << " veces en la bolsa" << endl; } } return 0; } // main() |
2.a) [7 pts]
Defina el
Rep
para la clase. Suponga que nunca ocurrirá que necesite
almancenar más de 4096
valores diferentes en
su "Nmbag
".
2.b) [1 pts] Implemente el constructor y el destructor para la clase.
2.c) [11 pts]
Especifique
e implemente la operación
examinadora
"B[n]
".
2.d) [14 pts]
Especifique e
implemente
la operación
mutadora
"B.Inc(n)
".
2.e) [0 pts]
Mejore la eficiencia de la operación "B[n]
" usando
búsqueda binaria. Explique por qué esto no
mejora la implementación de "B.Inc(n)
".
3) [33 pts] Considere una lista cuyo Rep es compatible con la de la lista de la biblioteca STL de C++.
3.a) [5 pts]
Derive de la clase
std::list
su clase "MyList
", para incluirle la operación
"Peck()
".
3.b) [6 pts]
La operación MyList::Peck(here,oL,there)
(picotear) toma un valor de la lista "oL
" y
lo traslada a "*this
" (nunca copia). Los iteradores
"here
" y "there
" apuntan a cada una de
las listas. El valor a trasladar es el que sigue a
"there
" en "oL
".
Especifique la operación MyList::Peck()
;
no olvide incluir algunos ejemplos de cómo funciona.
Recuerde manejar correctamente los
casos límite.
3.c) [5 pts]
Especifique la operación MyList::KBlock()
, que
funciona de manera similar a MyList::Peck()
, pero que
permite
trasladar un grupo de
"n
" valores.
3.d) [17 pts]
Implemente MyList::KBlock()
. Cuídese bien de
usar únicamente las operaciones públicas de la
lista, pues será penalizado si accesa directamente el
Rep de la lista. Debe implementar todos los algoritmos
que utilice, salvo MyList::Peck()
.
Adolfo Di Mare <adolfo@di-mare.com>.
|