#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;
}