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

Examen Final [solución]

      Duración: tres 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. ¡No haga más de lo que se le pide! ¡Conteste todas las preguntas!

1) [25 pts] Considere la implementación de su clase TList, que programó en la Tarea #4.

1.a) [10 pts] Especifique las operaciones de inserción y borrado que caracterizan a una cola.

1.b) [10 pts] Implemente las operaciones que especificó en el punto anterior, basándose en las operaciones de la lista, pero cuide de no accesar la parte privada de la lista, pues será penalizado si accesa directamente el Rep de la lista.

1.c) [5 pts] Explique porqué en el lenguaje C++ es posible manterne el ocultamiento de datos sin sacrificar eficiencia.

2) [25 pts] Use la implementación de su clase TList, que programó en la Tarea #4, para implementar la operación TList::Delete_Every_Nth().

2.a) [5 pts] Describa cuál es el modelo (diagrama) que usted usó en su implementación. Describa también el Rep que usó. Justifique por qué escogió ese modelo.

2.b) [10 pts] Especifique la operación TList::Delete_Every_Nth().

2.c) [10 pts] Implemente la operación TList::Delete_Every_Nth(). Cuídese bien de usar únicamente las operaciones públicas de la lista, pues será penalizado si accesa directamente el Rep de la lista.

3) [25 pts] Considere una lista cuyo Rep incluye dos puntero: uno al primer nodo de la lista y otro al último.

3.a) [5 pts] La operación TList::Peck(here,oL,there) (picotear) toma un valor de la lista "oL" y lo traslada a "*this". 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 TList::Peck(), y no olvide incluir algunos ejemplos de cómo funciona.

3.b) [10 pts] Especifique la operación TList::KBlock(), que funciona de manera similar a TList::Peck(), pero que permite trasladar un grupo de "n" nodos.

3.c) [10 pts] Implemente TList::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.

4) [25 pts] Escriba el programa LNGST.c++ que lea un archivo y cuenta la cantidad de líneas que contiene, y que indique también cuál es la longitud de la línea más larga del archivo. El formato de salida del programa es el siguiente:
C:\> lngst archivo.*
  lines:max    file: line
   5345:40     archivo.uno: 123456789.123456789.123456789.123456789
    125:850    archivo.dos: 123456789.123456789.123456789.123456789. >>>
   2235:26     archivo.txt: El Pacuare está en peligro

      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.

Soluciones

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