C/Visual C - Calculadora con Pilas

 
Vista:

Calculadora con Pilas

Publicado por Sebastián Aguirre (2 intervenciones) el 27/11/2002 14:03:47
Hola de nuevo, necesito un código fuente para ejecutar una calculadora mediante pilas, o por último cómo ingreso y opero 2 números mediante pilas. (Suma, resta, multiplicación, división, elevado y porcentajes)
Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de una calculadora utilizando pilas en C

Publicado por Alejandro (913 intervenciones) el 10/04/2025 19:55:11
A continuación, te muestro un ejemplo de cómo implementar una calculadora básica utilizando pilas en C. Esta calculadora podrá realizar operaciones como suma, resta, multiplicación, división, potencia y porcentaje.

1. Estructura de la pila



Primero, definimos la estructura de la pila y las funciones necesarias para manejarla.

Ejemplo de código



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#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;
}

2. Explicación del código


- Estructura de la pila: Se define una estructura `Pila` que contiene un arreglo para almacenar los elementos y un índice `top` para rastrear el elemento superior.
- Funciones de la pila: Se implementan funciones para inicializar la pila, verificar si está llena o vacía, y para agregar (`push`) y quitar (`pop`) elementos.
- Función de operación: La función `operar` toma dos números y un operador, y realiza la operación correspondiente.
- Ingreso de datos: Se piden al usuario dos números y un operador, que se almacenan en la pila.
- Cálculo y resultado: Se sacan los números de la pila, se realiza la operación y se muestra el resultado.

3. Consideraciones


- Manejo de errores: Se incluye un manejo básico de errores, como la división por cero.
- Extensibilidad: Puedes agregar más operaciones o mejorar la interfaz según sea necesario.

Con este código, tendrás una calculadora básica que utiliza pilas para operar con dos números. ¡Espero que te sea útil, Sebastián!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar