Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2006
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Examen Final [solución]

      Duración: dos 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 un diccionario stl::map<> para almacenar los valores de la matriz rala. Emplantille su matriz.

      Recuerde que la diferencia entre "definir" y "declarar" un objeto en C++ es que las declaraciones se ponen en los archivos de encabezados <*.h> y <*.hpp>, mientras que las definiciones están en los archivos de implementación <*.c> y <*.cpp>.
  • Las declaraciones corresponden a la especificación.
  • Las definiciones corresponden a la implementación. Para facilitarle memorizar este hecho, asocie la palabra "definición" con la directiva #define que sirve para implementar macros en C++:
          #define max(a,b) ( (a)>(b) ? (a) : (b) )

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 "m_val" almacenado en cada una de las entradas 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] La función Brincolina(L,n) para la clase Lista es una función amiga que sirve para invertir el orden de varias sublistas de tamaño n en una lista:
(a b   c d   e f) ==> (b a   d c   f e)   (2)
(a b c     d e f) ==> (c b a     f e d)   (3)
(a b c d     e f) ==> (d c b a     f e)   (4)

(a b c d e f)   ==> (a b c d e f)     (1)

2.a) [5 pts] Dibuje el modelo de la lista que usará en su implementación.

2.b) [5 pts] Especifique Brincolina(L,n) (no se limite a copiar el enunciado de esta pregunta).

2.c) [23 pts] Implemente Brincolina(L,n). No copie los valores de la lista; únicamente cambie los punteros de los nodos la lista. Puede usar una lista simple o doblemente enlazada.

3) [33 pts] Escriba el programa MSTLTR.c++ que lea un archivo y graba todas las líneas que tienen una cantidad máxima de letras diferentes. El formato de salida del programa es el siguiente:
C:\> mstltr archivo.*
  lines(7) file: line
   5345   archivo.uno: abcde
    125   archivo.dos: aabbccddee
    227   archivo.dos: 1234.1234.1234.1234.1234.1234.1234.1234. >>>
   2235   archivo.txt: 12345

      Recuerde que un renglón puede ser arbitrariamente grande, de varios megabytes de longitud. Sin embargo, limítese a imprimir únicamente los primeros 40 caracteres del renglón. Cuando el renglón sea más largo, imprima los símbolos ">>>" al final. Para facilitar su trabajo, no es necesario que el programa procese varios archivos desde la línea de comandos. Si lo desea, ignore la diferencia entre mayúsculas y minúsculas.

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2006
Derechos de autor reservados © 2006
[home] <> [/\]