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

Examen #1 [solución]

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

 

1) [33 pts]

1.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.

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

1.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

1.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.

 

2) [33 pts] Considere la clase lista que cuenta con las operaciones lista::intercambie(i), lista::pop() y lista::push(v). La primera intercambia los valores que es encuentran en la posición "*i" y "*(++i)" de la lista, la segunda remueve de la lista el primer valor y luego lo retorna y la tercera agrega un valor al principio de la lista.

2.a) [3 pts] Especifique lista::intercambie(i). Recuerde usar siempre el formato Doxygen e incluir los datos de prueba BUnit.

2.b) [3 pts] Especifique lista::push(v) y lista::pop().

2.c) [7 pts] Especifique Particion() que separa una lista en dos listas, de manera que los valores que quedan en la primera lista son mayores que el parámetro "pivote" de Particion(), y los de la segunda son los demás valores almacenados en la lista original.

2.d) [20 pts] Implemente Particion(). Como esta función no es amiga (friend) de la clase lista, al escribir su implementación use la operaciones lista::push(v) y lista::pop() y alguna de lista::intercambie(i) o lista::isEmpty().

 

3) [33 pts] La función "rotalina(L,i,n)" para la clase "std::list<>" sirve para rotar circularmente una parte de la lista:
(a b [c d e] f) ==> (a b [e c d] f)
      i--->               i--->
       n=3                 n=3

3.a) [11 pts] Especifique "rotalina(L,i,n)". Incluya los datos de prueba BUnit y use el formato Doxygen.

3.b) [11 pts] Implemente "OrdeneLista(L)<>". Use la función "rotalina(L,i,n)", iteradores y el operador de comparación.

3.c) [11 pts] Implemente "rotalina(L,i,n)". Use "splice<>()" para evitar copiar los valores de la lista.

 

Soluciones

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