un programa en c++ que simula la calculadora hp 48g

Upload: victor-fredy

Post on 29-Oct-2015

44 views

Category:

Documents


0 download

TRANSCRIPT

  • Disponible en: http://www.redalyc.org/articulo.oa?id=81680112

    Red de Revistas Cientficas de Amrica Latina, el Caribe, Espaa y PortugalSistema de Informacin Cientfica

    Paul Lorena Lazo, Edgar Ruiz LizamaUn programa en C++ que simula la calculadora HP 48GIndustrial Data, vol. 8, nm. 1, enero, 2005, pp. 66-74,

    Universidad Nacional Mayor de San MarcosPer

    Cmo citar? Fascculo completo Ms informacin del artculo Pgina de la revista

    Industrial Data,ISSN (Versin impresa): [email protected] Nacional Mayor de San MarcosPer

    www.redalyc.orgProyecto acadmico sin fines de lucro, desarrollado bajo la iniciativa de acceso abierto

  • 66

    SISTEMAS E INFORMTICA

    UN PROGRAMA EN C++ QUE SIMULA LA CALCULADORAHP 48G

    (1) Paul Lorena Lazo(2) Edgar Ruiz Lizama

    I N T R O D U C C I N

    Las calculadoras HP y CASIO (usadas mayormente en nuestro medio)trabajan de modo diferente. Las calculadoras CASIO evalan expresionesen notacin INFIJA, por ejemplo si queremos sumar a y b, para obtener unresultado c; ingresamos: a + b; con lo cual obtenemos c. Por el contrariolas calculadoras HP evalan en notacin POSFIJA; es decir para sumar ay b ingresamos: a b +; para luego obtener c como resultado. Como seobserva en esta ltima forma de evaluar los operandos se leen primero yel operador va al final; de all el nombre de evaluacin en notacin Posfija.Existe una tercera forma de evaluar expresiones que es la PREFIJA; aspara sumar a y b se tiene: + a b; es decir primero va el operador y luegolos operandos.

    Las calculadoras HP son muy tiles para realizar clculos en ciencias eingeniera por su alta precisin y porque poseen funciones o rutinas deBiblioteca y hasta su propio lenguaje de programacin, permitiendo tam-bin el trazado de grficas de las funciones.

    Como una inquietud de los autores del artculo surgi la pregunta Cmoes que trabaja una HP?. Para responder a esta pregunta se escribi elprograma cuyo contenido se presenta en su totalidad. El programa utilizaconceptos de Estructuras de Datos y Algoritmos, como son: las listasenlazadas, y los algoritmos de Pila, muy tiles para evaluar enRPN(Reverse Polish Norm). Adicionalmente se hace uso del paradigmaorientado a objetos para simplificar la solucin.

    Por tanto, decidimos crear un programa que haga lo que hace la HP, esees el aporte a la comunidad informtica. A partir de aqu puede irse acosas ms avanzadas.

    MARCO CONCEPTUAL

    Con el aumento de la demanda de nuevo software, gracias al gran avancetecnolgico de los ltimos 20 aos, los programas de computadora tien-den a ser ms complejos y a manejar mayor volumen de informacin. Selleg al punto en el que los programas que trabajan bajo el concepto de laprogramacin estructurada (C, Pascal, etc.) no podan manejareficientemente estos datos, muchos nuevos programas no podan crearsepor las limitaciones propias de la programacin estructurada.

    La Programacin Orientada al Objeto POO; se concibi para resolver losproblemas que la programacin estructurada no puede resolver. El C++es un lenguaje de programacin orientado a objetos... [1 y 5], si se en-

    Revista de la Facultad de Ingeniera IndustrialVol. (8) 1: pp. 66-74 (2005) UNMSMISSN: 1560-9146 (impreso) / ISSN: 1810-9993 (electrnico)

    (1) Ingeniero Industrial. Miembro del Centro de

    Investigacin y Desarrollo de Software, CIDESOFT.E-mail: [email protected]

    (2) Ingeniero Industrial. Profesor del Departamento de

    Ingeniera de Sistemas e Informtica, UNMSM.

    E-mail: [email protected]

    RESUMEN

    El artculo presenta un programa enlenguaje C++ que emula el comportamientode la calculadora HP 48G. Para ello seutiliza los conceptos que provee elparadigma de la programacin orientada aobjetos y los algoritmos de pila para lanotacin polaca. En la implementacin delprograma se ha utilizado el compiladorBorland C++ 4.5.

    Palabras Clave: Calculadora HP. Notacinpolaca RPN. Listas enlazadas.

    A PROGRAM IN C++ THAT SIMULATES THE HP48G CALCULATORABSTRACT

    The article presents a program in C++language that emulates the behavior of a HP48G calculator. For this, we use the conceptsthat the paradigm of the programmingoriented to objects and battery algorithms forthe polish notation provide. In theimplementation of the program a BorlandC++ 4.5 Compiler was used.

    Key words: HP calculator. RPN polishnotation. Linked list.

    R e c e p c i n : F e b r e r o d e 2 0 0 5 / A c e p t a c i n : J u n i o 2 0 0 5

  • 67

    SISTEMAS E INFORMTICA

    Ind. data 8(1), 2005

    tiende que C++ es la evolucin natural del C, se de-duce entonces, que hereda todos los recursos de C.

    La POO se sustenta en el concepto que el progra-mador puede crear un nuevo tipo de variable (class),que a diferencia de struct o union en C, es una enti-dad lgica1 conocida como objeto. Un objeto po-see datos privados y funciones miembros, ademsde poseer un cdigo que los manipula. Dentro delobjeto se manipulan los datos privados que no pue-den ser modificados desde el exterior, por lo que seprotege esta informacin, el nico medio de accesocon el exterior o sea el resto del programa-, sonlas funciones miembro pblicas. Al proceso de ma-nipulacin y gestin de datos se le denominaencapsulamiento.

    La POO tiene tres recursos importantes: 1. Objetos,2. Herencia, y 3. Polimorfismo.

    O b j e t o sSon todos las variables definidas por el usuario, quetienen una parte pblica y otra privada.

    H e r e n c i a

    La herencia es el proceso por el cual un objeto puedeadquirir diferentes propiedades de otro objeto similar.Esto se establece bajo una jerarqua de clases; gra-cias a sta herramienta se puede compartir funcio-nes miembros de un objeto o inclusive datos priva-dos de otro similar. La herencia es el mecanismoque hace posible que un objeto sea un ejemplo espe-cfico dentro de una clase ms general. La herenciapermite la disponibilidad del encapsulamiento [5].

    P o l i m o r f i s m oLos lenguajes de programacin orientados a objetosson compatibles con el concepto de polimorfismo,

    que permite usar funciones con el mismo nombre perocon diferente tipo de argumentos. Gracias a estopodemos lograr la: Sobrecarga de funciones, la So-brecarga de operadores y las Plantillas o Patronesde cdigo.

    Se puede declarar dos funciones con el mismo nom-bre, pero con diferente tipo de argumentos y el pro-grama en tiempo de ejecucin podr depurar y esco-ger la rutina correcta.

    APLICACIN PRCTICA: PROGRAMAH P _ * . C P P

    El objetivo del artculo es implementar los algoritmosy el cdigo para emular una calculadora HP. Se pre-senta el cdigo de los programa Hp_*.cpp, escritosen C++ con el compilador Borland C++ 4.5, de lacompaa Borland que emulan a una calculadoraHP con notacin polaca (Reverse Polish Norm RPN).Se utilizan listas enlazadas bajo el concepto de laPOO, consiguindose una versin simple de la cal-culadora Hewlett Packard 48G.

    Originalmente se bas en el programa pila2.cpp [3],que usa lista secuenciales, pero se opt por el usode lista enlazadas para la implementacin dinmicade la memoria.

    El programa que se presenta a continuacin esHp_here.cpp; en el la pila y la memoria son diferen-tes objetos, que comparten los datos privados(protected) y funciones miembros, aplicando el con-cepto de herencia (ver figura 1).

    A continuacin se muestra el cdigo completo delprograma.

    Figura 1a. Listado del programa hp_here.cpp

    /*programa que simula a la calculadora HP 48 conlistas enlazadas, usa recurso de HERENCIA. hp_plus2 update: 00-03-08/07/08/09/11/12 */#include#include#include#include#include#include#include#include#include#define FALSE 0#define TRUE !FALSE#define ESC '\033'

    struct Nodo {double value;Nodo *sig;char tag[10];

    };//clase baseclass Hp {protected:

    Nodo *primero; //dato pblico que seracompartidopublic:

    Hp(); //constructor~Hp(); //destructorvoid push(double);double pop();void drop();

    Paul Lorena L. y Edgar Ruiz L. >>>

  • 68

    SISTEMAS E INFORMTICA

    else {error(' ');return 0;

    }}void Hp :: drop(){ if(!listaVacia())

    { Nodo *p = primero; primero = p->sig;}else error(' ');

    }void memHp :: store(double op2){ Nodo *p;

    p = new Nodo;p -> value = op2;gotoxy(18,13);cout sig = primero;primero = p;

    }double memHp :: rcl(){ char s[10];

    int encuentra=0; gotoxy(18,13); coutsig;}

    } if (encuentra)

    return p->value; else

    return 0;}void memHp :: del(){ int encuentra = FALSE;

    Nodo *p;Nodo *antP;p = primero;

    void screen();int listaVacia();

    };//clase derivadaclass memHp : public Hp {public:

    void store(double);double rcl();void del();void display();void nextview();

    };double valor(double op1, double op2, char c );double valor(double op2, char c );double concate(char s1[], char s2[], int MAX);void lineas_vert(int fila_1,int fila_2, int col, char car);void lineas_hor(int col_1,int col_2, int filas, char car);double a_numer2(char s[], int m);int is_command(char c);int is_editor(char c);int is_symbol(char c);void casehp();void timer();void error(char c);//constructor, destructor y funciones miembrosHp :: Hp(){

    primero = NULL;}Hp :: ~Hp(){

    Nodo *p;Nodo *temp;p = primero;while (p!=NULL){ temp = p->sig; delete p; p = temp;}

    }void Hp :: push(double carac){

    Nodo *p;p = new Nodo;p -> value = carac;p -> sig = primero;primero = p;

    }double Hp :: pop(){

    if(!listaVacia()){ Nodo *p = primero;

    primero = p->sig;return (p->value);

    }

    Figura 1b. Listado del programa hp_here.cpp

    >>> Un Programa en C++ que simula la Calculadora HP 48G

  • 69

    SISTEMAS E INFORMTICA

    Ind. data 8(1), 2005

    antP = NULL;char s[10];gotoxy(18,13);cout sig;

    } } if (encuentra) { if (antP == NULL)

    { primero = p -> sig; delete p;

    }else {

    antP -> sig = p -> sig; delete p;

    } } else

    error(' '); }

    }// imprime pilavoid Hp :: screen(){ casehp();

    Nodo *p; int acu = 0; p = primero; if (!listaVacia()) { while (p != NULL) { p = p -> sig;

    acu++; } p = primero; int fila = 14; for(int i=1;i=5){ cout.fill(' ');

    cout

  • 70

    SISTEMAS E INFORMTICA

    int k;double op1, op2, op3, x, y;Hp heap;memHp memo;casehp();c = getch();while(c!=ESC){ t[0]=c; if(!is_command(c)) { gotoxy(18,14);

    putchar(c); gets(s); k = strlen(s); x = concate(t,s,k); heap.push(x); heap.screen(); memo.display();

    } else { if(!is_editor(c)) { if(!is_symbol(c)) {

    op2 = heap.pop();op1 = heap.pop();y = valor(op1, op2, c);heap.push(y);heap.screen();memo.display();

    }else{

    if(c!='m'){ op2 = heap.pop();

    y = valor(op2, c);heap.push(y);heap.screen();memo.display();

    }else ///acceso a memo-

    ria..............///{ putchar(c); c=getch(); switch (c){

    case 's': op2 =heap.pop(); // store memory

    memo.store(op2);

    heap.screen();

    memo.display(); break;

    case 'r': op3 =memo.rcl(); // recall memory

    heap.push(op3);

    heap.screen();

    memo.display(); break;

    case 'd':memo.del(); // delete nodo memory

    heap.screen();

    memo.display(); break;

    case 'v': //nextview

    heap.screen();

    memo.display();

    memo.nextview(); break;

    default: error(c);}

    }}

    }else {switch (c) //acceso a menu

    command_edit{ case 'w': { //swap

    op1 = heap.pop();op2 = heap.pop();heap.push(op1);heap.push(op2);heap.screen();memo.display();break;

    }case '\b': { // drop

    op3=heap.pop();heap.screen();memo.display();break;

    }case 'd': { //delete

    w h i l e(!heap.listaVacia())

    { op2 =heap.pop();

    }heap.screen();memo.display();break;

    }case 'e':{ //edit

    Figura 1d. Listado del programa hp_here.cpp

    >>> Un Programa en C++ que simula la Calculadora HP 48G

  • 71

    SISTEMAS E INFORMTICA

    Ind. data 8(1), 2005

    op2 = heap.pop();heap.screen();memo.display();gotoxy(18,14);cout

  • 72

    SISTEMAS E INFORMTICA

    double concate(char s1[], char s2[], int MAX){ int k=MAX, i=0,j=0;

    for(k;k

  • 73

    SISTEMAS E INFORMTICA

    Ind. data 8(1), 2005

    En las figuras 2 y 3 se presenta la ejecucin del pro-grama hp_here.cpp.

    C O N C L U S I O N E S

    Como se mencion el programa emula a la calcula-dora HP48G, por lo tanto se ha tratado de reproducirlas caractersticas ms notorias de sta, establecien-do funciones como:

    a. Comandos de edicin:Swap: Invertir el ltimo dato ingresado con el pe-nltimo de la pila,Drop: Eliminar el ltimo dato de la pila,Del: Eliminar todos los datos de la pila, yUndo: Recuperar el ltimo valor borrado.

    b. Comandos de memoria:Mstore (Memory Store): Almacenar un nmero enpila creando una etiqueta visible.Mrcl(Memory Recall): Devolver el valor almacena-do previamente.Mdel(Memory Delete): Borrar de la memoria unavariable, se hace el reconocimiento por el nombrede la variable (name var).Mview(next): Permitir visualizar los flags de me-moria desplazados a la derecha del display.

    c. Biblioteca de operaciones bsicas:Suma, resta, multiplicacin, divisin, factorizacin,potencia, seno, coseno, tangente (ingresar ngu-los en grados sexagesimales), inversa, cambiode signo(+/-), y clculo de un rea circular.

    d. Entrada / SalidaAqu se ha logrado que la entrada de datos sea loms parecido posible a la calculadora, comenzan-do por la visualizacin de los datos, al estilo H P.El programa es capaz de distinguir si se ha ingre-sado un nmero o un operador ejecutando la ruti-na adecuada en cada caso.Se procura generar todos los mensajes de error,igual que la calculadora, y en la versin DOS esposible or el beep caracterstico.Finalmente se implementa la fecha y el reloj, ascomo las etiquetas de los nombres (flags) de lasvariables guardadas en memoria.

    En el programa se ha reunido la mayora de concep-tos de programacin: iteracin, recursividad, sobre-carga de funciones, tipos abstractos de datos, pro-gramacin estructurada, y programacin orientada aobjetos, clases, objetos, polimorfismo, y herencia.

    Indudablemente desde el punto de vista de un usua-rio final para realizar clculos bastar una calculado-ra simple y si se posee un sistema operativo comoWindows bastar la calculadora incluida en el, o laherramienta Excel proporcionada por la suite Office,de Microsoft. Sin embargo el aporte del artculo radi-ca en que es posible crear un programa propio quetrabaje de la misma manera que lo hacen las calcu-ladoras HP.

    Como todo programa, la versin presentada es sus-ceptible de ser mejorada, aadindole nuevas funcio-nes y/o mejoras como por ejemplo funciones paragraficar expresiones.

    Figura 2. Digitando 45 Figura 3. Digitando s para obtener el sen de 45

    Paul Lorena L. y Edgar Ruiz L. >>>

  • 74

    SISTEMAS E INFORMTICA

    B I B L I O G R A F I A

    1. Deitel, Harvey. M. y Deitel, Paul. J. (2003). C++How to Program. Fourth Edition. Prentice Hall Inc.U.S.A.

    2. Gamma, Erich; Helm, Richard & Others. (1999).Introduction to Oriented Design in C++. 1ra. Ed.Addison Wesley Publishing Company, Inc.U.S.A.

    3. Raffo Lecca E. (1998). Algoritmos y estructuras dedatos con C/C++. Raffo Lecca Editores. Lima, Per.

    4. Ruiz L. E. (2004). Un programa en C++ queimplementa grupos abelianos. En Industrial DataVol. (7)1: pp. 55-60. Lima, Per.

    5. Stroustrup, Bjarne. (2002). El Lenguaje de Progra-macin C++. Edicin especial. Adisson Wesley-Pearson Educacion S.A. Espaa.

    >>> Un Programa en C++ que simula la Calculadora HP 48G