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

Examen #1 [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 tres de las cuatro preguntas. ¡No haga más de lo que se le pide!

 

1) [33 pts] Considere la clase Arbol, en que cada nodo tiene un vector que apunta a sus hijos:

class Arbol {
    class nodo {
        nodo * m_h[21];  // hasta 21 punteros a los hijos 
        Banana m_val;    // valor almacenado en el nodo
    }; // nodo
    friend bool Es_Completo(const Arbol & T);
    nodo * m_raiz;
}; // Arbol

1.a) [0 pts] Dibuje el modelo (diagrama) que corresponde a la clase Arbol.

1.b) [11 pts] Especifique la función Es_Completo() que retorna true cuando cada nodo tiene el mismo número de hijos o CERO.

1.c) [11 pts] Defina la invariante para la clase Arbol. Implemente un método que verifique la invariante de la clase.

1.d) [11 pts] Implemente Es_Completo().

 

2) [33 pts]

2.a) [8 pts] Explique por qué se usa la abstracción en programación. Use código C++ para complementar su explicación.

2.b) [8 pts] Explique por qué se usa la especificación en programación. Use código C++ para complementar su explicación.

2.c) [4 pts] Explique qué es la implementación en programación.

2.d) [13 pts] Explique cuáles son las diferencias entre los conceptos de "Abstracción", "Especificación", e "Implementación". Use código C++ para complementar su explicación.

 

3) [33 pts] Considere la operación para racionales Exp(x,y), que calcula el valor de "x" elevado a la potencia "y", en donde "y" es un número entero.

3.a) [7 pts] Declare la operación Exp(x,y).

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

3.b) [16 pts] Implemente Exp(x,y). Debe accesar el Rep de la clase para asegurar que su implementación es eficiente.

3.c) [4 pts] ¿Porqué debe o no invocar a rational::simplify() en la implementación de Exp(x,y)?

3.d) [7 pts] ¿Qué desventajas tiene que la función Exp() sea un miembro de la clase rational?

 

4) [33 pts]

4.a) [3 pts] Haga el modelo (diagrama) de la clase Paralelo que contiene dos vectores, el primero de enteros pequeños int y el segundo vector de enteros grandes long.

4.b) [6 pts] Declare la clase Paralelo. Todos los campos del Rep de su clase deben ser privados.

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

4.c) [12 pts] Considere la clase Bolsa que se muestra a continuación. Supongo que el Rep de la Bolsa tiene el campo "m_vec" que es de tipo Paralelo. Implemente el método Bolsa::Esta().

class Bolsa {
public:
    int Esta(long i); // # de veces que "i" Está() en la Bolsa
    void Agrega(long i);  // incrementa "Esta(i)"
//  ...
}; // Bolsa
Clase Bolsa

4.d) [12 pts] Especifique e implemente todos los métodos de la clase Paralelo que usó en la implementación de Bolsa::Esta(). Use el formato Doxygen e incluya los datos de prueba BUnit.

Soluciones

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