Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UNIVERSIDAD NACIONAL
MAYOR DE SAN MARCOS
(Universidad del Perú, DECANA DE AMÉRICA)
FACULTAD DE INGENIERÍA DE
SISTEMAS E INFORMÁTICA
PROFESOR
LUZMILA
INTEGRANTES
LOPEZ TORRES DIEGO
LLALLIHUAMAN CALDERÓN MIGUEL
JARA COAVOY ALEXANDRA
CUSQUISIBÁN RETUERTO XAVIER
FIGUEREDO GIRAO GIANCARLO
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
INDICE
INTRODUCCIÓN ...............................................................................................................2
JUSTIFICACIÓN ...............................................................................................................3
REFERENCIA BIBLIOGRÁFICA .....................................................................................5
DESARROLLO DEL CÓDIGO .........................................................................................8
RESULTADOS ................................................................................................................ 23
CONCLUSIONES............................................................................................................ 24
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
INTRODUCCIÓN
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.
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.
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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 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
34 + (5 + 9 ) - 99
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
14
34 + 14 - 99
34 + 14 - 99
Resultado: 147
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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.
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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.
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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.
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.
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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());
}
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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() {
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
10
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
operacion.setText(operacion.getText()+"6");
}
});
btn6.setBounds(153, 132, 52, 23);
frame.getContentPane().add(btn6);
11
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
operacion.setText(operacion.getText()+"/");
}
});
btnDiv.setBounds(290, 166, 45, 23);
frame.getContentPane().add(btnDiv);
if (cadena.length()>0) {
cadena=cadena.substring(0, cadena.length()-1);
operacion.setText(cadena);
}
}
});
btnRetro.setBounds(290, 98, 45, 23);
frame.getContentPane().add(btnRetro);
12
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
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);
13
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
}
});
btnPDer.setBounds(215, 132, 65, 23);
frame.getContentPane().add(btnPDer);
Clase listaSimNor
package calculadorapilas;
/**
*
* @author Diego
*/
public class listaSimNor extends pilaExpre {
private nodoExpN p;
public listaSimNor() {
// TODO Auto-generated constructor stub
p=null;
}
14
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
nodoExpN q= getp();
for(i=1;i<=pos-2;i++)
{ q= q.getSig();}
return(q);
}
for(int i=0;i<ExpreAr.length()-1;i++)
{
a=ExpreAr.charAt(i);
b=ExpreAr.charAt(i+1);
15
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
if((a=='('&&b=='-'))
{
//System.out.println("en x "+x);
x+=a;
x+='0';
}
else
{
if(a=='-'&&i==0){
x+='0';
}
x+=a;
}
}
x+=b;
//System.out.println(x);
return x;
}
boolean valida(){
nodoExpN q=getp();
int tamaño=contar();
String it;
boolean sw=true;
for(int i=1;i<=tamaño;i++)
{
it=q.getNum();
System.out.print(it);
String it2=enviaKaesimo(i+1);
if(esSigno(it)&&esSigno(it2))
{
System.out.println("operación no valida");
sw=false;
}
if(it.equals("(")&&it2.equals("(")){
System.out.println("operación no valida");
sw=false;
}
if(esSigno(it)&&i==tamaño){
System.out.println("operación no valida");
sw=false;
}
if(!it.equals("(")&&!it.equals(")")&&!esSigno(it)){
if(puntosDob(it)==false){
sw=false;
System.out.println("operacion no
valida");
}
}
if(tamaño==1)
sw=false;
q=q.getSig();
}
16
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
return sw;
}
boolean puntosDob(String it){
char a=' ';
int cont=0;
boolean aux=true;
for(int i=0;i<it.length()-1;i++){
a=it.charAt(i);
if(a=='.'){
cont++;
}
}
if(cont>1)
aux=false;
return aux;
}
boolean esNumero(String x)//compara si es numero
{
boolean k=false;
if(x.equals("0")||x.equals("1")||x.equals("2")||x.equals("3")||x
.equals("4")||x.equals("5")||x.equals("6")||x.equals("7")||x.equals("8
")||x.equals("9")||x.equals(".")){
k=true;
}
return k;
}
expreAr=expreAr+" ";
for(int i=0;i<expreAr.length()-1;i++)
{
x=expreAr.substring(i+1, i+2);
//recupera los datos siguientes de la cadena
if(esNumero(x)&&(esNumero(expreAr.substring(i,
i+1)))) //si es numero se concatena
insert+=expreAr.substring(i,i+1);
else
//si no es numero no se concatena
{
insert+=expreAr.substring(i,i+1);
//System.out.println("en el se "+insert);
adiultimoEA(insert);
//el numero o el simbolo se agrega a la lista
insert="";
//reiniciamos la cadena
}
}
}
17
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
void limpiar(){
p=null;
}
18
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
for(int i=1;i<=tamaño;i++)
{
b=1;
if(esSigno(p.enviaKaesimo(i)))
{
k=p.enviaKaesimo(i+1);
if(p.enviaKaesimo(i).equals("-"))
{
b=-1;
}
a=Float.parseFloat(total.eliminar())+(Float.parseFloat(k)*b);
i=i+1;
}
else
{
a=Float.parseFloat(p.enviaKaesimo(i));
}
total.insertar(Float.toString(a));
q=q.getSig();
}
k=total.eliminar();
return k;
}
String operacionl(listaSimNor l){ //realiza las
operaciones en los parentesis
pilaExpre p=new pilaExpre();
listaSimNor w=new listaSimNor();
String k="";
String s="";
float a;
float b=1;
int tamaño=l.contar();
nodoExpN q=l.getp();
for(int i=1;i<=tamaño;i++)
{
k=l.enviaKaesimo(i);
if(k.equals("*")||k.equals("/"))
{
b=1;
a=Float.parseFloat(p.eliminar());
s=l.enviaKaesimo(i+1);
if(s.equals("-")){
b=-1;
s=l.enviaKaesimo(i+2);
i=i+2;
}
else
{
i++;
}
if(k.equals("*"))
{
a*=(Float.parseFloat(s)*b);
19
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
}
else{
a/=(Float.parseFloat(s)*b);
}
k=Float.toString(a);
}
q=q.getSig();
p.insertar(k);
}
w=aLista(p); //envia la suboperacion () y final
y convierte de pila a lista
s=operacionP(w); //opera si existe una suboperacion
return s;
}
String resolver(boolean a) //separa por operaciones, envi a
operacionl y muestra el resultado
{
String resultado;
String it="";
nodoExpN q=getp();
int tamaño=contar();
pilaExpre pila=new pilaExpre();
pilaExpre pila2=new pilaExpre();
listaSimNor p=new listaSimNor();
p.limpiar();
if(a==true){
for(int i=1;i<=tamaño;i++)
{
it=enviaKaesimo(i);
if(it.equals(")"))
{
p.limpiar();
it=pila.eliminar();
while(!it.equals("("))
{
pila2.insertar(it);
it=pila.eliminar();
}
while(!pila2.esvacia())
{
p.adiultimoEA(pila2.eliminar());
}
it=operacionl(p);
pila.insertar(it);
p.limpiar();
}
else{
pila.insertar(it);
}
q=q.getSig();
}
} //fin de la validacion
while(!pila.esvacia())
{
20
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
pila2.insertar(pila.eliminar());
}
while(!pila2.esvacia())
{
p.adiultimoEA(pila2.eliminar());
}
//System.out.println(operacionl(p));
resultado=operacionl(p);
return resultado;
}
Clase nodoExpN
package calculadorapilas;
/**
*
* @author Diego
*/
public class nodoExpN {
String num;
nodoExpN sig;
public nodoExpN() {
// TODO Auto-generated constructor stub
sig=null;
}
public String getNum() {
return num;
}
public void setNum(String it) {
num = it;
}
public nodoExpN getSig() {
return sig;
}
public void setSig(nodoExpN it) {
sig = it;
}
}
Clase pilaExpre
package calculadorapilas;
/**
* @author Diego
*/
public class pilaExpre {
private int n, cima;
private String [] datos;
public pilaExpre() {
// TODO Auto-generated constructor stub
21
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
n=100;
cima=-1;
datos=new String[n];
}
public boolean esvacia(){
boolean x= cima==-1 ?true:false;
return x;
}
public boolean esllena(){
boolean x= cima==n-1 ?true:false;
return x;
}
public void insertar(String x){
if(esllena()){
System.out.println("pila llena");
}
else {
cima++;
datos [cima]=x;
//System.out.println("dato entrante "+datos);
}
}
public String eliminar() {
String x="";
if(esvacia()){
//System.out.println("pila vacia");
}
else{
x=datos[cima];
cima--;
}
return x;
}
public void vaciar(pilaExpre x){
while(!x.esvacia()){
insertar(x.eliminar());
}
}
22
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
RESULTADOS
23
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)
lOMoARcPSD|4159588
lOMoARcPSD|16672918
CONCLUSIONES
• Nos pudimos dar cuenta que esta estructura puede ser aplicada en multitud de
ocasiones en el área de informática debido a su simplicidad y ordenación de la
propia estructura
24
Descargado
Downloaded por David
by JOSE SantanaDE
YARANGA Palacios
LA CRUZ(takalssa@hotmail.com)
(joseestig8@gmail.com)