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

Tarea #1 [solución]

Calculadora de Polinomios

TYPE
  TPoly = OBJECT
  PRIVATE
    _grad : WORD; { numerador   }
    _coef : ARRAY[0..Max_Grado] OF REAL;

    PROCEDURE Add       (VAR o: TPoly);
    PROCEDURE Substract (VAR o: TPoly);
    PROCEDURE Multiply  (VAR o: TPoly);
    PROCEDURE Divide    (VAR o: TPoly);
  END; { TPoly }
Figura 1: poly.pas

      Con alguna frecuencia es necesario hacer aritmética con polinomios, para lo que conviene contar con una clase polinomio. En 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

      Como referencia, use la implementación C++ de la clase de números racionales que se encuentre empacada en este archivo:
      http://www.di-mare.com/adolfo/p/src/rational.zip

      Una descripción de la implementación de números racionales en Pascal está 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

      En la Figura 1 aparece el encabezado del objeto TPoly, que sirve para hacer aritmética con polinomios. Todo el código fuente se encuentra en un archivo empacado .zip en este sitio Internet:
      http://www.di-mare.com/adolfo/p/src/poly.zip
      http://www.di-mare.com/adolfo/p/src/poly.pas

:: PAS-C.bat ==> Convierte código Pascal a C [SUPER-BURDO]
:: USA el programa GSAR.exe para remplazar hileras:
:: ftp://ftp.simtel.net/pub/simtelnet/msdos/txtutl/gsar110.zip

gsar -o     "-s{"        "-r/*"               %1
gsar -o     "-s}"        "-r*/"               %1
gsar -o     "-sBEGIN"    "-r{"                %1
gsar -o     "-sEND"      "-r}"                %1
gsar -o     "-s};        "-r}"                %1
gsar -o     "-sTYPE"     "-rclass"            %1
gsar -o     "-sOBJECT"   "-rclass"            %1
gsar -o     "-sWHILE"    "-rwhile ("          %1
gsar -o     "-sIF "      "-rif ("             %1
gsar -o     "-s THEN"    "-r)"                %1
gsar -o     "-sELSE"     "-relse"             %1
gsar -o     "-sNIL"      "-rNULL"             %1
gsar -o     "-sINTEGER"  "-rint"              %1
gsar -o     "-sWORD"     "-runsigned"         %1
gsar -o     "-sPOINTER"  "-rvoid"             %1
gsar -o     "-s="        "-r=="               %1
gsar -o     "-s::=="     "-r="                %1
gsar -o     "-sREPEAT"   "-rdo {"             %1
gsar -o     "-sUNTIL "   "-r} while NOT ("    %1
gsar -o     "-sCASE"     "-rswitch ("         %1
gsar -o     "-s OF"      "-r) {"              %1
gsar -o     "-sFOR"      "-rfor ("            %1
gsar -o     "-s DO"      "-r ;.;.)"           %1
gsar -o     "-s^."       "-r->"               %1
gsar -o     "-s<>"       "-r!="               %1
gsar -o     "-sEXIT"     "-rreturn"           %1
gsar -o     "-s AND"     "-r &&"              %1
gsar -o     "-s OR"      "-r ||"              %1
gsar -o     "-sAND"     "-r&& "               %1
gsar -o     "-sOR"      "-r|| "               %1

:: PAS-C.bat ==> Fin de archivo
Figura 2: PAS-C.bat

      Si lo desea, puede usar los fuentes Turbo Pascal para obtener su implementación C++. Una forma de lograrlo rápidamente es obtener el programa GSAR.exe de Internet. Este programa sirve para sustituir una hilera por otra en archivos. A diferencia de otros programas que realizan esta misma tarea, GSAR.exe puede trabajar con archivos que no contienen exclusivamente texto.

/* p2-ta-1.cpp  (c) 2000 adolfo@di-mare.com */

#include <iostream>  // cin+cout
#include <iomanip>   // setw()
#include <climits>   // INT_MAX
#include "poly.h"    // Polinomios

int main(void) {
/*  resultado
    <><><><><><><><> Qué hace el programa... */
/*  programador <><><><><><><><>
    Ponga aquí su nombre y carnet
    <><><><><><><><> */

    poly r,        // <><><><><><><><>
         acum;     // <><><><><><><><>
    char op;       // <><><><><><><><>

    // <><><><><><><><>
    acum = 0;

    // <><><><><><><><>
    cout << acum << " > ";
    cin  >> op;


    // <><><><><><><><>
    while (op != '.') {
        // <><><><><><><><>
        cin >> r;             // <><><><><><><><>

        // <><><><><><><><>
        switch (op) {
            case '+': acum += r;          break;
            case '-': acum  = acum - r;   break;
            case '*': acum *= r;          break;
            case '/': acum  = acum / r;   break;
        default:
            // <><><><><><><><>
            cout << "\n(" << op << ")==> Operación inválida\n";
        }

        // <><><><><><><><>
        cout << acum << " > ";
        cin >> op;
        cin.ignore(INT_MAX, '\n');
    }

    // <><><><><><><><>
    return 0;
}  // main()

/* EOF: p2-ta-1.cpp */
Figura 3: Calculadora de polinomios

      Después de obtener y depurar su clase polinomio, úsela para implementar una burda calculadora de polinomios. Para eso, puede usar una implementación similar a la de la Figura 3.

      Luego de imprimir la documentación de su programa, y entregarla en clase, envíe su trabajo al asistente del curso por correo electrónico. Para esto, haga un archivo empacado .zip cuyo nombre sea su número de carnet. Incluya en ese archivo lo siguiente:

  1. Un documento en formato HTML que describa el trabajo que realizó. Incluya el nombre del compilador que usó.
  2. La especificación de su objeto polinomio.
  3. El código fuente de su programa de prueba.
  4. Los datos de prueba para su programa.

      Las cuentas de computador en la ECCI se asignan de acuerdo al número de carnet. Por ejemplo, si su carnet es el número 95-28-09, para entregar su tarea usted debe crear el archivo 952809.zip para enviarlo por correo electrónico al asistente del curso.

      Luego haga en su cuenta personal un subdirectorio llamado public_html, que es bajo el que se instalan todas sus páginas Internet. Por ejemplo, si su solución está en el archivo HTML llamado "OLP/t3sol952809.htm", entonces usted debe instalar esa página en el archivo
      public_html/OLP/t3sol952809.htm
de su cuenta. Luego, para acceder esa página Internet, debe entrar a este sitio:
      http://anubis.ecci.ucr.ac.cr/~e952809/OLP/t3sol952809.htm

      Como todas las cuentas de estudiante son la letra "e" seguida del número de carnet, para el estudiante de carnet "952809" la cuenta es "e952809". Para indicarle al servidor Internet a cuál cuenta entrar se usa el caracter "~" (Alt-126), seguido del nombre de la cuenta: "~e952809".

      Después de la fecha de entrega del programa, puede usted instalar en su cuenta personal su solución (no instale antes su solución en Internet, pues en ese caso sería usted culpable de facilitar la copia de su trabajo, y en consecuencia se haría acreedor a la sanción respectiva).

[mailto:] Manuel Aguilar

Tiempo de entrega: 10 días
Modalidad: Individual

Soluciones

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