Calculadora a pilas ed final PDF

Title Calculadora a pilas ed final
Author David Santana Palacios
Course Estructura de datos
Institution Universidad César Vallejo
Pages 26
File Size 763.2 KB
File Type PDF
Total Downloads 77
Total Views 142

Summary

proyecto estructura de datos...


Description

Calculadora A Pilas ED Final Algoritmo y estructura de datos (Universidad Nacional Mayor de San Marcos)

StuDocu no está patrocinado ni avalado por ningún colegio o universidad. Descargado por David Santana Palacios ([email protected])

“Año del Buen Servicio al Ciudadano”

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Perú, DECANA DE AMÉRICA)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

Proyecto de Estructura de Datos: Calculadora Aritmética Usando Pilas PROFESOR LUZMILA

INTEGRANTES LOPEZ TORRES DIEGO LLALLIHUAMAN CALDERÓN MIGUEL JARA COAVOY ALEXANDRA CUSQUISIBÁN RETUERTO XAVIER FIGUEREDO GIRAO GIANCARLO 3 de diciembre del 2017

Descargado por David Santana Palacios ([email protected])

INDICE INTRODUCCIÓN ............................................................................................................... 2 JUSTIFICACIÓN ............................................................................................................... 3 REFERENCIA BIBLIOGRÁFICA ..................................................................................... 5 DESARROLLO DEL CÓDIGO ......................................................................................... 8 RESULTADOS ................................................................................................................ 23 CONCLUSIONES ............................................................................................................ 24

1 Descargado por David Santana Palacios ([email protected])

INTRODUCCIÓN En ciencias de la computación, una estructura de datos es una forma particular de organizar datos en una computadora para que pueda ser utilizado de manera eficiente. Diferentes tipos de estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunos son altamente especializados para tareas específicas. Las estructuras de datos son un medio para manejar grandes cantidades de datos de manera eficiente para usos tales como grandes bases de datos y servicios de indización de Internet. Por lo general, las estructuras de datos eficientes son clave para diseñar algoritmos eficientes. Algunos métodos formales de diseño y lenguajes de programación destacan las estructuras de datos, en lugar de los algoritmos, como el factor clave de organización en el diseño de software. Presentamos el siguiente proyecto final asignado al curso con la intención de presentar los conocimientos aprendidos durante el presente, para poder crear una pequeña aplicación usando el concepto de Pilas. Dicho programa implementado en el IDE NetBeans nos muestra el uso de las pilas haciendo uso de una interfaz gráfica para su mejor uso.

2 Descargado por David Santana Palacios ([email protected])

JUSTIFICACIÓN La calculadora a ser implementada debe ser de expresiones aritméticas que evalué suma, resta, multiplicación y división de la forma: 4 + 5 − (8 + 65 − 23) + 90 Al ser un dato compuesto se llegó a la conclusión de que los datos deben ser tratados como datos tipo String. De esta forma los datos pueden ser tratados de la misma manera. Para realizar las siguientes comparaciones. Es necesario componer los números como unidades, decenas, centenas Es necesario comparar si son llaves o signos aritméticos de evaluación Es necesario comparar si son operaciones secundarias (dentro de los paréntesis) o primarias

• • •

Es necesario completar números en caso de punto inicial, signo negativo inicial o luego de la apertura de un paréntesis. •

Es necesario verificar que no exista espacios vacíos entre los números y/o operaciones.

Para realizar las operaciones lo primero que se hizo fue relacionar los números para su tratamiento como datos tipo float. La segunda etapa se da en la resolución de las operaciones dentro de los paréntesis La tercera etapa fue insertar en una pila los resultados de las operaciones realizadas dentro de los paréntesis Finalmente se realiza las operaciones ya sin paréntesis en la lista. Ingreso de datos: 34 + (5 + 9) − 99 Se convierte en cadena el dato, verificando la presencia de datos vacíos, 0 y puntos iniciales: 3

4

+

(5

+

9

)

-

9

9

Luego se concatena los datos y se los agrega a la lista: 34

+

(5

+

9

)

-

99

Se almacena en una pila las operaciones dentro del paréntesis: 5 + 9

3 Descargado por David Santana Palacios ([email protected])

En una variable se almacena el resultado de la operación dentro la pila: 14

Se agrega este resultado a la lista: 34

+

14

-

99

-

99

Si no existe más paréntesis se hace la operación final: 34

+

14

Resultado: 147 Las operaciones admitidas son suma resta multiplicación y división. Para la Interfaz gráfica se capturo el dato jtextField introducido por la ventana de la interfaz posteriormente este dato es convertido en cadena. La cadena, luego de ser oprimido el botón “=” es enviada a la lista y esta realiza la operación previamente validada mediante el método valida existente en la clase lista.

4 Descargado por David Santana Palacios ([email protected])

REFERENCIA BIBLIOGRÁFICA DEFINICION DE PILAS: Una pila es una estructura de datos de acceso restrictivo a sus elementos. Se puede entender como una pila de libros que se amontonan de abajo hacia arriba. En principio no hay libros; después ponemos uno, y otro encima de éste, y así sucesivamente. Posteriormente los solemos retirar empezando desde la cima de la pila de libros, es decir, desde el último que pusimos, y terminaríamos por retirar el primero que pusimos, posiblemente ya cubierto de polvo. Es una estructura de tipo LIFO (Last In First Out), es decir, último en entrar, primero en salir. OTRA DEFINICION: Una pila es una lista en que tanto las inserciones como las supresiones se hacen por el mismo extremo, que se conoce como el tope de la pila. DEFINICION DE COLAS: Una cola es una estructura de datos de acceso restrictivo a sus elementos. Un ejemplo sencillo es la cola del cine o del autobús, el primero que llegue será el primero en entrar, y afortunadamente en un sistema informático no se cuela nadie salvo que el programador lo diga. Es una estructura de tipo FIFO (First In First Out), es decir: primero en entrar, primero en salir. FUNCIONES Y USOS DE LAS PILAS Y COLAS FUNCIONES Y USOS DE LAS PILAS: A. Se emplea en compiladores y editores de texto dirigidos por la sintaxis. a. Permiten comprobar fácil y eficientemente que los símbolos cuyo uso solo tiene sentido por parejas (llaves, paréntesis, etc.) estén adecuadamente balanceados. B. También se emplea para la evaluación de expresiones.

5 Descargado por David Santana Palacios ([email protected])

a. Las expresiones escritas en notación convencional (infija, 7 * 2 + 8) pueden convertirse en notación postfija (7 2 * 8 +) mediante una pila. b. Las expresiones escritas en notación postfija pueden calcularse mediante una pila. c. Una función muy importante de las pilas es la implementación en el código compilado de las llamadas a función realizadas en el código fuente. d. También se emplean para transformar un algoritmo recursivo en otro iterativo equivalente. FUNCIONES Y USOS DE LAS COLAS: A. Se emplea en las operaciones sobre las estructuras de datos de otros TADs por ejemplo: a. Recorrido “por niveles” del nodo de un árbol. b. Recorrido “primero en anchura” de los nodos de un grafo. c. Obtención “de un orden topológico” de los nodos de un grafo acíclico. B. Algunos servicios de un sistema operativo también se basan en el TAD cola, por ejemplo: a. Servicio de Impresión: Los documentos enviados a una impresora se sitúan en una “cola de impresión” hasta que pueden ser impresos. Las peticiones de impresión se gestionan casi como una cola (orden de llegada, salvo cancelaciones). b. Planificador: Diferentes estrategias de planificación de procesos (round robín, prioridades, etc.) emplean colas para los procesos que se van a ejecutar y determinar en qué orden. c. También se emplean en algoritmos de simulación para problemas de teorías de colas. IMPORTANCIAS DE LAS PILAS Y DE LAS COLAS: IMPORTANCIA DE LAS PILAS: En los programas estas estructuras suelen ser fundamentales. La recursividad se simula en un computador con la ayuda de una pila. Asimismo, muchos algoritmos emplean las pilas como estructura de datos fundamental, por ejemplo, para mantener una lista de tareas pendientes que se van acumulando.

6 Descargado por David Santana Palacios ([email protected])

Las pilas ofrecen dos operaciones fundamentales, que son apilar y desapilar sobre la cima. El uso que se les dé a las pilas es independiente de su implementación interna. Es decir, se hace un encapsulamiento. Por eso se considera a la pila como un tipo abstracto de datos. IMPORTANCIA DE LAS COLAS: Las colas serán de ayuda fundamental para ciertos recorridos de árboles y grafos. Las colas ofrecen dos operaciones fundamentales, que son encolar (al final de la cola) y desencolar (del comienzo de la cola). Al igual que con las pilas, la implementación de las colas suele encapsularse, es decir, basta con conocer las operaciones de manipulación de la cola para poder usarla, olvidando su implementación interna.

7 Descargado por David Santana Palacios ([email protected])

DESARROLLO DEL CÓDIGO Clase Leer: package calculadorapilas; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * * @author Diego */ public class Leer { public String datoStr() { String sdato = ""; try { BufferedReader bf; bf=new BufferedReader(new InputStreamReader(System.in)); sdato=bf.readLine(); } catch(IOException e) { System.err.println("Error:" + e.getMessage()); } return sdato; } public int datoInt() { int idato=0; try { BufferedReader bf; bf=new BufferedReader(new InputStreamReader(System.in)); idato=Integer.parseInt(bf.readLine()); } catch(IOException e) { System.err.println("Error:" + e.getMessage()); } return idato; } public float datoFloat() { float fdato=0; try { BufferedReader bf; bf=new BufferedReader(new InputStreamReader(System.in)); fdato=Long.parseLong(bf.readLine()); } catch(IOException e) { System.err.println("Error:" + e.getMessage()); }

8 Descargado por David Santana Palacios ([email protected])

return fdato; } } /* Clase Igraf package calculadorapilas; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTextField; import javax.swing.SwingConstants; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; /** * * @author Diego */ public class lgraf { private JFrame frame; private JTextField resultado; private JTextField operacion; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { lgraf window = new lgraf(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public lgraf() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() {

9 Descargado por David Santana Palacios ([email protected])

frame = new JFrame(); frame.setBounds(100, 100, 384, 302); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); frame.setTitle("Calculadora a Pilas"); JButton btn7 = new JButton("7"); btn7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"7"); } }); btn7.setBounds(23, 98, 52, 23); frame.getContentPane().add(btn7); JButton btn8 = new JButton("8"); btn8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"8"); } }); btn8.setBounds(85, 98, 52, 23); frame.getContentPane().add(btn8); JButton btn9 = new JButton("9"); btn9.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"9"); } }); btn9.setBounds(153, 98, 52, 23); frame.getContentPane().add(btn9); JButton btn4 = new JButton("4"); btn4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { operacion.setText(operacion.getText()+"4"); } }); btn4.setBounds(23, 132, 52, 23); frame.getContentPane().add(btn4); JButton btn5 = new JButton("5"); btn5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"5"); } }); btn5.setBounds(85, 132, 52, 23); frame.getContentPane().add(btn5); JButton btn6 = new JButton("6"); btn6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

10 Descargado por David Santana Palacios ([email protected])

operacion.setText(operacion.getText()+"6"); } }); btn6.setBounds(153, 132, 52, 23); frame.getContentPane().add(btn6); JButton btn1 = new JButton("1"); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"1"); } }); btn1.setBounds(23, 166, 52, 23); frame.getContentPane().add(btn1); JButton btn2 = new JButton("2"); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"2"); } }); btn2.setBounds(85, 166, 52, 23); frame.getContentPane().add(btn2); JButton btn3 = new JButton("3"); btn3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"3"); } }); btn3.setBounds(153, 166, 52, 23); frame.getContentPane().add(btn3); JButton btn0 = new JButton("0"); btn0.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"0"); } }); btn0.setBounds(23, 200, 52, 23); frame.getContentPane().add(btn0); JButton btnPunto = new JButton("."); btnPunto.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"."); } }); btnPunto.setBounds(85, 200, 52, 23); frame.getContentPane().add(btnPunto); JButton btnDiv = new JButton("/"); btnDiv.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

