Las soluciones para ejercicios seleccionados pueden encontrarse en el documento electrónico Pensar en C++ Volumen 2 Guía de Soluciones Comentadas disponible por una pequeña cuota en www.MindView.net.
1. Escriba un programa de prueba usando el Framework TestSuite para la clase estándar vector que prueba rigurosamente prueba las siguientes funciones con un vector de enteros: push_back( ) (añade un elemento al final del vector) front( ) (devuelve el primer elemento en el vector), back( ) (devuelve el último elemento en el vector), pop_back( ) (elimina el último elemento sin devolverlo), at( ) (devuelve el elemento en una posición específica), y size( ) (devuelve el número de elementos). Asegúrese de verificar que vector::at( ) lanza una excepción std::out_of_range si el índice facilitado está fuera de rango.
2. Supóngase que le piden desarrollar un clase llamada Rational que da soporte a números racionales (fracciones). La fracción en un objecto Rational debería siempre almacenarse en los términos más bajos, y un denominador de cero es un error. Aquí está una interfaz de ejemplo para esa clase Rational:
//: C02:Rational.h {-xo} #ifndef RATIONAL_H #define RATIONAL_H #include <iosfwd> class Rational { public: Rational(int numerator = 0, int denominator = 1); Rational operator-() const; friend Rational operator+(const Rational&, const Rational&); friend Rational operator-(const Rational&, const Rational&); friend Rational operator*(const Rational&, const Rational&); friend Rational operator/(const Rational&, const Rational&); friend std::ostream& operator<<(std::ostream&, const Rational&); friend std::istream& operator>>(std::istream&, Rational&); Rational& operator+=(const Rational&); Rational& operator-=(const Rational&); Rational& operator*=(const Rational&); Rational& operator/=(const Rational&); friend bool operator<(const Rational&, const Rational&); friend bool operator>(const Rational&, const Rational&); friend bool operator<=(const Rational&, const Rational&); friend bool operator>=(const Rational&, const Rational&); friend bool operator==(const Rational&, const Rational&); friend bool operator!=(const Rational&, const Rational&); }; #endif // RATIONAL_H ///:~
Listado 3.17. C02/Rational.h
Escriba una especificación completa para esta clase, incluyendo especificaciones de precondiciones, postcondiciones, y de excepción.
3. Escriba un prueba usando el framework TestSuite que pruebe rigurosamente todas las especificaciones del ejercicio anterior, incluyendo probar las excepciones.
4. Implemente la clase Rational de modo que pase todas las pruebas del ejercicio anterior. Use aserciones sólo para las invariantes.
5. El fichero BuggedSearch.cpp de abajo contiene un función de búsqueda binaria que busca para el rango [pedir, final). Hay algunos errores en el algoritmo. Use las técnicas de seguimiento de este capítulo para depurar la función de búsqueda.