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

Tarea #6 [solución]

istream& operator >> (istream&, poly&)

class istream; class ostream;

class poly {
public:
    enum { MxGrado = 25 };    // máximo grado para un polinomio 
private:
    double   _coef[MxGrado];  // vector de coeficientes
    unsigned _grad;           // grado del polinomio
public:
    poly() : _grad(0) { _coef[0] = 0.0; }     // constructor

    // operadores de entrada-salida
    friend ostream& operator << (ostream&, const poly&);
    friend istream& operator >> (istream&,       poly&);
}; // poly
Figura 1: la clase poly

      Con alguna frecuencia es necesario hacer aritmética con polinomios, para lo que conviene contar con una clase polinomio. En esta tarea su trabajo consiste en escribir una parte de la implementación de la clase poly, definida como se muestra en la Figura 1, para lo que debe implementar los operadores "<<" y ">>", que sirven para grabar y obtener el valor de un polinomio desde un flujo de datos (istream). El siguiente artículo, disponible en Internet, se describe una implementación de la clase poly para el lenguaje Turbo Pascal:

Di Mare, Adolfo
"La Implementación de Poly.pas"; Reporte técnico ECCI-94-04; Proyecto 326-89-019; 1994.

      http://www.di-mare.com/adolfo/p/poly.htm
      http://www.di-mare.com/adolfo/p/src/poly.zip

#include <iostream>

ostream& operator << (ostream& OS, const poly& p) {
/*  resultado
    Graba el valor de "p" en el flujo de texto "OS", poniendo el 
    valor del polinomio encerrado entre paréntesis cuadrados "[]":
    - [10.0 x^4 + 6.0 x^3 - 22.0 x^2 - 10.0]
    - El caracter "^" denota el exponente de cada término.
    - Los términos del polinomio se graban del mayor al menor, 
      omitiendo aquellos que tienen coeficiente cero.
    - Los espacios en blanco están para facilitar la lectura del 
      valor.
    - Este es el operador que se invoca cuando se usa, por 
      ejemplo, este tipo de instrucción:
          cout << p << q;
*/
    // ... ESCRIBA AQUÍ SU IMPLEMENTACIÓN ...
    return OS;
} // operator <<

istream& operator >> (istream& IS, poly& p) {
/*  resultado
    Lee del flujo de texto "IS" el valor de "p". */
/*  requiere
    El valor debe haber sido escrito usando el formato "[]", 
    aunque es permisible usar alguno blancos.
    - Si el flujo "IS" contiene:
         [ 3.0 x^ 3 + 22x^2+10x^4 + 3 x^ 3 -4 - 5 - x^ 0 ]
      el valor leído es:
         [10.0 x^4 + 6.0 x^3 - 22.0 x^2 - 10.0]
    - Si hay varios términos que tienen el mismo grado, al leerlos 
      se suman todos para obtener el coeficiente que corresponde a 
      ese grado.
    - Se termina de leer el valor al encontrar el delimitador "]".
*/
    // ... ESCRIBA AQUÍ SU IMPLEMENTACIÓN ...
    return IS;
} // operator >>
Figura 2: operator <<     operator >>

      Para facilitar su trabajo, implemente primero el operador de salida de datos, el que debe tomar el vector de coeficiente del polinomio y desplegarlo en el siguiente formato:
      [10.0 x^4 + 6.0 x^3 - 22.0 x^2 - 10.0]

      El caracter "^" denota el exponente de cada término, y los términos del polinomio se graban del mayor al menor, omitiendo aquellos que tienen coeficiente cero. Los espacios en blanco están para facilitar la lectura del valor. Además, el valor del polinomio aparece encerrado entre paréntesis cuadrados "[]". Si hay varios términos que tienen el mismo grado, al leerlos se suman todos para obtener el coeficiente que corresponde a ese grado. En la Figura 2 está la especificación de los dos operadores que usted debe implementar.

      Si lo desea, puede usar como modelo la implementación de los operadores "<<" y ">>" para números racionales, que aparece en la clase "racional" descrita en este artículo:

Di Mare, Adolfo
"La Implementación de Rational.pas"; Reporte técnico ECCI-94-03; Proyecto 326-89-019; 1994.

      http://www.di-mare.com/adolfo/p/rational.htm
      http://www.di-mare.com/adolfo/p/src/rational.zip

      Cuando hay terminado la implementación de los dos operadores especificados en la Figura 2, envíe por correo electrónico a los asistentes del curso el archivo poly.cpp resultante. Además, también incluya un programa de prueba y el resultado de ejecutarlo.

Envío de tareas por correo electrónico

[mailto:]Andrés Arias y Tomás Rodríguez
Tiempo de entrega: 10 Días
Modalidad: En parejas

Soluciones

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