11 Descargado por David Santana Palacios ([email protected])

operacion.setText(operacion.getText()+"/"); } }); btnDiv.setBounds(290, 166, 45, 23); frame.getContentPane().add(btnDiv); JButton btnRetro = new JButton("C"); btnRetro.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String cadena; cadena=operacion.getText(); if (cadena.length()>0) { cadena=cadena.substring(0, cadena.length()-1); operacion.setText(cadena); } } }); btnRetro.setBounds(290, 98, 45, 23); frame.getContentPane().add(btnRetro); JButton btnMult = new JButton("*"); btnMult.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"*"); } }); btnMult.setBounds(290, 132, 45, 23); frame.getContentPane().add(btnMult); JButton btnReset = new JButton("CE"); btnReset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(""); resultado.setText(""); } }); btnReset.setBounds(153, 200, 55, 23); frame.getContentPane().add(btnReset); JButton btnResta = new JButton("-"); btnResta.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"-"); } }); btnResta.setBounds(215, 166, 65, 23); frame.getContentPane().add(btnResta); JButton btnResul = new JButton("="); btnResul.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String ope = operacion.getText(); listaSimNor exArit=new listaSimNor();

12 Descargado por David Santana Palacios ([email protected])

String preparado=exArit.preparaCadena(ope); exArit.llenaLista(preparado); boolean a=exArit.valida();

if (a==true){ exArit.resolver(a); String resu=exArit.resolver(a); resultado.setText(resultado.getText()+resu); } else{ resultado.setText(resultado.getText()+"Operacion no Válida"); } } }); btnResul.setBounds(290, 200, 45, 23); frame.getContentPane().add(btnResul); JButton btnSuma = new JButton("+"); btnSuma.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"+"); } }); btnSuma.setBounds(215, 200, 65, 23); frame.getContentPane().add(btnSuma); resultado = new JTextField(); resultado.setBounds(23, 41, 312, 30); frame.getContentPane().add(resultado); resultado.setColumns(10); operacion = new JTextField(); operacion.setHorizontalAlignment(SwingConstants.RIGHT); operacion.setBounds(23, 10, 312, 30); frame.getContentPane().add(operacion); operacion.setColumns(10); JButton btnPIzq = new JButton("("); btnPIzq.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+"("); } }); btnPIzq.setBounds(215, 98, 67, 23); frame.getContentPane().add(btnPIzq); JButton btnPDer = new JButton(")"); btnPDer.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { operacion.setText(operacion.getText()+")");

13 Descargado por David Santana Palacios ([email protected])

} }); btnPDer.setBounds(215, 132, 65, 23); frame.getContentPane().add(btnPDer); JButton btnsebas = new JButton("*10"); btnsebas.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { operacion.setText(operacion.getText()+"10"); } }); btnsebas.setBounds(144, 234, 89, 23); frame.getContentPane().add(btnsebas); } } Clase listaSimNor package calculadorapilas; /** * * @author Diego */ public class listaSimNor extends pilaExpre { private nodoExpN p; public listaSimNor() { // TODO Auto-generated constructor stub p=null; } public boolean esVacia(){ boolean x=p==null ? true: false; return x; } public nodoExpN getp(){ return p; }

public void adiprimero (String it) { nodoExpN x = new nodoExpN(); x.setNum(it); x.setSig(getp()); p= x; }

public nodoExpN posicion(int pos) { int i;

14 Descargado por David Santana Palacios ([email protected])

nodoExpN q= getp(); for(i=1;i...


Similar Free PDFs