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 #2 [solución]

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

 

3) [33 pts] En algunas aplicaciones conviene contar con la clase Acumulador que sirve para sumar un montón de valores numéricos, pero eliminando del total tanto al más grande como al más pequeño de todos los valores. Por ejemplo, el acumulador aplicado a los valores (1,5,2,2,3,3,4,5) sólo sumaría 5+2+2+3+3+4 y eliminaría el 1 y alguno de los 5's, que son los valores menor y mayor de toda la secuencia.

3.a) [3 pts] Las operaciones más importantes de esta clase son acumule(), total() y cantidad(). Especifique en formato "Doxygen" cada una de estas operaciones.

3.b) [2 pts] Especifique en formato "Doxygen" la operación elimine() que permite borrar uno de los valores acumulados, sea éste el más grande, el más pequeño, o cualquiera de los valores intermedios. De esta manera usted estará modificando la clase Acumulador de la tarea programada, que es una clase que no permite eliminar alguno de los valores que tiene acumulados.

3.c) [6 pts] Defina el Rep para su clase Acumulador. Debe usar un vector de valores para mantener memoria de todos los números que han sido acumulados.

3.d) [8 pts] Implemente las operaciones cantidad() y total() y para la clase acumulador. Recuerde manejar correctamente los casos límite.

3.e) [7 pts] Implemente Acumulador::acumule().

3.f) [7 pts] Implemente Acumulador::elimine().

 

4) [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()

4.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".

4.b) [1 pts] Implemente el constructor y el destructor para la clase.

4.c) [11 pts] Especifique e implemente la operación examinadora "B[n]".

4.d) [14 pts] Especifique e implemente la operación mutadora "B.Inc(n)".

4.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)".

 

5) [33 pts] Las operaciones más importantes de un conjunto son "Set::Insert()" y "Set::Member()".

5.a) [0 pts] Explique por qué estas 2 operaciones son las más importantes de la clase "Set".

5.b) [11 pts] Haga la declaración mínima de la clase "Set" que usa una lista para almacenar un conjunto de valores numéricos.

5.c) [0 pts] Dibuje el modelo para la clase "Set".

5.d) [11 pts] Especifique en formato "Doxygen" Set::Insert().

5.e) [11 pts] Implemente Set::Insert().

 

Soluciones

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