You are on page 1of 3

import java.util.

Scanner;

public class Principal {

static void calculadora(Pila AA)


{
double var,elem,resp;
Pila A=new Pila();
A.vaciar(AA);
Pila aux=new Pila ();
String ope;
elem=Double.parseDouble(A.elimina().toString());

while (!A.es_vacia())
{
ope=A.elimina().toString();
if (ope.equals("*"))
{
var=elem*Double.parseDouble(A.elimina().toString());
A.adiciona(var);
elem=Double.parseDouble(A.elimina().toString());

}
else
{
if (ope.equals("/"))
{
var=elem/Double.parseDouble(A.elimina().toString());
A.adiciona(var);
elem=Double.parseDouble(A.elimina().toString());
}
else
{
aux.adiciona(elem);
aux.adiciona(ope);
elem=Double.parseDouble(A.elimina().toString());
}
}
}

aux.adiciona(elem);
A.vaciar(aux);

resp=Double.parseDouble(A.elimina().toString());
while (!A.es_vacia())
{
ope=A.elimina().toString();
if (ope.equals("+"))
{
var=resp+(Double.parseDouble(A.elimina().toString()));
}
else
{
var=resp-Double.parseDouble(A.elimina().toString());
}
A.adiciona(var);
resp=Double.parseDouble(A.elimina().toString());
}

System.out.print(" ="+resp);
}

public static void main(String[] args)


{

//Problema implementar una calculadora basica con pilas....


//Analisis y validaciones del problema:
//1. una calculadora basica tiene las cuatro operaciones fundamentales suma,resta, multiplicacion y division
//2. las operaciones que realiza tienen prioridad de acuerdo al operando es decir primero se opera el producto o la
//division se debe tomar en cuenta jeraquia de operadores
//3. En el problema se hace unos vaciados en pilas auxiliares podra no tener sentido pero si lo tiene ejemplo:
//la siguiente operacion 4 + 7 - 3 si la realizamos tipicamente de izq a der la respuesta es "8" pero si la hacemos de
//der a izq la respuesta es "0" debido a que en una pila se toma lo de arriva primero osea el 3 luego el menos daria "0"
//por eso se hace el uso de otras pilas para corregir eso.
//4. como es una pila de cadenas no uso el .hasCode() ya que este te devuelve un numero en funcion de lo que manejes
//ejemplo si yo tengo una pila de enteros si saco el 49 como tipo Object uso .hasCode() me devolvera 49 no habria problema
//pero como uso cadenas me devolvera otro valor...por lo que no se usa el .hasCode()
//5. En el programa se lee cuantos numeros se quiere operar por ejemplo 3 por lo que si son tres numeros los operandos que te ndra
//seran 3-1 = 2 la suma de los elementos de la pila seria 3+2=5 (numeros mas operandos)....
//6. Una calculadora debe resolver todo tipo de operaciones ya sean enteras o no por ello se hace uso de variables double
//en caso de diviciones que no exactas o suma,resta, multiplicacion...de numeros con parte decimal...

Scanner leer=new Scanner(System.in);


Pila A=new Pila ();
System.out.println("*****Calculadora Basica*****");
System.out.println("Cuantos numeros desea operar: ");
int num=leer.nextInt();
System.out.println("--------------------------------");
A.llenar((num*2)-1);
A.mostrar();
System.out.print("El resultado es");
calculadora(A);
}
}

You might also like