#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100 // Tamaño máximo de la pila
// Estructura de la pila
typedef struct {
double items[MAX];
int top;
} Pila;
// Funciones de la pila
void initPila(Pila *p) {
p->top = -1;
}
int isFull(Pila *p) {
return p->top == MAX - 1;
}
int isEmpty(Pila *p) {
return p->top == -1;
}
void push(Pila *p, double item) {
if (!isFull(p)) {
p->items[++(p->top)] = item;
} else {
printf("Pila llena\n");
}
}
double pop(Pila *p) {
if (!isEmpty(p)) {
return p->items[(p->top)--];
} else {
printf("Pila vacía\n");
return 0;
}
}
// Función para realizar operaciones
double operar(double a, double b, char operador) {
switch (operador) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return (b != 0) ? a / b : 0; // Manejo de división por cero
case '^': return pow(a, b);
case '%': return a * (b / 100);
default: return 0;
}
}
int main() {
Pila pila;
initPila(&pila);
double num1, num2, resultado;
char operador;
// Ingreso de números y operador
printf("Ingrese el primer número: ");
scanf("%lf", &num1);
push(&pila, num1);
printf("Ingrese el segundo número: ");
scanf("%lf", &num2);
push(&pila, num2);
printf("Ingrese el operador (+, -, *, /, ^, %%): ");
scanf(" %c", &operador);
// Sacar los números de la pila
double b = pop(&pila);
double a = pop(&pila);
// Realizar la operación
resultado = operar(a, b, operador);
// Mostrar el resultado
printf("Resultado: %.2lf\n", resultado);
return 0;
}