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 de Suficiencia [solución]

      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.

Primera Parte (Proyecto programado) [solución]

Resuelva uno de estos 2 proyectos programados. En su solución, debe usar los contenedores de la biblioteca STL de 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.

[mailto:] Entrega de Tareas

Tiempo de entrega: 24 horas
Modalidad: Individual

Segunda Parte (Teoría) [solución]

      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().

Soluciones

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